码迷,mamicode.com
首页 > 其他好文 > 详细

OpenGL学习07_绘制立方体

时间:2015-01-10 16:41:50      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:opengl   cube   立方体   矩阵变换   

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



OpenGL学习07_绘制立方体

标签:opengl   cube   立方体   矩阵变换   

原文地址:http://blog.csdn.net/oktears/article/details/42582855

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!