glu中提供了一个绘制圆柱体的函数:

void gluCylinder( GLUquadric* quad,
    GLdouble base,
    GLdouble top,
    GLdouble height,
    GLint slices,
    GLint stacks )
使用方法是:

GLUquadric *pObj; 
pObj = gluNewQuadric();

调用gluCylinder函数时,将pObj作为第一个参数传入。
gluDeleteQuadric(pObj);

这样子绘制出的圆柱体是空心的:

我根据gluCylinder函数写了个函数,将两边封顶。

[cpp] view plain copy print ?
  1. void mySolidCylinder( GLUquadric*   quad,
  2. GLdouble base,
  3. GLdouble top,
  4. GLdouble height,
  5. GLint slices,
  6. GLint stacks )
  7. {
  8. glColor3f(84.0/255, 0.0, 125.0/255.0);
  9. gluCylinder(quad, base, top, height, slices, stacks);
  10. //top
  11. DrawCircleArea(0.0, 0.0, height, top, slices);
  12. //base
  13. DrawCircleArea(0.0, 0.0, 0.0, base, slices);
  14. }
  15. GLvoid DrawCircleArea(float cx, float cy, float cz, float r, int num_segments)
  16. {
  17. GLfloat vertex[4];
  18. const GLfloat delta_angle = 2.0*M_PI/num_segments;
  19. glBegin(GL_TRIANGLE_FAN);
  20. vertex[0] = cx;
  21. vertex[1] = cy;
  22. vertex[2] = cz;
  23. vertex[3] = 1.0;
  24. glVertex4fv(vertex);
  25. //draw the vertex on the contour of the circle
  26. for(int i = 0; i < num_segments ; i++)
  27. {
  28. vertex[0] = std::cos(delta_angle*i) * r + cx;
  29. vertex[1] = std::sin(delta_angle*i) * r + cy;
  30. vertex[2] = cz;
  31. vertex[3] = 1.0;
  32. glVertex4fv(vertex);
  33. }
  34. vertex[0] = 1.0 * r + cx;
  35. vertex[1] = 0.0 * r + cy;
  36. vertex[2] = cz;
  37. vertex[3] = 1.0;
  38. glVertex4fv(vertex);
  39. glEnd();
  40. }

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 绘制圆柱体相关推荐

  1. Modern OpenGL绘制圆柱体

    本文主要介绍如何使用 C++ 生成圆柱几何体以及如何在 OpenGL 中绘制它. 1.绘制方法 由于我们无法绘制一个完美的圆形底面和圆柱体的弯曲侧面,我们只能通过将底面除以扇区(切片)来采样有限数量的 ...

  2. 学习OpenGL ES之绘制圆柱体

    获取示例代码 本文将要介绍如何使用代码绘制一个圆柱体,通过绘制圆柱体可以更好的掌握法线,UV,TriangleFan,TriangleStrip等相关知识.在绘制之前,先进行一些准备工作. GLGeo ...

  3. opengl 绘制实心圆柱体

    glu中提供了一个绘制圆柱体的函数: void gluCylinder( GLUquadric* quad,     GLdouble base,     GLdouble top,     GLdo ...

  4. 如何用 OpenGL 绘制雪花?

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

  5. 使用OpenGL绘制圆环体(Torus)

    本篇介绍一下使用OpenGL绘制圆环体的方法.程序是在C#和OpenTK环境下编译的. 代码: /// <summary> /// 绘制圆环体 /// </summary> / ...

  6. 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )

    文章目录 一.绘制三角形 二.三角形绘制顺序 1.绘制正面 2.三个点逆时针方向排列 3.三个点顺时针方向排列 4.设置点的正面方向 三.绘制多个三角形 四.相关资源 一.绘制三角形 三角形绘制即绘制 ...

  7. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )

    文章目录 一.绘制单个点 二.绘制多个点 三.相关资源 在上一篇博客 [OpenGL]十.OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | ...

  8. 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

    文章目录 一.初始化 OpenGL 矩阵 1.设置投影矩阵 2.设置模型视图矩阵 二.绘制点 1.清除缓冲区 2.设置当前颜色值 3.设置绘制点的大小 4.绘制点 5.将缓冲区绘制到前台 三.部分代码 ...

  9. 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )

    文章目录 一.OpenGL 状态机概念 二.OpenGL 矩阵概念 上一篇博客 [OpenGL]八.初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗 ...

最新文章

  1. 不忘初心,砥砺前行——写在数据院成立四周年之际
  2. 如何使用Visual Studio Code作为Git的默认编辑器
  3. Nginx CONTENT阶段 static模块
  4. angularJs关于指令的一些冷门属性
  5. python对键和值有没有类型限制_第026课:词典:索引不易使用时2,讲,字典,当,不好...
  6. Android 2.3.5/4.0.3/4.1PowerManager简单总结和心得体会
  7. 2Y叔的clusterProfiler-book阅读Chapter 2 Functional Enrichment Analysis Methods
  8. JavaScript如何获取css属性
  9. wps无法打印_wps官方下载最新版_wps办公软件官方下载[办公软件]
  10. 努比亚(nubia) V18 NX612J 解锁BootLoader 并刷入recovery ROOT
  11. 联想y7000电脑未正确启动_联想y7000wifi突然不能用了是怎么回事
  12. 摄影构图学83年绝版_学手机摄影最好要知道的70条忠告!都是大实话
  13. 十一.TensorFlow之可视化好帮手B
  14. 指标波动的原因很头疼?不妨试试“问诊”法!
  15. Tomcat启动时报错:A child container failed during start解决方案-clean
  16. 网站关键词怎么合理布局提升网站排名
  17. 如何用Phaser实现一个全家福拼图H5
  18. Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册
  19. Henry前端笔记之 CSS相关
  20. 定义一个圆类-Circle,在类的内部提供一个属性:半径(r):同时提供两个方法:计算面积( getArea() )和计算周长( getPerimeter() )。

热门文章

  1. 中英文说明书丨正常兔血清
  2. python 读取.env配置文件
  3. js将数字转换成字母
  4. 模拟RPC调用(Feign)
  5. java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum
  6. 商学院转CS,零算法基础,摆脱题海战术拿到 Bloomberg Offer
  7. 【bzoj3991】 寻宝游戏
  8. ----海子----《面朝大海 春暖花开》
  9. gateway<1>
  10. Java自动装箱与自动拆箱