不确定将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的融合程度如何
答案 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 模块。