SCNProgram Vertex Shader - получить координату пространства клипа узла - PullRequest
2 голосов
/ 08 февраля 2020

Я довольно новичок в Shader Development и в настоящее время работаю над SCNProgram, чтобы заменить рендеринг геометрии плоскости.

В программах вершинного шейдера я хотел бы получить доступ к позиции (или, в основном, к позиции привязки) ) точка узла / me sh как координата пространства клипа. Есть ли простой способ сделать это sh, возможно, через поставляемый Node Buffer? Я вроде как:

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

Позиция zv вводится извне через специальный буфер. Это ломается, хотя, когда POV смотрит на сцену под углом.

Я подумал, что, возможно, я мог бы просто самостоятельно рассчитать положение узла с помощью:

renderer.projectPoint(markerNode.presentation.worldPosition)

и затем передать это через мой шейдер через »program.handleBinding (ofBufferNamed:…« в каждом кадре. Я надеюсь, что есть лучший способ.

При копании в Google эквивалент Unity, вероятно, будет: https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9 / manual /Screen-Position-Node.html

Буду очень благодарен за любые подсказки. Прилагается небольшая визуализация.

Access Nodes Clip Position

1 Ответ

3 голосов
/ 08 февраля 2020

Если я правильно вас читаю, это звучит так, как будто вы на самом деле хотите ND C положение центра узла. Это незначительно отличается от позиции в пространстве клипа, но оба они вычисляются в вершинном шейдере следующим образом:

float4 clipSpaceNodeCenter = scn_node.modelViewProjectionTransform[3];
float2 ndcNodeCenter = clipSpaceNodeCenter.xy / clipSpaceNodeCenter.w;
...