我有两个(相同的)着色器,一个在hlsl和一个在glsl。在象素着色器中,我将向量乘以一个矩阵进行正常变换。该守则实质上是:
HLSL
float3 v = ...;
float3x3 m = ...;
float3 n = mul(v, m);
GLSL
vec3 v = ...;
mat3 m = ...;
vec3 n = v * m;
这应该是行向量乘法,但在glsl中却不能。如果我显式地键入算法,则两者都适用。据我所知,glsl和hlsl规范都表示,如果向量位于左侧,则它们应该做行向量乘。
另一件令人困惑的事情是,我把向量乘以顶点着色器中的矩阵和左边的向量,但这在glsl和hlsl中
我偶然看到一篇文章,其中一位开发人员正在使用着色器编程构建一个音乐可视化工具。他通过纹理将音频信息传输到glsl。
function copyAudioDataToTexture(gl, audioData, textureArray) {
for (let i = 0; i < audioData.length; i++) {
textureArray[4 * i + 0] = audioData[i] // R
textureArray[4 * i + 1] = audioData[i] // G
textureArray[4 * i + 2] = aud
我想让顶点碎片着色器统一起来。我知道GLSL,但首先尝试cg/hlsl编程。
如果我将unity设置为'graphic API for openGLCore',我可以使用struct统一变量。均匀变量均值,着色器属性。(glsl称之为uniform)
但是我将unity设置为'graphic API for Direct3D',它不能工作。编译错误。
这是错误的。
Shader error in 'HLSL/Phong_cg': Fragment program 'frag': Struct variable
&