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已经完成。

  • 相关阅读:
    鼠标移上,内容显示
    Jquery横向菜单和纵向菜单的收起与展开
    适配不同大小浏览器——固定排班
    jQuery UI Widgets-menu
    Web前端的35个jQuery小技巧-转载
    android中listview中包含ratingbar响应不了点击事件
    点击空白区域,键盘向下收缩
    时间轮 Dialog 最简单的时间轮
    android 获取电话本中的联系人列表
    《网红经济》读后感
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4689503.html
Copyright © 2011-2022 走看看