我想使用 opengl 转换对象绘制花园。起初我已经开始绘制花瓣,我希望它旋转以便创建花,但是当我使用 glRotatef()
时,我再也看不到对象了。
这是我的部分代码:
const float DEG2RAD = 3.14159 / 180;
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 400.0, 0.0, 400.0);
glMatrixMode(GL_MODELVIEW);
}
void petal(void)
{
float x, y, z;
float A = 20;
float t;
glColor3f(1.0, 0.0, 0.0);
glPointSize(2);
glLoadIdentity();
glRotatef(90.0, 0.0, 0.0, 0.5);
glTranslatef(10,10, 0);
glBegin(GL_POINTS);
t = 0;
while (t < 90)
{
x = A*sin(2 * t*DEG2RAD)*cos(t*DEG2RAD);
y = A*sin(2 * t*DEG2RAD)*sin(t*DEG2RAD);
z = 0;
glVertex3f(x, y, z);
t++;
}
glEnd();
glFlush();
}
int main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(200, 100);
glutInitWindowSize(600, 600);
glutCreateWindow("Garden");
init();
glClear(GL_COLOR_BUFFER_BIT);
glutDisplayFunc(petal);
glutMainLoop();
return 0;
}
最佳答案
我能够编译和测试您的完整代码。错误在于 petal
中的转换顺序:
glRotatef(90.0, 0.0, 0.0, 0.5);
glTranslatef(100,100, 0);
这将首先将花瓣平移到窗口的中心,然后围绕左下角(由 gluOrtho2D
设置的原点)旋转 90°。结果,花瓣飞到了窗外。您只需要交换两个调用:
glTranslatef(100,100, 0);
glRotatef(90.0, 0.0, 0.0, 1.0);
然后花瓣首先围绕原点(即它的尖端)旋转,然后平移到中心。
附带说明一下,您似乎在使用 GLUT 之前忘记调用 glutInit(&argc, argv)
,我在运行时遇到了一个硬错误。
关于c++ - 在 opengl 中应用转换函数后未显示对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37477527/