如何从几何着色器入口点获取屏幕引用中的点坐标? SceneKit公开了一堆矩阵变换及其逆变换(https://developer.apple.com/reference/scenekit/scnshadable>使用SceneKit提供的输入),但我不知道如何使用它们。

例如,在顶点着色器中执行的几何入口点中,我尝试过:

varying vec2 screen_coords;

#pragma body
screen_coords = (u_inverseModelViewProjectionTransform * _geometry.position).xy

但这似乎不起作用:(

为了明确起见,我希望screen_coords在[0,1] * [0,1]中,如果该点在屏幕上(取决于它的确切位置),则在其他地方,如果不是。

最佳答案

我花了一段时间,但是这里是:

vec4 screenPos = u_modelViewProjectionTransform * _geometry.position;
screen_coords = (screenPos.xy / screenPos.w + 1.0) * 0.5;

解释:screenPos大致对应于屏幕空间中的坐标。 screenPos.xy / screenPos.w重新缩放这些坐标。然后奇怪的是,它给出了输入[-1,1] * [-1,1],所以我最终添加了一个偏移量和小数位数,以得到[0,1] * [0,1]的结果

关于glsl - SceneKit-获取屏幕坐标中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39479184/

10-10 03:51