SceneKit - 获取屏幕坐标中的位置

7
我该如何从几何着色器入口获取屏幕参考点的坐标?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]之间,并且如果不在屏幕上,则为其他值。
2个回答

2

如果未来有人偶然发现这篇文章,我认为在金属材质中,您可以通过获取表面着色器中的屏幕坐标来实现。

in.fragmentPosition.xy * scn_frame.inverseResolution.xy

See here for more info: 在此处查看更多信息:

2
我花了一些时间,但是现在它已经完成了:
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]之间。


你可以访问http://www.songho.ca/opengl/gl_projectionmatrix.html,其中有关于投影、剪裁空间和归一化设备坐标的很好的解释。 - mnuages

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接