Nuevo modelo funcionando

Al final el problema de la rotación del personaje nuevo no se resolvió. Aún cuando Sergio me envió el modelo ya rotado, de todas formas en el juego aparece igual. Así que la solución fue adaptar mi código a la nueva orientación del modelo, con lo cual queda así:

Falta por revisar el código que rota el nodo para que apunte en la dirección correcta en modo isométrico, que también interviene en el modo 3ra persona cuando un NPC se desplaza a otra posición.
Sería interesante comprobar si sucede lo mismo con modelos hechos en 3D Max o Maya. Para un entorno donde se mezclen varias herramientas de modelado lo ideal sería un código que se ajuste a la orientación del modelo, pero he preguntado al respecto y no he obtenido una respuesta concreta en los foros.

Comentarios

  1. No sé cuanto a Ogre, pero para ajustar la orientación del modelo en OpenGL basta un glRotate antes del glTranslate de posición (o hacer la rotación en CPU para cada vértex). Ejemplo:

    En DNT, el juego se orienta con Y arriba, X/Z en el suelo. Un modelo Blender con Z arriba -X/Y en el suelo.

    Entonces, para hacer las modificaciones (antes de posicionarse el modelo en el mundo - o sea, con él en la orígen del mundo) basta algo mas o menos así:

    glPushMatrix();
    /* Hace la posición del modelo en el mundo */
    glTranslate3f(posX, posY, posZ);
    /* Inversión -x para x */
    glRotatef(180,0,1,0);
    /* Z arriba para Y arriba */
    glRotatef(-90,1,0,0);
    renderModel();
    glPopMatrix();

    Y, para mi control de colisión, la modificación es echa vértex a vértex:

    para cada vértex:
    {
    inf.iX = -vert[v].position.x;
    inf.iY = vert[v].position.z;
    inf.iZ = vert[v].position.y;
    }

    no sé se queda claro, pera és algo mas o menos así lo que he hecho.

    ResponderEliminar
  2. En efecto, yo podría rotar el modelo. Pero eso me obliga a esta haciendo rotaciones de corrección todo el tiempo. Es más fácil hacerme a la idea de que los modelos están orientados hacia las Z positivas y adaptar el código para que funcione.

    ResponderEliminar

Publicar un comentario