OpenGL -- 投影方式、存储着色器、基本图元连接

2021-09-06  本文已影响0人  木扬音

投影方式

正投影

显示2D图形,显示图像大小一样

GLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)

透视投影

显示3D图形,远小近大效果

/*
fFov:垂直方向上的视角角度
fAspect:窗口的宽度与高度的纵横比例
fNear:近裁剪面距离
fFar:远裁剪面距离
*/
GLFrustum::SetPerspective(float fFov, float fAspect, float fNear, float fFar);
透视投影

存储着色器

单元着色器 -- GLT_SHADER_IDENTITY

绘制默认OpenGl 坐标系(-1,1)下图形,图形所有片段都会以一种颜色填充

    /*
     参数1:存储着色器类型 -- 单元着色器(GLT_SHADER_IDENTITY)
     参数2:颜色
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);

平面着色器 -- GLT_SHADER_FLAT

绘制图形时,可以应用变化(模型/投影变化)

    /*
     参数1:存储着色器类型 -- 平面着色器(GLT_SHADER_FLAT)
     参数2:允许变化的4*4矩阵
     参数3:颜色
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_FLAT,GLfloat mvp[16] ,GLfloat vColor[4]);

上色着色器 -- GLT_SHADER_SHADED

绘制图形时,可以应用变化(模型/投影变化),颜色将会平滑的插入到顶点之间,称为平滑着色

    /*
     参数1:存储着色器类型 -- 上色着色器(GLT_SHADER_SHADED)
     参数2:允许变化的4*4矩阵
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);

默认光源着色器 -- GLT_SHADER_DEFAULT_LIGHT

绘制图形时,可以应用变化(模型/投影变化),这种着色器会使绘制的图形产生阴影和光照效果

    /*
     参数1:存储着色器类型 -- 默认光源着色器(GLT_SHADER_DEFAULT_LIGHT)
     参数2:模型4*4矩阵
     参数3:投影4*4矩阵
     参数4:颜色值
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);

点光源着色器 -- GLT_SHADER_POINT_LIGHT_DIFF

绘制图形时,可以应用变化(模型/投影变化),这种着色器会使绘制的图形产生阴影和光照效果,它与默认光源着色器非常类似,区别只是光源位置可能是特定的。

    /*
     参数1:存储着色器类型 -- 点光源着色器(GLT_SHADER_POINT_LIGHT_DIFF)
     参数2:模型4*4矩阵
     参数3:投影4*4矩阵
     参数4:点光源的位置
     参数5:颜色值
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);

纹理替换矩阵着色器 -- GLT_SHADER_TEXTURE_REPLACE

绘制图形时,可以应用变化(模型/投影变化),这种着色器通过给特定的模型视图投影矩阵,使用纹理单元来进行颜色填充,其中每个像素点的颜色是从纹理中获取。

    /*
     参数1:存储着色器类型 -- 纹理替换矩阵着色器(GLT_SHADER_TEXTURE_REPLACE)
     参数2:模型4*4矩阵
     参数3:纹理单元
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);

纹理调整着色器 -- GLT_SHADER_TEXTURE_MODULATE

绘制图形时,可以应用变化(模型/投影变化),这种着色器通过给特定的模型视图投影矩阵,着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行颜色混合后才填充到片段中

    /*
     参数1:存储着色器类型 -- 纹理调整着色器(GLT_SHADER_TEXTURE_MODULATE)
     参数2:模型4*4矩阵
     参数3:颜色值
     参数4:纹理单元
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);

纹理光源着色器 -- GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF

绘制图形时,可以应用变化(模型/投影变化),这种着色器通过给特定的模型视图投影矩阵,着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行颜色混合后才填充到片段中

    /*
     参数1:存储着色器类型 -- 纹理光源着色器(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF)
     参数2:模型4*4矩阵
     参数3:投影4*4矩阵
     参数4:点光源位置
     参数5:颜色值(几何图形的基本色)
     参数6:纹理单元
    */
    
    GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);

基本图形单元链接

图形单元连接 图形单元连接
//1.最简单也是最常⽤的 4.0f,表示点的⼤⼩
glPointSize(4.0f);
//2.设置点的⼤⼩范围和点与点之间的间隔
GLfloat sizes[2] = {2.0f,4.0f};
GLfloat step = 1.0f;
//3.获取点⼤⼩范围和最⼩步⻓
glGetFloatv(GL_POINT_SIZE_RANGE ,sizes);
glGetFloatv(GL_POINT_GRAULARITY ,&step);
//4.通过使⽤程序点⼤⼩模式来设置点⼤⼩
glEnable(GL_PROGRAM_POINT_SIZE);
//5.这种模式下允许我们通过编程在顶点着⾊器或⼏何着⾊器中设置点⼤⼩。着⾊器内建变量:
//gl_PointSize(内建变量),并且可以在着⾊器源码直接写
gl_PointSize(5);
//6. 设置线段宽度
glLineWidth(2.5f);

上一篇下一篇

猜你喜欢

热点阅读