HLSL/GLSL中float2x2与float2的mul运算结果及差异咨询
HLSL与GLSL中mul矩阵向量乘法的结果及差异
运算结果分平台说明
HLSL环境下:
HLSL采用列主序存储矩阵,代码中float2x2 m2x2 = { a, b, c, d };实际定义的矩阵为:[ a c ] [ b d ]执行
mul(m2x2, xy)时,向量xy被视为列向量,运算结果为:result = float2( a*x + c*y, b*x + d*y );GLSL环境下:
GLSL默认采用行主序存储矩阵,代码中float2x2 m2x2 = { a, b, c, d };实际定义的矩阵为:[ a b ] [ c d ]执行
mul(m2x2, xy)时,向量xy被视为列向量,运算结果为:result = float2( a*x + b*y, c*x + d*y );
核心差异
两者的本质差异是矩阵存储顺序不同:HLSL默认列主序,GLSL默认行主序,导致相同的矩阵初始化代码,在调用mul进行矩阵-向量乘法时得到不同的结果。如果需要在两个平台得到一致结果,需手动调整矩阵元素的初始化顺序,或者显式指定存储布局。
内容的提问来源于stack exchange,提问作者mitch prater
相关产品推荐
相关产品推荐

