OpenGL绘制球体
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绘制球体相关推荐
- OpenGL绘制球体模拟自由落体运动(基于Qt)
自由落体的物理公式想必大家都清楚(y=vt+0.5gt^2). 但是用程序如何模拟这个过程呢? 1.其中比较关键的是设定一个计时器,在一个视觉暂留时间段(dt=0.02s)内根据小球的位置坐标绘制小球 ...
- Qt OpenGL(07)递归细分四面体法绘制球体
文章目录 Qt OpenGL通过递归细分逼近球面 思路 下面就是绘制的代码: Widget.cpp 顶点着色器 片段着色器 Qt OpenGL通过递归细分逼近球面 在OpenGL中绘制球面,不是太简单 ...
- opengl绘制长方体线框_OpenGL绘图实例十之绘制3D机器人
综述 通过上一节说的绘制3D图形基础,我们应该对绘制3D图形有了基本的认识,接下来我们就进行一个实例,绘制一个3D机器人. 本节我们要完成的任务有: 1.绘制一个仿真3D机器人(样式自选,参考例图), ...
- openGL绘制带纹理地球,并实现鼠标键盘控制
openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.绘制球体 二.关键代码 球体类(Sphere) 主函数 顶点着色器 片元着色器 显示效果 源码下载 参考 前言 openGL绘制 ...
- python绘制球体_OpenGL三维球体数据生成与绘制【附源码】
OpenGL三维球体数据生成与绘制源码: #include #include #include #include #include #include #include #include #includ ...
- OpenGL学习-球体和phong光照模型
OpenGL学习-球体和phong光照模型 开发环境搭建参考:https://lexiaoyuan.blog.csdn.net/article/details/120059213 通用配置步骤 Vis ...
- openGL绘制带纹理太阳、地球、月亮,并且地球自转并且围绕太阳旋转。月亮自转也会围绕地球旋转
openGL系列文章目录 前言 使用openGL绘制太阳.地球.月亮,太阳自转,地球自转并且围绕太阳旋转.月亮自转也会围绕地球旋转,其实月亮也会围绕太阳旋转的. 一.效果 还是有不满意的地方: 1.没 ...
- OpenGL绘制地球仪(包含环境配置)
OpenGL绘制地球仪 文章目录 OpenGL绘制地球仪 环境配置 glut配置 glaux环境配置 源码 Main.cpp MyTexMgr.h MyTexMgr.cpp 资料下载 环境配置 使用软 ...
- 如何用 OpenGL 绘制雪花?
作者 | 许向武 责编 | 张红月 出品 | CSDN博客 看冬奥才知道,阿勒泰不但是中国的"雪都",还是"人类滑雪起源地".这个说法是否成立,姑且不论,阿勒泰 ...
最新文章
- 用于 Outlook 2003 的删除重复邮件的插件(加载项)
- 树、森林与二叉树的相互转换
- (Mybatis)复杂查询
- MySQL DATEDIFF(d1,d2)	计算日期 d1-d2 之间相隔的天数
- c++ mmap写入速度_Linux系统编程_用mmap+数组的方式修改数据文件
- SpringBoot2 整合 AXIS 服务端和客户端
- echarts中toolbox位置_echarts toolbox 扩展
- How browsers work
- python调用图灵api_python调用API实现智能回复机器人
- 无线通信定位一体化进展及其在煤矿井下应用分析
- 计算机台式硬件排名,CPU天梯图2019年1月最新版 一月台式电脑处理器排名
- 语法错误与语义错误(所有语言通用版)
- 国内 WhatsApp 能用吗?WhatsApp对外贸企业的重要性?
- 软件测试 之Web项目实战
- sports.php什么意思,使用Yahoo Fantasy Sports API的PHP和JSON
- ros中关于ros::Rate 和ros::spin()等的理解
- Python实现文件简单加解密
- Mysql全套看这一篇就够了特别详细
- HTML5+CSS大作业——个人旅游图片博客(7页)
- 面对复杂的项目环境,如何制定项目管理计划?