opengl 绘制圆柱体
glu中提供了一个绘制圆柱体的函数:
void gluCylinder( GLUquadric* quad,
GLdouble base,
GLdouble top,
GLdouble height,
GLint slices,
GLint stacks )
使用方法是:
GLUquadric *pObj;
pObj = gluNewQuadric();
调用gluCylinder函数时,将pObj作为第一个参数传入。
gluDeleteQuadric(pObj);
这样子绘制出的圆柱体是空心的:
我根据gluCylinder函数写了个函数,将两边封顶。
- void mySolidCylinder( GLUquadric* quad,
- GLdouble base,
- GLdouble top,
- GLdouble height,
- GLint slices,
- GLint stacks )
- {
- glColor3f(84.0/255, 0.0, 125.0/255.0);
- gluCylinder(quad, base, top, height, slices, stacks);
- //top
- DrawCircleArea(0.0, 0.0, height, top, slices);
- //base
- DrawCircleArea(0.0, 0.0, 0.0, base, slices);
- }
- GLvoid DrawCircleArea(float cx, float cy, float cz, float r, int num_segments)
- {
- GLfloat vertex[4];
- const GLfloat delta_angle = 2.0*M_PI/num_segments;
- glBegin(GL_TRIANGLE_FAN);
- vertex[0] = cx;
- vertex[1] = cy;
- vertex[2] = cz;
- vertex[3] = 1.0;
- glVertex4fv(vertex);
- //draw the vertex on the contour of the circle
- for(int i = 0; i < num_segments ; i++)
- {
- vertex[0] = std::cos(delta_angle*i) * r + cx;
- vertex[1] = std::sin(delta_angle*i) * r + cy;
- vertex[2] = cz;
- vertex[3] = 1.0;
- glVertex4fv(vertex);
- }
- vertex[0] = 1.0 * r + cx;
- vertex[1] = 0.0 * r + cy;
- vertex[2] = cz;
- vertex[3] = 1.0;
- glVertex4fv(vertex);
- glEnd();
- }
void mySolidCylinder( GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks ) { glColor3f(84.0/255, 0.0, 125.0/255.0); gluCylinder(quad, base, top, height, slices, stacks); //top DrawCircleArea(0.0, 0.0, height, top, slices); //base DrawCircleArea(0.0, 0.0, 0.0, base, slices); } GLvoid DrawCircleArea(float cx, float cy, float cz, float r, int num_segments) { GLfloat vertex[4]; const GLfloat delta_angle = 2.0*M_PI/num_segments; glBegin(GL_TRIANGLE_FAN); vertex[0] = cx; vertex[1] = cy; vertex[2] = cz; vertex[3] = 1.0; glVertex4fv(vertex); //draw the vertex on the contour of the circle for(int i = 0; i < num_segments ; i++) { vertex[0] = std::cos(delta_angle*i) * r + cx; vertex[1] = std::sin(delta_angle*i) * r + cy; vertex[2] = cz; vertex[3] = 1.0; glVertex4fv(vertex); } vertex[0] = 1.0 * r + cx; vertex[1] = 0.0 * r + cy; vertex[2] = cz; vertex[3] = 1.0; glVertex4fv(vertex); glEnd(); }
最终绘制出的圆柱体:
opengl 绘制圆柱体相关推荐
- Modern OpenGL绘制圆柱体
本文主要介绍如何使用 C++ 生成圆柱几何体以及如何在 OpenGL 中绘制它. 1.绘制方法 由于我们无法绘制一个完美的圆形底面和圆柱体的弯曲侧面,我们只能通过将底面除以扇区(切片)来采样有限数量的 ...
- 学习OpenGL ES之绘制圆柱体
获取示例代码 本文将要介绍如何使用代码绘制一个圆柱体,通过绘制圆柱体可以更好的掌握法线,UV,TriangleFan,TriangleStrip等相关知识.在绘制之前,先进行一些准备工作. GLGeo ...
- opengl 绘制实心圆柱体
glu中提供了一个绘制圆柱体的函数: void gluCylinder( GLUquadric* quad, GLdouble base, GLdouble top, GLdo ...
- 如何用 OpenGL 绘制雪花?
作者 | 许向武 责编 | 张红月 出品 | CSDN博客 看冬奥才知道,阿勒泰不但是中国的"雪都",还是"人类滑雪起源地".这个说法是否成立,姑且不论,阿勒泰 ...
- 使用OpenGL绘制圆环体(Torus)
本篇介绍一下使用OpenGL绘制圆环体的方法.程序是在C#和OpenTK环境下编译的. 代码: /// <summary> /// 绘制圆环体 /// </summary> / ...
- 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )
文章目录 一.绘制三角形 二.三角形绘制顺序 1.绘制正面 2.三个点逆时针方向排列 3.三个点顺时针方向排列 4.设置点的正面方向 三.绘制多个三角形 四.相关资源 一.绘制三角形 三角形绘制即绘制 ...
- 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
文章目录 一.绘制单个点 二.绘制多个点 三.相关资源 在上一篇博客 [OpenGL]十.OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | ...
- 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )
文章目录 一.初始化 OpenGL 矩阵 1.设置投影矩阵 2.设置模型视图矩阵 二.绘制点 1.清除缓冲区 2.设置当前颜色值 3.设置绘制点的大小 4.绘制点 5.将缓冲区绘制到前台 三.部分代码 ...
- 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )
文章目录 一.OpenGL 状态机概念 二.OpenGL 矩阵概念 上一篇博客 [OpenGL]八.初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗 ...
最新文章
- 不忘初心,砥砺前行——写在数据院成立四周年之际
- 如何使用Visual Studio Code作为Git的默认编辑器
- Nginx CONTENT阶段 static模块
- angularJs关于指令的一些冷门属性
- python对键和值有没有类型限制_第026课:词典:索引不易使用时2,讲,字典,当,不好...
- Android 2.3.5/4.0.3/4.1PowerManager简单总结和心得体会
- 2Y叔的clusterProfiler-book阅读Chapter 2 Functional Enrichment Analysis Methods
- JavaScript如何获取css属性
- wps无法打印_wps官方下载最新版_wps办公软件官方下载[办公软件]
- 努比亚(nubia) V18 NX612J 解锁BootLoader 并刷入recovery ROOT
- 联想y7000电脑未正确启动_联想y7000wifi突然不能用了是怎么回事
- 摄影构图学83年绝版_学手机摄影最好要知道的70条忠告!都是大实话
- 十一.TensorFlow之可视化好帮手B
- 指标波动的原因很头疼?不妨试试“问诊”法!
- Tomcat启动时报错:A child container failed during start解决方案-clean
- 网站关键词怎么合理布局提升网站排名
- 如何用Phaser实现一个全家福拼图H5
- Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册
- Henry前端笔记之 CSS相关
- 定义一个圆类-Circle,在类的内部提供一个属性:半径(r):同时提供两个方法:计算面积( getArea() )和计算周长( getPerimeter() )。