如何从几何着色器入口点获取屏幕中参考点的坐标? 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]中否则就是。
答案 0 :(得分: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]
答案 1 :(得分:0)
对于将来偶然发现此问题的任何人,我认为对于金属,您只需抓住即可在表面着色器中获得屏幕坐标
in.fragmentPosition.xy * scn_frame.inverseResolution.xy