1.在 写这段 程序 的 一开始 ,图形 没有 出来,因为 在 reShape函数 没写 投影矩阵的 函数;
2.还有 这段程序 我跟踪了 一下,首先 执行 reShape ,然后 才是 disPlay 函数,挺奇怪的。
等待 以后自己解答!如果 有好心的 博友 解答就是 极好的了。
学习了 新的 几个 OPENGL 函数。但是 对于 为什么 图形 会这样, 不明白!!!
void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
该函数定义一个视图
矩阵,并与当前矩阵相乘。
第一组eyex, eyey,eyez 相机在世界坐标的位置
第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置
第三组upx,upy,upz 相机向上的方向在世界坐标中的方向
你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)
void gluPerspective(
GLdouble fovy, //角度
GLdouble aspect,//视景体的宽高比
GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处
GLdouble zFar //沿z轴方向的两裁面之间的距离的远处
)
glFrustum : 设置透视矩阵,并与当前矩阵相乘;
left,right指明相对于垂直平面的左右坐标位置
bottom,top指明相对于水平剪切面的下上位置
nearVal,farVal指明相对于深度剪切面的远近的距离,两个必须为正数
// cube.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <gl/glut.h>
void init(){
glClearColor(0,0,0,0);
//glEnable(GL_DEPTH_TEST);
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,1);
glLoadIdentity();
gluLookAt(0.0,0.0,10, 0.0,0.0,0.0, 0.0,-1.0,0.0);
//glTranslatef(0,0,-5);
//glScalef(1,2,1);
glutWireCube(4.0);
//glutSwapBuffers();
glFlush();
}
void reShape(int width,int height){
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1,1,-1, 1,1.5,20);
//gluPerspective(50,1,10,20);
glMatrixMode(GL_MODELVIEW);
}
int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc,(char**)argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("我的第一个三维物体!");
init();
glutDisplayFunc(display);
glutReshapeFunc(reShape);
glutMainLoop();
return 0;
}