1. 把一个三维物体变换到屏幕上的像素坐标,有三个步骤:
1) 变换。包括模型、视图和投影操作,这些操作包括旋转、移动、缩放、投影等,一般组合使用;
2) 裁剪窗口之外的物体;
3) 经过变换的坐标和屏幕的像素之间建立联系,即视口变换。
2. 变换
1) 模型视图变换(相当于确定照相机的位置、角度,)
a) glLoadIdentity(),把当前矩阵设为单位阵,实际意义是把屏幕的中心点设为原点;
b) gluLookAt(),设定照相机的位置和方向,默认为照相机在原点,指向z轴负方向(即镜头的方向),朝上(即快门的方位)向量为(0,1,0);
c) glTranslate(),这个和b)有异曲同工之处,这个是对模型(形体)进行操作-移位(相当于移动坐标系原点,其实没有改变坐标系);
d) glScale(),物体在三个轴上的缩放;
e) glRotate(),模型(坐标系)进行旋转;
f) glMatrixMode(),指定模型视图、投影或纹理矩阵是否被修改;
备注:
以上是常用的模型视图变换,在进行变换前必须要加入glMatrixMode(GL_MODELVIEW)和glLoadIdentity();为了保存模型视图变换之前的矩阵可添加glPushMatrix()(之 后要glPopMatrix());
2) 投影变换,之前必须要加上glMatrixMode(GL_PROJECTION)和glLoadIdentity();
a) gluPerspective(),创建可视空间(可以理解为镜头的焦距的大小(纵深)和视野的宽度(广角与否));
b) glFrustum
3) 视口变换
a) glViewport(),其实际意义是图像被投影到多大的视图中,默认为被打开的整个像素矩形,其一般在WM_SIZE消息产生OnSize()函数中进行设定;
3. 颜色模型
1) glClearColor()与glClear();
2) 颜色设置:glColor;
3) 指定着色模型:glShadeModel;
4. 光照与材料
1) glLight,对环境光、散射光和镜面光以及光源的位置进行设定;
2) glLightModel,光照模型,默认是观察者位于无限远处,单面接受光照;
3) glEnable(GL_LIGHTING)和glEnable(GL_LIGHT0)等来启动光源
4) glMaterial(),材料属性的设定,包括材料属性的哪些面,环境光、散射光和镜面 光的材料属性
5. 其它
1) SwapBuffers(m_pDC->GetSafeHdc());
2) glEnable(GL_NORMALIZE);
3) glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);//cull面
glEnable(GL_DEPTH_TEST);//启用深度测试
glDepthFunc(GL_LESS);//深度测试的类型
6. 疑问
1) 光源中的各个成分是对人眼产生效果的,其各个成分是怎么合成的?
2) 材料属性中的成分呢?
Reference:
http://www.cnblogs.com/yujunyong/archive/2011/04/17/2018776.html
http://blog.sina.com.cn/s/blog_4ba3ba100100l1e8.html
http://hi.baidu.com/mmmmop/item/c2e6c215257747626826bb5f
http://blog.csdn.net/zhanglongit/article/details/7525918
http://technet.microsoft.com/zh-cn/library/ms537137