天天看點

OpenGL學習07_繪制立方體

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;
} 
           
OpenGL學習07_繪制立方體

本文由CC原創總結,如需轉載請注明出處:http://blog.csdn.net/oktears/article/details/42582855

繼續閱讀