es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Normalized uv para shaderModifiers .fragment adjunto a SCNGeometry (SCNPlane)

Parece bastante difícil para mí obtener esta información, así que preguntaré directamente aquí.

Pregunta: ¿Cómo obtengo la UV normalizada correcta al tratar con shaderModifiers .fragment adjunto a una geometría en un SCNNode?

Más información:
La geometría es un SCNPlane y quiero hacerla mitad negra, mitad blanca.

A continuación, todas devuelven posiciones incorrectas:

float2 uv = _surface.diffuseTexcoord
if ( uv.x > 0 ) { color = white; } else { color = black; }
float2 uv = _surface.diffuseTexcoord
if ( uv.x > 0.5 ) { color = white; } else { color = black; }
float2 uv = -1.0+2.0*_surface.diffuseTexcoord;
if ( uv.x > 0 ) { color = white; } else { color = black; }
float2 uv = _surface.diffuseTexcoord;
if ( uv.x > scn_node.boundingBox[0].x && uv.x < (scn_node.boundingBox[1].x / 2 ) ) { color = white; } else { color = black; }
float2 uv = -1.0+2.0*_surface.diffuseTexcoord;
if ( uv.x > scn_node.boundingBox[0].x && uv.x < (scn_node.boundingBox[1].x / 2 ) ) { color = white; } else { color = black; }

EDIT:

“¿Cómo estás usando la variable color?”
_output.color = color;

ACTUALIZACIÓN:

Eliminar

myMaterial.diffuse.contentsTransform = SCNMatrix4MakeScale(value1, value2 , 1)

hizo el truco.

Aplicar 1/value1 y 1/value2 a uv me devolverá al valor normalizado?

¿También cuál es el valor normalizado para usar en shaderModifiers? ¿-1/+1 o 0/+1?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener las UV normalizadas correctas al tratar con shaderModifiers .fragment adjuntos a una geometría en un SCNNode, puedes usar el siguiente código:

    float2 uv = _surface.diffuseTexcoord.xy;
    if (uv.x < 0.5) {
        color = negro;
    } else {
        color = blanco;
    }
    

    Este código establece el valor de la variable uv a las coordenadas UV de la textura difusa de la geometría. Luego verifica si la coordenada x de las UV es menor que 0.5 y, si es así, establece el color como negro. Si la coordenada x es mayor o igual a 0.5, establece el color como blanco.

    En cuanto al valor normalizado para usar en shaderModifiers, las coordenadas UV suelen estar en el rango de 0 a 1, donde (0,0) es la esquina inferior izquierda y (1,1) es la esquina superior derecha de la textura. Sin embargo, en última instancia depende de cómo estén configuradas las coordenadas de textura para la geometría específica con la que estás trabajando.

Comments are closed.