OpenGL绘制球体

于(0,0,0) 绘制一个半径R=1 的球体函数:
sphere_entry


void sphere_entry(int du, int dv){float gu = 3.1415926535 / du , gv = 2.0*3.1415926535 / (dv-1);float x, y, z ,r ;glPushMatrix();
#define MAKE_R(z2) sqrt(1.0 - (z2))
#define MAKE_Z(z_step) cos((z_step) *gu)
#define MAKE_Y(x_step,r) (r)*sin((x_step)* gv)
#define MAKE_X(x_step,r) (r)*cos((x_step)* gv)// 球体glBegin(GL_QUADS);for (int z_step = 0 ; z_step < du; ++z_step) {for (int x_step = 0; x_step < dv; ++x_step) {z = MAKE_Z(z_step);r = MAKE_R(z*z);x = MAKE_X(x_step, r);y = MAKE_Y(x_step, r);glVertex3f(x, y, z);z = MAKE_Z(z_step+1);r = MAKE_R(z*z);x = MAKE_X(x_step, r);y = MAKE_Y(x_step, r);glVertex3f(x, y, z);z = MAKE_Z(z_step + 1);r = MAKE_R(z*z);x = MAKE_X(x_step + 1,r);y = MAKE_Y(x_step+1, r);glVertex3f(x, y, z);z = MAKE_Z(z_step);r = MAKE_R(z*z);x = MAKE_X(x_step + 1,r);y = MAKE_Y(x_step + 1, r);glVertex3f(x, y, z);}}glEnd();
#undef MAKE_Y
#undef MAKE_Z
#undef MAKE_X
#undef MAKE_RglPopMatrix();
}

显示效果:

所有代码:
main.cpp


#include "pch.h"
#include <iostream>#include <E:/vc++/OpenGL/include/GLTools.h>
#include <E:/vc++/OpenGL/include/GLShaderManager.h>#ifdef _WIN32
#define FREEGLUT_STATIC
#include <E:/vc++/OpenGL/include/GL/glut.h>
#endif#include "sphere.h"float angle;void changed_size(int w, int h) {// 修改视窗sizeglViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0f, double(w) / double(h), 1.0f, 1000.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0f, 0.0f, 5.0f,0.0f, 0.0f, 0.0f,0.0f, 1.0f, 0.0f);
}// 初始化渲染环境
void setup_rc() {// 蓝色背景glClearColor(0.f, 0.f, .3f, 1.f);angle = 0.0f;glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);}// 渲染
void render(void) {// 清除颜色缓冲、深度缓冲、模板缓冲glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -5.0f);glRotatef(angle, 0.0f, 1.0f, 1.0f);glColor3f(.6f, .05f, .95f);sphere_entry(32,32);angle += .02f;angle = angle > 360.0f ? 0.0f : angle;// 交换缓冲区glutSwapBuffers();
}int main(int argc, char**argv) {gltSetWorkingDirectory(*argv);glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);glutInitWindowSize(800, 600);glutCreateWindow("OpenGL App");glutReshapeFunc(changed_size);glutDisplayFunc(render);glutIdleFunc(render);GLenum err = glewInit();if (GLEW_OK != err) {std::cerr << "GLEW Error : " << glewGetErrorString(err) << std::endl;return 1;}setup_rc();glutMainLoop();return 0;
}

