OpenGL学习07_绘制立方体

来源:互联网 发布:淘宝藏族舞蹈头饰 编辑:程序博客网 时间:2024/05/29 02:24

OpenGL在绘制场景之前,需要先产生或者说定义一个场景,这个产生目标场景视图的过程类似于照相机拍照的过程。

1.把照相机固定在三角架上,并让它对准场景(视图变换)。

2.对场景进行安排,使各个物体在照片中的位置是我们所希望的(模型变换)。

3.选择照相机镜头,并调整放大倍数(投影变换)。

4.确定最终照片的大小。例如,我们很可能需要把它放大(视口变换)。

5.在完成这些步骤之后,就可以进行拍照(或者绘制场景)了。

[cpp] view plain copy
  1. //  
  2. //  main.cpp  
  3. //  OpenGL_08_CUBE  
  4. //  
  5. //  Created by apple on 15/1/9.  
  6. //  Copyright (c) 2015年 cc. All rights reserved.  
  7. //  
  8.   
  9. #include <iostream>  
  10. #include <GLUT/GLUT.h>  
  11.   
  12. /** 
  13.  *  初始化操作 
  14.  */  
  15. void init() {  
  16.     //设置清屏色  
  17.     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);  
  18.     //设置着色模式,填充色与顶点一致  
  19.     glShadeModel(GL_FLAT);  
  20. }  
  21.   
  22. /** 
  23.  *  展示绘制效果 
  24.  */  
  25. void display() {  
  26.       
  27.     //清理颜色缓冲区  
  28.     glClear(GL_COLOR_BUFFER_BIT);  
  29.     //设置绘制颜色  
  30.     glColor3f (1.0, 1.0, 1.0);  
  31.     //加载单位矩阵  
  32.     glLoadIdentity();  
  33.     //进行视图变换,参数分别为摄像机位置(0.0, 0.0, 5.0),摄像机朝向(0.0, 0.0, 0.0)朝向原点,朝上的方向向量(0.0, 1.0, 0.0)  
  34.     gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);  
  35.     //进行模型变换,变换之后就生成了模型视图矩阵  
  36.     glScalef (1.0, 2.0, 1.0);  
  37.     //绘制立方体  
  38.     glutWireCube(1.0);  
  39.     //强制完成绘制指令  
  40.     glFlush ();  
  41. }  
  42.   
  43. /** 
  44.  *  调整窗口尺寸 
  45.  * 
  46.  *  @param width  宽度 
  47.  *  @param height 高度 
  48.  */  
  49. void reshape(int width, int height) {  
  50.     //设置视口矩形区域,在默认情况下,视口被设置为占据打开窗口的整个像素矩形  
  51.     glViewport(0, 0, (GLsizei)width, (GLsizei)height);  
  52.     //之后的矩阵操作定义为透视矩阵操作  
  53.     glMatrixMode(GL_PROJECTION);  
  54.     //等于是将之前矩阵变换导致变化过的栈顶矩阵重新归位,置为单位矩阵!等于是之前的矩阵变换带来的影响到此为止了!  
  55.     glLoadIdentity();  
  56.     //将当前矩阵与一个透视矩阵相乘,把当前矩阵转换为透视矩阵  
  57.     //即定义了一个平截头体(视景体),在视景体内部的模型将被显示,之外的将被裁减  
  58.     glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);  
  59.     //之后的矩阵操作定义为模型视图矩阵操作  
  60.     glMatrixMode(GL_MODELVIEW);  
  61. }  
  62.   
  63. int main(int argc, const char * argv[]) {  
  64.       
  65.     //初始化GLUT库  
  66.     glutInit(&argc, (char**)argv);  
  67.     //设置单缓冲,RGB像素格式的窗口  
  68.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  
  69.     //设置窗口大小  
  70.     glutInitWindowSize(300, 300);  
  71.     //设置窗口坐标  
  72.     glutInitWindowPosition (100, 100);  
  73.     //创建窗口  
  74.     glutCreateWindow("CUBE");  
  75.       
  76.     //初始化操作  
  77.     init();  
  78.       
  79.     //设置展示的回调方法  
  80.     glutDisplayFunc(display);  
  81.     glutReshapeFunc(reshape);  
  82.       
  83.     //绘制线程开始循环  
  84.     glutMainLoop();  
  85.       
  86.     return 0;  
  87. }   


本文由CC原创总结,如需转载请注明出处:http://blog.csdn.net/oktears/article/details/42582855

0 0
原创粉丝点击