OpenGL四-基礎(chǔ)變化

一、抗鋸齒

混合的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)乘

Demo:12-圖形移動(矩陣變換)

八、正投影和透視投影

Demo:13-正交投影

Demo:14-透視投影

九、頂點(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);

Demo:17-管理管線(網(wǎng)格)
Demo:18-球體世界1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容