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.

Mantenga el movimiento del vertexShader a pesar de la rotación de su malla.

Estoy moviendo simplemente los vértices de mi cubo siguiendo el eje y.
Funciona bien, pero cuando comienzo a rotar mi cubo, el movimiento se mantiene en el eje y global. ¿Alguien sabe cómo evitar este comportamiento? ¿Es decir, cómo separar la rotación y el movimiento de mis vértices?

void main()
{
    vec4 modelPosition = modelMatrix * vec4(position, 1.0);

    float deplacement = sin(uTime) * 2.;
    modelPosition.y += deplacement;

    vec4 viewPosition = viewMatrix * modelPosition;
    vec4 projectedPosition = projectionMatrix * viewPosition;

    gl_Position = projectedPosition;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código proporcionado es que modifica directamente el componente y de la variable modelPosition, la cual es afectada por la rotación aplicada al modelo. Para evitar este comportamiento, podemos separar la rotación y el movimiento utilizando una matriz de traslación para mover el cubo a lo largo del eje y, de forma independiente a la rotación aplicada.

    Aquí tienes un fragmento de código actualizado que muestra la solución:

    void main()
    {
        vec4 modelPosition = modelMatrix * vec4(position, 1.0);
    
        // utilizar una matriz de traslación para moverse a lo largo del eje y
        mat4 translationMatrix = mat4(1.0);
        translationMatrix[3].y = sin(uTime) * 2.;
        modelPosition = translationMatrix * modelPosition;
    
        vec4 viewPosition = viewMatrix * modelPosition;
        vec4 projectedPosition = projectionMatrix * viewPosition;
    
        gl_Position = projectedPosition;
    }
    

    Observa que creamos una matriz de traslación mat4 y establecemos su componente y con el valor de desplazamiento deseado (sin(uTime) * 2. en este caso), y luego aplicamos esta matriz a la variable modelPosition. Esto asegura que el desplazamiento se aplique de forma independiente a la rotación del cubo.

Comments are closed.