【新手求助】【代码】【OPENGL】【gluPerspective】

true1064 2009-12-25 05:37:46
目的:在原点位置画一个向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;
}
...全文
74 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
张赐 2009-12-25
  • 打赏
  • 举报
回复
原因很简单
你的gluLookAt(0,0,1.9,0,0,0,0,1,0);是作用于投影变换的,因为在glLookAt前面,你使用了
glMatrixMode(GL_PROJECTION);

但是在openGL管线中,在投影变换阶段会把物体的所有定点坐标转换到单位viewvolume中,你设置相机位置为1.9,这里是在相机坐标系中的位置。

所以要设置相机在世界坐标中的位置,应该在模型变换矩阵中来设置,即使用
glMatrixMode(GL_MODLEVIEW);
true1064 2009-12-25
  • 打赏
  • 举报
回复
谢谢指点!弄出来了

void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);

/*********相机位置在glMatrixMode(GL_MODELVIEW)之后设定************/
glMatrixMode(GL_MODELVIEW);
gluLookAt(1,2,2,0,0,0,0,1,0);

/*********透视投影在glMatrixMode(GL_PROJECTION)之后设定************/
glMatrixMode(GL_PROJECTION);
gluPerspective(60,1,0.2,150);

}

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