Я учусь GLSL
и CG
сейчас и пришли через этот код:GLSL - `out` в аргументе
float trace(vec3 origin, vec3 direction, out vec3 p) //<-- What is "out"?
{
float totalDistanceTraveled = 0.0;
for(int i=0; i <64; ++i)
{
p = origin + direction * totalDistanceTraveled;
float distanceFromPointOnRayToClosestObjectInScene = map(p);
totalDistanceTraveled += distanceFromPointOnRayToClosestObjectInScene;
if(distanceFromPointOnRayToClosestObjectInScene < 0.0001)
{
break;
}
if(totalDistanceTraveled > 10000.0)
{
totalDistanceTraveled = 0.0000;
break;
}
}
return totalDistanceTraveled;
}
Я уверен, преобразование кода в эти shaders.metal
, так что я могу использовать с Xcode
. Но я не уверен, что такое out
и как его изменить, чтобы я мог использовать эту функцию в своем шейдере в Metal
.
Насколько это отличается от 'var p = ...'? мне кажется, что получится аналогичный результат в коде выше. Я считаю, что у него есть кое-что, что я еще не понял. Пожалуйста, уточните немного больше. Благодаря! – sooon
После небольшого чтения, 'thread' отправляет значение в поток для обработки? – sooon
Это способ возврата нескольких значений из функции. Поскольку вы возвращаете расстояние, и функции могут иметь только одно возвращаемое значение, «возврат» точки пересечения требует использования переменной «перекрестная ссылка». – warrenm