У меня проблемы с реализацией RayPicking во Fragment-Shader, я понимаю, что должен начинать с координат мыши, но я не уверен, на что умножить исходную точку.
Я попытался создать 3 компонентаvector, с x и y в качестве координат моей мыши, разделенных на мое разрешение, а в z я попытался использовать p (для точки в пространстве, рассчитанной как rayOrigin + rayDirection * t), но безуспешно.Вот Shadertoy , который пробует то, что я ищу.
float ray( vec3 ro, vec3 rd, out float d )
{
float t = 0.0; d = 0.0;
for( int i = 0; i < STEPS; ++i )
{
vec3 p = ro + rd * t;
d = map( p );
if( d < EPS || t > FAR ) break;
t += d;
}
return t;
}
vec3 shad( vec3 ro, vec3 rd, vec2 uv )
{
float t = 0.0, d = 0.0;
t = ray( ro, rd, d );
float x = ( 2.0 * iMouse.x ) / iResolution.x - 1.0;
float y = 1.0 - ( 2.0 * iMouse.y ) / iResolution.y;
float z = 1.0;
vec3 p = ro + rd * t;
vec3 n = nor( p );
vec3 lig = ( vec3( x, -y, z ) );
lig += ro + rd;
lig = normalize( lig );
vec3 ref = reflect( rd, n );
float amb = 0.5 + 0.5 * n.y;
float dif = max( 0.0, dot( n, lig ) );
float spe = pow( clamp( dot( ref, lig ), 0.0, 1.0 ), 16.0 );
vec3 col = vec3( 0 );
col += 0.1 * amb;
col += 0.2 * dif;
col += spe;
return col;
}
Я ожидаю получить свет, который движется, как если бы я стрелял лучом из координат моей мыши в SDF.