gpt4 book ai didi

vector - GLSL 齐次转换问题

转载 作者:行者123 更新时间:2023-12-02 03:40:52 24 4
gpt4 key购买 nike

我正在尝试通过 GLSL 中的同构 mat4 转换由列 vec3 表示的点。该矩阵是沿 x 轴简单平移 1。我已尽我所能检查矩阵是否确实作为这种形式的适当列主矩阵进入我的着色器:

1 0 0 1
0 1 0 0
0 0 1 0
0 0 0 1

我首先尝试了(matrix * vec4(point, 1)).xyz,但是我没有在我的场景中看到平移的效果。在某些时候,出于绝望,我以不同的方式重新实现了这种转换,这似乎与我的方式相同,并找到了一种可以实现我想要的方式。但是,我不知道为什么只有那个有效:

#version 140
vec3 transformPoint(vec3 point, mat4 matrix)
{
return (matrix * vec4(point, 1)).xyz;

return mat3(matrix[0].xyz, matrix[1].xyz, matrix[2].xyz) * point
+ matrix[3].xyz;

return matrix[0].xyz * point.x
+ matrix[1].xyz * point.y
+ matrix[2].xyz * point.z
+ matrix[3].xyz;

// This works, but is not a full transformation
return point + matrix[3].xyz;

// Only this one works
matrix = transpose(matrix);
return vec3(
dot(matrix[0], vec4(point, 1)),
dot(matrix[1], vec4(point, 1)),
dot(matrix[2], vec4(point, 1)));
}

奇怪的是,如果我使用 Y 翻译,非工作转换会产生影响,但对 X 翻译则没有影响。

我希望我只是忽略了一些显而易见的事情。有什么想法吗?

更新:

我做了一些更多的测试,vector * transpose(matrix) 没有给出与 matrix * vector 相同的结果。怎么回事?

最佳答案

没有关于在调用 transformPoint() 之前如何初始化 mat4 变量的其他信息。我猜你传入的矩阵很可能是行主序,而 glsl 中的矩阵默认都是列主序。这解释了为什么它仅在转置(矩阵)之后起作用。

关于vector - GLSL 齐次转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com