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;
}
本文由CC原創總結,如需轉載請注明出處:http://blog.csdn.net/oktears/article/details/42582855