OpenGL透视图
我试图用透视投影来描绘一个立方体,但我得到的只是一个正方形的角。正方形的面设置在原点,并沿正方向展开。使用glOrtho我可以设置坐标系,但是我在使用GLPERCEPTION做同样的事情时遇到了麻烦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
#包括
空心网格(空心){
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,现在我可以看到整个立方体。