1. 程式人生 > >OpenGL chapter4 基礎變換

OpenGL chapter4 基礎變換

asp rds use ive nag 透視變換 之前 ons near

math3d庫有兩個數據類型,能夠表示一個三維或四維向量:
M3DVector3f
M3DVector4f

4.3 理解投影
正投影 : 正交變換
透視投影 : 透視變換

表4.1 OpenGL變換術語概覽
-------------------------------------------------------------
| 變換 | 應用                                |
------------------------------------------------------------
| 視圖 | 指定觀察者或照相機的位置                      |
-------------------------------------------------------------
| 模型 | 在場景中移動物體                          |
-------------------------------------------------------------
| 模型視圖 | 描述視圖和模型變換的二元性                  |
-------------------------------------------------------------
| 投影 | 改變視景體的大小或重新設置他的形狀                |
-------------------------------------------------------------
| 視口 | 這是一種偽變換,只是對窗口上的最終輸出進行縮放           |
-------------------------------------------------------------

4.4.2 運用模型視圖矩陣
GLShaderManager::UseStockShader(GLT_SHADER_FLAT,M3DMatrix44f m,GLfloat vColor[4]);
這個著色器在對圖元進行渲染之前用每個向量乘以舉證m。

m3dTranslationMatrix44(mTranslationMatrix , xPos, yPos, 0.0f);
shaderManager::UseStockShader(GLT_SHADER_FLAT,mTranslatonMatrix,vRed);
squareBatch.Draw();

4.5 更多對象
GLBatch:這個類的目的是為了解決容納一個頂點列表並將它們作為一個特定類型的圖元批次來進行渲染。
GLTriangleBatch:這個類專門作為三角形的容器,每個頂點都可以有一個表面法線,以進行光照計算和紋理坐標

4.5.1 使用三角形批次類
//首先 我們需要創建一個事件
GLTriangleBatch myCoolObject;
//然後通知容器最多打算使用的定點數,以開始創建網格
myCoolObject.BeginMesh(200);
//現在來添加三角形
void GLTriangleBatch::AddTriangle(M3DVector3f verts[3], M3DVector3f vNormals[3] ,M3DVector2f vTexCoords[3]);
//添加完成
myCoolObject.End();
//繪制
myCoolObject.Draw();

4.5.2 創建一個球體
void gltMakeSphere(GLTriangleBatch& sphereBatch, GLfloat fRadius, GLint iSlices, GLint iStacks);

4.5.3 創建一個環
void gltMakeTorus(????????);

4.5.4 創建一個圓柱或圓錐

4.5.5 創建一個圓盤

4.6 投影矩陣
4.6.1 正投影
我們使用math3d庫或GLFrustum類來創建一個正投影矩陣
GLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin,GLfloat zMax);

4.6.2 透視投影
我們使用GLFrustum 類來設置透視投影
GLFrustum::SetPerspective(float fFov, float fAspect, float fNear, float fFar);

4.6.3 模型視圖投影矩陣(ModelViewProjection)

4.7 變換管線
4.7.1 使用矩陣堆棧
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
void GLMaxtrixStack::LoadIdentity(void);
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
const M3DMatrix44f& GLMatrixStack::GetMatrix(void);
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);

壓棧和出棧
void GLMatrixStack::PushMatrix(void);
void PushMatrix(const M3DMatrix44f mMatrix);
void PushMatrix(GLFrame& frame);

void GLMatrixStack::PopMatrix(void);

OpenGL chapter4 基礎變換