一、抗锯齿
混合的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-透视投影
九、顶点变换管线
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