【新手求助】【代码】【OPENGL】【gluPerspective】
目的:在原点位置画一个向Z轴负方向申得很长的长方体,用gluLookAt和gluPerspective观察。
问题:看不到按Z=1处的浅蓝色的面,而且gluLookAt(0,0,【1.9】,0,0,0,0,1,0)的第三个参数一旦为2或者大于2,就看不到任何对象了。搞了很久弄不明白,请求帮助!谢谢了
代码:
#include<gl/glut.h>
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);//Set display-window color to white.
glMatrixMode(GL_PROJECTION);// Set projection parameters.
/********************【我的疑问在这两行】**********************/
gluLookAt(0,0,1.9,0,0,0,0,1,0);//【问题】第三个参数为2就看不到任何东西了。为什么?
gluPerspective(30,1,0.1,150); //我把参数怎样改都看不见Z=1的那个浅蓝色的面
/********************我的疑问在这两行**********************/
}
/********************定义用顶点数组画四边形的函数,然后再定义画长方体的函数***************/
GLfloat pt[8][3]={{-0.5,-0.5,1},{-0.5,0.5,1},{0.5,-0.5,1},{0.5,0.5,1},
{-0.5,-0.5,-10},{-0.5,0.5,-10},{0.5,-0.5,-10},{0.5,0.5,-10}};
void quad(GLint n1,GLint n2,GLint n3,GLint n4) //画四边形的函数
{
glBegin(GL_QUADS);
glVertex3fv(pt[n1]);
glVertex3fv(pt[n2]);
glVertex3fv(pt[n3]);
glVertex3fv(pt[n4]);
glEnd();
//glFlush();
}
void cube() //画长方体的函数
{
glColor3f(1.0,1.0,0.0);
quad(6,2,3,7);
glColor3f(1.0,0.0,0.0);
quad(5,1,0,4);
glColor3f(0.0,1.0,0.0);
quad(7,3,1,5);
glColor3f(1.0,0.0,1.0);
quad(4,0,2,6);
glColor3f(0.0,1.0,1.0);//浅蓝,最近面,z=1
quad(2,0,1,3);
glColor3f(0.0,0.0,0.0);//黑色,最远面,z=-50
quad(7,5,4,6);
glBegin(GL_LINES);
//X轴,黑色
glColor3f(0.0,0.0,0.0);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
//y轴,绿色
glColor3f(0.0,1.0,0.0);
glVertex3f(0,0,0);
glVertex3f(0,1,0);
//z轴,蓝色
glColor3f(0.0,0.0,1.0);
glVertex3f(0,0,0);
glVertex3f(0,0,1);
glEnd();
//glFlush();
}
void display( )
{
glClear(GL_COLOR_BUFFER_BIT);
cube();
glFlush();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);//Initialize GLUT
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//Set display mode.
glutInitWindowSize(500,500);//Set display-window width and height
glutInitWindowPosition(250,250);//Set top-left display-window position
glutCreateWindow("An Example OpenGL Program");//Create display window.
init(); //Execute initialization procedure.
glutDisplayFunc(display);//Send graphics to display window.
//glutReshapeFunc(reshape);//Reshape display window.
glutMainLoop(); //Display everything and wait.
return 0;
}