OpenGL绘制球体相关推荐

  1. OpenGL绘制球体模拟自由落体运动(基于Qt)

    自由落体的物理公式想必大家都清楚(y=vt+0.5gt^2). 但是用程序如何模拟这个过程呢? 1.其中比较关键的是设定一个计时器,在一个视觉暂留时间段(dt=0.02s)内根据小球的位置坐标绘制小球 ...

  2. Qt OpenGL(07)递归细分四面体法绘制球体

    文章目录 Qt OpenGL通过递归细分逼近球面 思路 下面就是绘制的代码: Widget.cpp 顶点着色器 片段着色器 Qt OpenGL通过递归细分逼近球面 在OpenGL中绘制球面,不是太简单 ...

  3. opengl绘制长方体线框_OpenGL绘图实例十之绘制3D机器人

    综述 通过上一节说的绘制3D图形基础,我们应该对绘制3D图形有了基本的认识,接下来我们就进行一个实例,绘制一个3D机器人. 本节我们要完成的任务有: 1.绘制一个仿真3D机器人(样式自选,参考例图), ...

  4. openGL绘制带纹理地球,并实现鼠标键盘控制

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.绘制球体 二.关键代码 球体类(Sphere) 主函数 顶点着色器 片元着色器 显示效果 源码下载 参考 前言 openGL绘制 ...

  5. python绘制球体_OpenGL三维球体数据生成与绘制【附源码】

    OpenGL三维球体数据生成与绘制源码: #include #include #include #include #include #include #include #include #includ ...

  6. OpenGL学习-球体和phong光照模型

    OpenGL学习-球体和phong光照模型 开发环境搭建参考:https://lexiaoyuan.blog.csdn.net/article/details/120059213 通用配置步骤 Vis ...

  7. openGL绘制带纹理太阳、地球、月亮,并且地球自转并且围绕太阳旋转。月亮自转也会围绕地球旋转

    openGL系列文章目录 前言 使用openGL绘制太阳.地球.月亮,太阳自转,地球自转并且围绕太阳旋转.月亮自转也会围绕地球旋转,其实月亮也会围绕太阳旋转的. 一.效果 还是有不满意的地方: 1.没 ...

  8. OpenGL绘制地球仪(包含环境配置)

    OpenGL绘制地球仪 文章目录 OpenGL绘制地球仪 环境配置 glut配置 glaux环境配置 源码 Main.cpp MyTexMgr.h MyTexMgr.cpp 资料下载 环境配置 使用软 ...

  9. 如何用 OpenGL 绘制雪花?

    作者 | 许向武 责编 | 张红月 出品 | CSDN博客 看冬奥才知道,阿勒泰不但是中国的"雪都",还是"人类滑雪起源地".这个说法是否成立,姑且不论,阿勒泰 ...

最新文章

  1. 用于 Outlook 2003 的删除重复邮件的插件(加载项)
  2. 树、森林与二叉树的相互转换
  3. (Mybatis)复杂查询
  4. MySQL DATEDIFF(d1,d2) 计算日期 d1-d2 之间相隔的天数
  5. c++ mmap写入速度_Linux系统编程_用mmap+数组的方式修改数据文件
  6. SpringBoot2 整合 AXIS 服务端和客户端
  7. echarts中toolbox位置_echarts toolbox 扩展
  8. How browsers work
  9. python调用图灵api_python调用API实现智能回复机器人
  10. 无线通信定位一体化进展及其在煤矿井下应用分析
  11. 计算机台式硬件排名,CPU天梯图2019年1月最新版 一月台式电脑处理器排名
  12. 语法错误与语义错误(所有语言通用版)
  13. 国内 WhatsApp 能用吗?WhatsApp对外贸企业的重要性?
  14. 软件测试 之Web项目实战
  15. sports.php什么意思,使用Yahoo Fantasy Sports API的PHP和JSON
  16. ros中关于ros::Rate 和ros::spin()等的理解
  17. Python实现文件简单加解密
  18. Mysql全套看这一篇就够了特别详细
  19. HTML5+CSS大作业——个人旅游图片博客(7页)
  20. 面对复杂的项目环境,如何制定项目管理计划?

热门文章

  1. 崔天翼的找工作总结 zz
  2. VR全景有什么应用,和传统摄影的区别,发展前景如何?
  3. VMware虚拟机nat模式详解
  4. STM32F103标准库开发---目录
  5. Ble低功耗蓝牙和蓝牙mesh网络之间的关系
  6. Excel的使用-查看公式引用的单元格【跬步】
  7. 致诸弟·明师益友虚心请教
  8. 《腾云点菜宝》项目总结
  9. RuoYi-Vue——图标使用
  10. 大城市灯红酒绿,海伦司靠一杯酒如何建起护城河?