zoukankan      html  css  js  c++  java
  • OpenGL红宝书例子2.2 uniform变量的使用

    1. 简单介绍一下OpenGL可编程渲染管线的流程

    顶点着色 --> 细分着色 --> 几何着色 --> 片元着色 --> 计算着色

    • 一般我们主要参与的阶段是顶点着色和片元着色过程

    2.shader编程语法

    基本和C语言一致,类型转换比C语言更加严格,和C语言区别较大之处就是矩阵,一个矩阵的定义要遵循列主序原则 --也就是说传入的数据要先填充列然后再填充行

    mat3 M = (1.0, 2.0, 3.0,                
              4.0, 5.0, 6.0,                  
              7.0, 8.0, 9.0); 
    
    

    结果得到的矩阵:
    $$
    left{
    egin{matrix}
    1.0 & 4.0 & 7.0
    2.0 & 5.0 & 8.0
    3.0 & 6.0 & 9.0
    end{matrix}
    ight} ag{2}
    $$

    3. 2.2例子uniform实现

    我们使用的例子是基于第一章的绘制三角形的基础上实现的主要需要操作以下几步:
    

    3.1 C++代码中需要添加如下代码

    void init()
    {
    	glGenVertexArrays(NumVAOs,VAOs);
    	glBindVertexArray(VAOs[Triangles]);
    
    	GLfloat vertices[NumVertices][2] = {
    		{ -0.90f, -0.90f },
    		{  0.85f, -0.90f },
    		{ -0.90f,  0.85f },
    		{  0.90f, -0.85f },
    		{  0.90f,  0.90f },
    		{ -0.85f,  0.90f }
    	};
    
    	glGenBuffers(NumVertices, Buffers);
    	glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
    	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    
    	shader_program = LoadShader("triangles.vert", "triangles.frag");
    	glUseProgram(shader_program);
    	/// 以下3行就是此次添加的代码
    	GLfloat timeValue = 1.0f;
    	GLint timeLoc = glGetUniformLocation(shader_program, "time");
    	glUniform1f(timeLoc, timeValue);
    
    	glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, (void *)0);
    	glEnableVertexAttribArray(vPosition);
    }
    

    3.2 修改片元着色器代码

    #version 330 core
    
    // Ouput data
    out vec4 fcolor;
    uniform float time;  ///添加的uniform变量
    
    void main()
    {
    	fcolor = vec4(0.0, 0.0, 1.0, 1.0) * time;
    }
    

    至此,例2.2已经完成。

  • 相关阅读:
    Java正则表达式学习 贪婪 勉强 侵占
    HTML meta
    URLConnection类
    Sql Server 查看所有存储过程或视图的位置及内容
    创建你的第一个游戏Pong——挑战:改进您的Pong游戏
    解决锚点在IE8中失效
    辅助类——掌握内容管道
    辅助类——随机函数(RandomHelper)辅助类
    创建你的第一个游戏Pong——疑难解答
    辅助类——概览
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4689503.html
Copyright © 2011-2022 走看看