OpenGL四-基础变化

一、抗锯齿

混合的2大功能:颜⾊组合、抗锯⻮

混合处理-抗锯齿

 //开启混合处理
glEnable(GL_BLEND);

//指定混合因⼦
GLBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

//指定混合⽅式
glBlendEquation(GL_FUNC_ADD);

glEnable(GL_POINT_SMOOTH); //对点进行抗锯⻮齿处理
glEnable(GL_LINE_SMOOTH);//对线进行抗锯⻮齿处理
glEnable(GL_POLYGON_SMOOTH);//对多边形进行抗锯⻮齿处理

使⽤混合实现抗锯⻮效果
Demo:10-抗锯齿

二、多重采样

//1.可以调⽤用 glutInitDisplayMode 添加采样缓存区
glutInitDisplayMode(GLUT_MULTISAMPLE);

//2.可以使⽤用glEnable| glDisable组合使⽤用GLUT_MULTISAMPLE 打开| 关闭 多重采样。
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

使⽤混合和多重采样实现抗锯齿效果
Demo:11-多重采样

四、多重采样 拓展

多重采样缓存区在默认情况下使用片段RGB值,并不包含颜色的alpha成分,我们可以通过调用glEnable来修改这个行为:

  • GL_SAMPLE_ALPHA_TO_COVERAGE 使⽤用alpha值

  • GL_SAMPLE_ALPHA_TO_ON 使⽤用alpha值并设为1,并使⽤用它。

  • GL_SAMPLE_COVERAGE 使⽤用glSampleCoverage 所设置的值。

当启用 GL_SAMPLE_COVERAGE 时,可以使用 glSampleCoverage函数允许指定一个特定的值,它是与⽚段覆盖值进行按位与操作的结果。

五、向量

六、#include”math3d.h”

如何定义三维、四维向量量或三维向量量数组、四维向量量数组?
M3DVector3f:表示一个三维的向量量(x,y,z)
M3DVector4f:表示一个四维的向量量(x,y,z,w)(R,G,B,A)

七、点乘

Demo:12-图形移动(矩阵变换)

八、正投影和透视投影

Demo:13-正交投影

Demo:14-透视投影

九、顶点变换管线

3AE028FC-06FC-4F43-8A6C-06A6357EC651.png

Demo:15-使用矩阵创建几何图形
Demo:16-模型视图投影矩阵

使用矩阵堆栈

//类型
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);

//在堆栈顶部载⼊入⼀一个单元矩阵
void GLMatrixStack::LoadIdentity(void);

//在堆栈顶部载⼊入任何矩阵 

//参数:4*4矩阵
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);

//矩阵乘以矩阵堆栈顶部矩阵,相乘结果存储到堆栈的顶部
void GLMatrixStack::MultMatrix(const M3DMatrix44f);

//获取矩阵堆栈顶部的值 GetMatrix 函数 

//为了了适应GLShaderMananger的使⽤用,或者获取顶部矩阵的副本
const M3DMatrix44f & GLMatrixStack::GetMatrix(void);
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);

压栈、出栈

//将当前矩阵压⼊入堆栈
void GLMatrixStack::PushMatrix(void);

//将M3DMatrix44f 矩阵对象压⼊入当前矩阵堆栈
void PushMatrix(const M3DMatrix44f mMatrix);

//将GLFame 对象压⼊入矩阵对象
void PushMatrix(GLFame &frame);

// 出栈(出栈指的是移除顶部的矩阵对象) 
void GLMatrixStack::PopMatrix(void);

仿射变换 GLMastrixStack 内建了旋转\平移\缩放

// Rotate 函数angle参数是传递的度数,⽽而不不是弧度
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);// 缩放

使用照相机 和 角色帧 进行移动

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);

//矩阵乘以矩阵堆栈顶部的矩阵。相乘结果存储在堆栈的顶部
void GLMatrixStack::MultMatrix(GLFrame &frame);

//将当前的矩阵压栈
void GLMatrixStack::PushMatrix(GLFrame &frame);

照相机管理


//GLFrame函数,这个函数⽤用来检索条件适合的照相矩阵
void GetCameraMatrix(M3DMatrix44f m,bool bRotationOnly = flase);

Demo:17-管理管线(网格)
Demo:18-球体世界1

你可能感兴趣的:(OpenGL四-基础变化)