我一直试图用GLUT绘制圆锥和圆柱体。到目前为止我写的代码从用户那里拿了两个点,它代表了圆锥/圆柱的高度,我想用这两个点绘制圆锥和圆柱。
我查找了Google并找到了名为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;
}
答案 0 :(得分:1)
好吧,让我们使用gluCylinder
函数并将其应用于您的显示功能。看看它的参数:
void gluCylinder(GLU quadric* quad,
GLdouble base,
GLdouble top,
GLdouble height,
GLint slices,
GLint stacks);
因此,您希望在给定height参数作为输入的情况下绘制圆柱体。我猜其他一切都会保持不变。每次渲染时,您都希望使用glPushMatrix
和glRotatef
,具体取决于您希望其方向,请使用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