可以将GLSL数据类型用于OpenGL程序中的通用向量/矩阵计算吗?

时间:2013-01-18 15:39:16

标签: opengl glsl

不确定将GLSL数据类型和函数用于向量和矩阵计算是否是一个好主意,即使我不打算在我的程序中使用GLSL。 GLSL是OpenGL附带的东西,所以我不需要创建自己的简单向量/矩阵类或从另一个libaray借用来做这个,但我对通用OpenGL操作的可用性知之甚少。

你如何使用GLSL?你是否只包括gl.h并获得vec3和交叉功能?我是否需要使用写下dot,cross和函数的类名? (比如std :: vector,每次调用这些函数时我都需要gl :: cross吗?)

GLSO数据类型是否与glColor,glVertex和glTranslate等基本OpenGL函数兼容?

我已经看到GLSL相当于glVertex3f和其他基本的OpenGL函数,但它们只是简单的替换还是有其他要求? OpenGL我仍然不是很好,主要依赖GLUT,我不知道GLSL与GLUT的融合程度如何

3 个答案:

答案 0 :(得分:2)

GLSL是一种完全不同的语言,与您的程序分开编译,所以没有,您不能在OpenGL中使用它的数据类型。请改为查看GLM

另请注意,GLSL中不存在glVertex3f的任何等价物; GLSL在Vertex Shader阶段开始处理,之后将顶点数据提供给程序。

答案 1 :(得分:1)

  

你如何使用GLSL?

GLSL是一种完全独立的语言,用于实现着色器。着色器是由OpenGL实现编译并在OpenGL渲染器中执行的程序。 GLSL不是您在主机程序中使用的东西。

对于矢量数学的主机端,有几个库:

或者,仍处于发展初期

  

你是否只包含gl.h并访问vec3和交叉函数?

这不是它的工作方式。

答案 2 :(得分:-1)

GLSL 没有通用函数,就像 C++ 中的这个函数:

// This won't compile in GLSL.

template<typename T> T generic_add(T a, T b) 
{ 
    return a+b; 
}

为了模拟泛型,我将定义一个宏来为几种不同类型的向量和矩阵生成重载函数:

// This is valid GLSL code.

#define generic_add(type) type add(type a, type b){ return a + b; }

generic_add(vec2)
generic_add(vec3)
generic_add(vec4)
generic_add(mat2)
generic_add(mat3)
generic_add(mat4)
generic_add(ivec2)
generic_add(ivec3)
generic_add(ivec4)
generic_add(imat2)
generic_add(imat3)
generic_add(imat4)

mat2 example_use(mat2 a, mat2 b){
    return add(a,b);
}

虽然 GLSL 不支持泛型,但可以使用 Circle C++ shaders 编译器将 C++ 泛型函数编译为 SPIR-V 模块。

相关问题