使用 GLUT 绘制圆锥和圆柱

Posted

技术标签:

【中文标题】使用 GLUT 绘制圆锥和圆柱【英文标题】:Drawing a Cone and Cylinder using GLUT 【发布时间】:2014-04-18 14:47:18 【问题描述】:

我一直在尝试使用 GLUT 绘制一个圆锥体和一个圆柱体。到目前为止我写的代码从用户那里取了两个点,代表圆锥/圆柱的高度,我想用这两个点画一个圆锥和一个圆柱。

我查了谷歌,找到了名为glutWireCone()gluCylinder()的标准函数,但我无法理解如何使用这些函数以我想要的方式进行绘制。有人可以告诉我如何使用这两个点绘制圆锥和圆柱吗?如果您需要一些额外的信息来正确理解我的问题,请告诉我。

这里是我的init()main()函数,让你了解我的程序设置:

void init(void)

   glClearColor(0.0, 0.0, 0.0, 0.0);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0.0, WINDOW_WIDTH-1, WINDOW_HEIGHT-1, 0, -1000.0, 1000.0);
   glMatrixMode(GL_MODELVIEW);
   glClear(GL_COLOR_BUFFER_BIT);




int main(int argc, char** argv)

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
  glutInitWindowPosition(220, 80);
  glutCreateWindow("Mini Paint - 3D");

  init();

  glutDisplayFunc(display);
  glutMouseFunc(mouseClick);
  glutMotionFunc(mouseMove);
  glutKeyboardFunc(keyboard);

  glutMainLoop();

  return 0;

【问题讨论】:

为什么不想使用 OpenGL?在这种情况下,使用 Glut over OpenGL 对您来说没有任何意义 @Gmercer015 好的,那么你将如何在 OpenGL 中做到这一点? 我建议使用@Fructose 提供的答案中提到的 gluCylinder() 【参考方案1】:

好吧,让我们将 gluCylinder 函数应用到您的显示函数中。看看它的参数:

void gluCylinder(GLU quadric* quad,
                 GLdouble base,
                 GLdouble top,
                 GLdouble height,
                 GLint    slices,
                 GLint    stacks);

所以你想在输入高度参数的情况下绘制一个圆柱体。我猜其他一切都将保持不变。每次渲染时,您都需要使用 glPushMatrixglRotatef,具体取决于您希望它的方向,并以 glPopMatrix 结束此调用

例如:OnRender(float pHeight)

void OnRender(float pHeight) 
    glClearColor(1.0f, 0.0f, 0.0f, 1.0f); //clear
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glLoadIdentity();

    gluCylinder(quadratic, 0.1f, 0.1f, pHeight, 32, 32);

    glFlush();

声明一个二次对象:

GLUquadricObj *quadratic;
quadratic = gluNewQuadric();

gluCylinder 文档:https://www.opengl.org/sdk/docs/man2/xhtml/gluCylinder.xml

【讨论】:

以上是关于使用 GLUT 绘制圆锥和圆柱的主要内容,如果未能解决你的问题,请参考以下文章

点云处理技术之open3d第四篇:使用open3d绘制常用类型——箭头圆柱长方体球形箭头坐标轴和线条

如何使用 GLUT 在按键上绘制形状?

数据可视化应用地图投影(附代码)

在圆柱/圆锥上统一生成 3D 点

3dmax 创建圆锥体1

OpenGL/GLUT 圆锥表面法线