OpenGL学习之路5----使用一致变量(Uniform Variables)

代码放在github上

本文根据教程:ogldev进行扩充学习,一步步从零开始,记录学习历程

一、uniform 存储限制符

  • 在着色器运行之前,uniform修饰符可以指定一个在应用程序中设置好的变量,它不会在图元处理过程中发生变化
  • uniform变量在所有可用的着色阶段之间都是共享的,它必须定义为全局变量
  • 任何类型的变量(包括结构体和数组)都可以设置为uniform变量
  • 着色器无法写入到uniform变量,也无法改变它的值

example:在着色器中声明一个uniform变量

uniform float gScale; 

在着色器中可以根据名字引用gScale这个变量,如果需要在用户应用程序中设置它的值,则需要两步:
1. 使用glGetUniformLocation()函数获得gScale在列表中的索引
2. 通过glUniform*()或者glUniformMatrix*()系列函数来设置uniform变量的值(gScale是基本float类型的变量所以用glUniform1f())

简单来说,Uniform变量就是应用程序用来向着色器中传递的一个类型和着色器运行时不变的值。

二、代码解释

2.1 opengl_math:

#ifndef __OPENGL_MATH_H
#define __OPENGL_MATH_H

//向量        
typedef float   Vector3f[3];                

//向量赋值
inline void LoadVector3(Vector3f v, const float x, const float y, const float z)
{
    v[0] = x; v[1] = y; v[2] = z;
}

#endif

跟上一节没有区别,因为这一节只是增加了uniform存储限制符的应用

2.2 main.cpp:

#include <stdio.h>
#include <string>
#include <math.h>
#include <gl/glew.h>
#include <gl/freeglut.h>
#include <fstream>
#include <assert.h>
#include "opengl_math.h"

using namespace std;

GLuint VBO;
GLint gScaleLocation; //位置中间变量

const char* pVSFileName = "shader.vs";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值