Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在其侧面显示一个圆锥体_C++_Opengl_Glut_Opengl Compat - Fatal编程技术网

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();
}
投影矩阵描述了从场景中视图的三维点到视口中二维点的映射。在正交投影时,视图空间坐标将线性映射到剪辑空间坐标。剪辑空间坐标等于标准化设备坐标。
规格化设备坐标线性映射到视口矩形。 视口矩形可以由定义。最初,它由窗口的大小定义


请注意,几十年来,按序列绘制和固定函数矩阵堆栈一直被弃用。见和。 阅读并了解最先进的渲染方式