OpenGL在绘制场景之前,需要先产生或者说定义一个场景,这个产生目标场景视图的过程类似于照相机拍照的过程。
1.把照相机固定在三角架上,并让它对准场景(视图变换)。
2.对场景进行安排,使各个物体在照片中的位置是我们所希望的(模型变换)。
3.选择照相机镜头,并调整放大倍数(投影变换)。
4.确定最终照片的大小。例如,我们很可能需要把它放大(视口变换)。
5.在完成这些步骤之后,就可以进行拍照(或者绘制场景)了。
// // main.cpp // OpenGL_08_CUBE // // Created by apple on 15/1/9. // Copyright (c) 2015年 cc. All rights reserved. // #include <iostream> #include <GLUT/GLUT.h> /** * 初始化操作 */ void init() { //设置清屏色 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //设置着色模式,填充色与顶点一致 glShadeModel(GL_FLAT); } /** * 展示绘制效果 */ void display() { //清理颜色缓冲区 glClear(GL_COLOR_BUFFER_BIT); //设置绘制颜色 glColor3f (1.0, 1.0, 1.0); //加载单位矩阵 glLoadIdentity(); //进行视图变换,参数分别为摄像机位置(0.0, 0.0, 5.0),摄像机朝向(0.0, 0.0, 0.0)朝向原点,朝上的方向向量(0.0, 1.0, 0.0) gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //进行模型变换,变换之后就生成了模型视图矩阵 glScalef (1.0, 2.0, 1.0); //绘制立方体 glutWireCube(1.0); //强制完成绘制指令 glFlush (); } /** * 调整窗口尺寸 * * @param width 宽度 * @param height 高度 */ void reshape(int width, int height) { //设置视口矩形区域,在默认情况下,视口被设置为占据打开窗口的整个像素矩形 glViewport(0, 0, (GLsizei)width, (GLsizei)height); //之后的矩阵操作定义为透视矩阵操作 glMatrixMode(GL_PROJECTION); //等于是将之前矩阵变换导致变化过的栈顶矩阵重新归位,置为单位矩阵!等于是之前的矩阵变换带来的影响到此为止了! glLoadIdentity(); //将当前矩阵与一个透视矩阵相乘,把当前矩阵转换为透视矩阵 //即定义了一个平截头体(视景体),在视景体内部的模型将被显示,之外的将被裁减 glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); //之后的矩阵操作定义为模型视图矩阵操作 glMatrixMode(GL_MODELVIEW); } int main(int argc, const char * argv[]) { //初始化GLUT库 glutInit(&argc, (char**)argv); //设置单缓冲,RGB像素格式的窗口 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //设置窗口大小 glutInitWindowSize(300, 300); //设置窗口坐标 glutInitWindowPosition (100, 100); //创建窗口 glutCreateWindow("CUBE"); //初始化操作 init(); //设置展示的回调方法 glutDisplayFunc(display); glutReshapeFunc(reshape); //绘制线程开始循环 glutMainLoop(); return 0; }
<img src="http://img.my.csdn.net/uploads/201501/09/1420790397_9432.gif" alt="" />
本文由CC原创总结,如需转载请注明出处:http://blog.csdn.net/oktears/article/details/42582855
原文地址:http://blog.csdn.net/oktears/article/details/42582855