美文网首页
OpenGL四-基础变化

OpenGL四-基础变化

作者: AlanGe | 来源:发表于2020-06-28 10:34 被阅读0次

    一、抗锯齿

    混合的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四-基础变化

          本文链接:https://www.haomeiwen.com/subject/fieifktx.html