一、抗鋸齒
混合的2大功能:顏?組合、抗鋸?
混合處理-抗鋸齒
//開啟混合處理
glEnable(GL_BLEND);
//指定混合因?
GLBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
//指定混合?式
glBlendEquation(GL_FUNC_ADD);
glEnable(GL_POINT_SMOOTH); //對點(diǎn)進(jìn)行抗鋸?齒處理
glEnable(GL_LINE_SMOOTH);//對線進(jìn)行抗鋸?齒處理
glEnable(GL_POLYGON_SMOOTH);//對多邊形進(jìn)行抗鋸?齒處理
使?混合實(shí)現(xiàn)抗鋸?效果
Demo:10-抗鋸齒
二、多重采樣
//1.可以調(diào)?用 glutInitDisplayMode 添加采樣緩存區(qū)
glutInitDisplayMode(GLUT_MULTISAMPLE);
//2.可以使?用glEnable| glDisable組合使?用GLUT_MULTISAMPLE 打開| 關(guān)閉 多重采樣。
glEnable(GLUT_MULTISAMPLE);
glDisable(GLUT_MULTISAMPLE);
三、多重采樣、抗鋸?齒混合綜合使?
glDisable(GLUT_MULTISAMPLE);
glEnable(GL_POINT_SMOOTH);
//Draw some smooth point
lDisable(GL_POINT_SMOOTH);
glDisable(GL_LINE_SMOOTH);
glEnable(GLUT_MULTISAMPLE);
//Draw some smooth polygon
使?混合和多重采樣實(shí)現(xiàn)抗鋸齒效果
Demo:11-多重采樣
四、多重采樣 拓展
多重采樣緩存區(qū)在默認(rèn)情況下使用片段RGB值,并不包含顏色的alpha成分,我們可以通過調(diào)用glEnable來修改這個行為:
GL_SAMPLE_ALPHA_TO_COVERAGE 使?用alpha值
GL_SAMPLE_ALPHA_TO_ON 使?用alpha值并設(shè)為1,并使?用它。
GL_SAMPLE_COVERAGE 使?用glSampleCoverage 所設(shè)置的值。
當(dāng)啟用 GL_SAMPLE_COVERAGE 時,可以使用 glSampleCoverage函數(shù)允許指定一個特定的值,它是與?段覆蓋值進(jìn)行按位與操作的結(jié)果。
五、向量

六、#include”math3d.h”
如何定義三維、四維向量量或三維向量量數(shù)組、四維向量量數(shù)組?
M3DVector3f:表示一個三維的向量量(x,y,z)
M3DVector4f:表示一個四維的向量量(x,y,z,w)(R,G,B,A)
七、點(diǎn)乘


八、正投影和透視投影

九、頂點(diǎn)變換管線

3AE028FC-06FC-4F43-8A6C-06A6357EC651.png
Demo:15-使用矩陣創(chuàng)建幾何圖形
Demo:16-模型視圖投影矩陣
使用矩陣堆棧
//類型
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
//在堆棧頂部載?入?一個單元矩陣
void GLMatrixStack::LoadIdentity(void);
//在堆棧頂部載?入任何矩陣
//參數(shù):4*4矩陣
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
//矩陣乘以矩陣堆棧頂部矩陣,相乘結(jié)果存儲到堆棧的頂部
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
//獲取矩陣堆棧頂部的值 GetMatrix 函數(shù)
//為了了適應(yīng)GLShaderMananger的使?用,或者獲取頂部矩陣的副本
const M3DMatrix44f & GLMatrixStack::GetMatrix(void);
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);
壓棧、出棧
//將當(dāng)前矩陣壓?入堆棧
void GLMatrixStack::PushMatrix(void);
//將M3DMatrix44f 矩陣對象壓?入當(dāng)前矩陣堆棧
void PushMatrix(const M3DMatrix44f mMatrix);
//將GLFame 對象壓?入矩陣對象
void PushMatrix(GLFame &frame);
// 出棧(出棧指的是移除頂部的矩陣對象)
void GLMatrixStack::PopMatrix(void);
仿射變換 GLMastrixStack 內(nèi)建了旋轉(zhuǎn)\平移\縮放
// Rotate 函數(shù)angle參數(shù)是傳遞的度數(shù),?而不不是弧度
void MatrixStack::Rotate(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);
void MatrixStack::Translate(GLfloat x,GLfloat y,GLfloat z);// 平移
void MatrixStack::Scale(GLfloat x,GLfloat y,GLfloat z);// 縮放
使用照相機(jī) 和 角色幀 進(jìn)行移動
class GLFrame
{
protected:
M3DVector3f vOrigin; // Where am I?
M3DVector3f vForward; // Where am I going?
M3DVector3f vUp; // Which way is up?
}

GLFrame
//將堆棧的頂部壓?入任何矩陣
void GLMatrixStack::LoadMatrix(GLFrame &frame);
//矩陣乘以矩陣堆棧頂部的矩陣。相乘結(jié)果存儲在堆棧的頂部
void GLMatrixStack::MultMatrix(GLFrame &frame);
//將當(dāng)前的矩陣壓棧
void GLMatrixStack::PushMatrix(GLFrame &frame);
照相機(jī)管理

//GLFrame函數(shù),這個函數(shù)?用來檢索條件適合的照相矩陣
void GetCameraMatrix(M3DMatrix44f m,bool bRotationOnly = flase);