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
OpenGL透视图_Opengl_3d_Projection - Fatal编程技术网

OpenGL透视图

OpenGL透视图,opengl,3d,projection,Opengl,3d,Projection,我试图用透视投影来描绘一个立方体,但我得到的只是一个正方形的角。正方形的面设置在原点,并沿正方向展开。使用glOrtho我可以设置坐标系,但是我在使用GLPERCEPTION做同样的事情时遇到了麻烦 #包括 空心网格(空心){ float v[8][3]={/*立方体8个角的顶点*/ {0.0, 0.0, 0.0}, {100.0, 0.0, 0.0}, {100.0, 100.0, 0.0}, {0.0, 100.0, 0.0}, {0.0, 0.0, -100.0}, {100.0, 0.0

我试图用透视投影来描绘一个立方体,但我得到的只是一个正方形的角。正方形的面设置在原点,并沿正方向展开。使用glOrtho我可以设置坐标系,但是我在使用GLPERCEPTION做同样的事情时遇到了麻烦

#包括
空心网格(空心){
float v[8][3]={/*立方体8个角的顶点*/
{0.0, 0.0, 0.0}, {100.0, 0.0, 0.0}, {100.0, 100.0, 0.0}, {0.0, 100.0, 0.0},
{0.0, 0.0, -100.0}, {100.0, 0.0, -100.0}, {100.0, 100.0, -100.0}, {0.0, 100.0, -100.0} };
float n[6][3]={/*立方体6个面的法线*/
{0.0, 0.0, 1.0}, {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0},
{-1.0, 0.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, 0.0, -1.0} };
int f[6][4]={/*构成立方体6个面的v中顶点的索引*/
{0, 1, 2, 3}, {1, 5, 6, 2}, {3, 2, 6, 7}, 
{0, 4, 7, 3}, {0, 1, 5, 4}, {4, 5, 6, 7} };
对于(int j=0;j<6;j++){
glBegin(GL_QUADS);
glNormal3fv(&n[j][0]);
glVertex3fv(&v[f[j][0]][0]);
glVertex3fv(&v[f[j][1]][0]);
glVertex3fv(&v[f[j][2]][0]);
glVertex3fv(&v[f[j][3]][0]);
格伦德();
glFlush();
}
}
作废显示(作废){
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
GL3F(1.0,0.0,0.0);
网格();
}
void main(整型argc,字符**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_深度| GLUT_单个);
glutInitWindowSize(400300);
位置(200200);
玻璃窗(“网格”);
glClearColor(0.0,0.0,0.0,1.0);
glMatrixMode(GL_投影);
glLoadIdentity();
//glRotatef(15,0.0,0.0,1.0);
//格洛托(-400.0,400.0,-300.0,300.0,200.0,-200.0);
(120,1,0600),;
glEnable(GLU深度试验);
glEnable(GL_正常化);
glutDisplayFunc(显示器);
glutMainLoop();
}

你说你只看到立方体的角?那么你的视野太宽了。。您正在使用gluPerspective()并提供正确的计算结果。。值与imo有点偏差,功能参数为:

void gluPerspective(GLdouble fovy,
                    GLdouble aspect_ratio,
                    GLdouble zNear,
                    GLdouble zFar);
我建议把它改成

gluPerspective(45.0f,
               width_of_window / height_of_window,    //aspect ratio
               0.1f, 
               500.0f);

你为什么上吊?那一定是我见过的画任何东西的最复杂的方法之一。。二维数组?你是说比这容易?!!我想我的教授是想让我们了解投影是如何工作的。我同意这很难,所以我希望绘制3D图形不会那么麻烦。请阅读以下内容:我认为,由于相机默认设置在z轴上,立方体的面位于x轴和y轴上,无论远近在哪里,立方体都正好对着近平面。我将所有z值偏移-100,现在我可以看到整个立方体。