SCNProgram Vertex Shader –检索节点剪辑空间坐标

问题描述 投票:1回答:1

我是Shader Development的新手,目前正在SCNProgram上从事替代平面几何图形的渲染。

在程序顶点着色器中,我想访问节点/网格的位置(或基本上是锚点位置)点作为剪辑空间坐标。有没有简单的方法可以做到这一点,例如通过提供的节点缓冲区?我有点接近:

xCoordinate = scn_node.modelViewProjectionTransform[3].x / povZPosition
yCoordinate = scn_node.modelViewProjectionTransform[3].y / povZPosition

pov z位置是通过自定义缓冲区从外部注入的。但是,当POV面向某个角度面对场景时,这会中断。

我认为我可以自己通过以下方式计算节点位置:

renderer.projectPoint(markerNode.presentation.worldPosition)

然后在每一帧上通过»program.handleBinding(ofBufferNamed:…«通过我的着色器。但我希望有更好的方法。

虽然通过Google挖掘时,Unity等效项可能是:https://docs.unity3d.com/Packages/[email protected]/manual/Screen-Position-Node.html

我非常感谢您的任何提示。附带的是一些可视化效果。

Access Nodes Clip Position

xcode scenekit metal vertex-shader scnprogram
1个回答
2
投票

如果我没看错的话,听起来您实际上想要的是节点中心的NDC位置。这与剪辑空间的位置略有不同,但是两者都可以在顶点着色器中计算为:

float4 clipSpaceNodeCenter = scn_node.modelViewProjectionTransform[3];
float2 ndcNodeCenter = clipSpaceNodeCenter.xy / clipSpaceNodeCenter.w;
© www.soinside.com 2019 - 2024. All rights reserved.