C++ 在其侧面显示一个圆锥体
我试着从上面看一个躺在一边的圆锥体。为此,我编写了以下代码:C++ 在其侧面显示一个圆锥体,c++,opengl,glut,opengl-compat,C++,Opengl,Glut,Opengl Compat,我试着从上面看一个躺在一边的圆锥体。为此,我编写了以下代码: void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(250, 250, 0); glRotatef(90, 1, 0, 0); glutSolidCone(2
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(250, 250, 0);
glRotatef(90, 1, 0, 0);
glutSolidCone(20, 20, 20, 20);
glTranslatef(-250, -250, 0);
glRotatef(-90, 1, 0, 0);
glFlush();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
float x, y;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("Cone");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMotionFunc(drag);
glutMouseFunc(click);
glutSpecialFunc(catchKey);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
我平移到屏幕中间,然后围绕x轴旋转90度,在我看来,这应该会在其侧面产生圆锥体。然而,结果不是一个圆锥体,而是一条不是倾斜90度而是倾斜45度的直线。为了使圆锥体按我所希望的那样显示,我应该更改什么?投影矩阵在哪里 如果不设置投影矩阵,则必须在规格化设备空间中设置坐标。在NDC中,所有坐标都在[-1.0,1.0]范围内: e、 g
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.5,0.5,0);
glRotatef(90,1,0,0);
1.0,1.0,20,20;
glTranslatef(-0.5,-0.5,0);
glRotatef(-90,1,0,0);
或者,可以设置正交投影,将世界坐标1:1投影到窗口坐标。投影矩阵可通过以下方式设置: e、 g
void显示(void)
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(0.0500.0500.0,0.0,-100.0100.0);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glTranslatef(250250,0);
glRotatef(90,1,0,0);
实心锥体(20,20,20,20);
glTranslatef(-250,-250,0);
glRotatef(-90,1,0,0);
glFlush();
glutSwapBuffers();
}
投影矩阵描述了从场景中视图的三维点到视口中二维点的映射。在正交投影时,视图空间坐标将线性映射到剪辑空间坐标。剪辑空间坐标等于标准化设备坐标。规格化设备坐标线性映射到视口矩形。 视口矩形可以由定义。最初,它由窗口的大小定义
请注意,几十年来,按序列绘制和固定函数矩阵堆栈一直被弃用。见和。 阅读并了解最先进的渲染方式