Buenas! Pues tengo el siguiente modelo 3D creado con un trianglestrip, he activado el d3d_set_culling a true para solo ver las caras frontales.. y no se ve nada!
d3d_primitive_begin_texture(pr_trianglestrip, sprite_get_texture(tilPlaSuelo, 3));
d3d_vertex_normal_texture(x-50, y+50, +00, 0, 1, 1, 0.0, 0.50);
d3d_vertex_normal_texture(x-42, y+54, +00, 0, 1, 1, 0.1, 0.54);
d3d_vertex_normal_texture(x-31, y+50, +00, 0, 1, 1, 0.2, 0.50);
d3d_vertex_normal_texture(x-31, y+58, +00, 0, 1, 1, 0.2, 0.58);
d3d_vertex_normal_texture(x-23, y+50, +00, 0, 1, 1, 0.3, 0.50);
d3d_vertex_normal_texture(x-23, y+55, +00, 0, 1, 1, 0.3, 0.55);
d3d_vertex_normal_texture(x-14, y+50, +00, 0, 1, 1, 0.4, 0.50);
d3d_vertex_normal_texture(x-14, y+53, +00, 0, 1, 1, 0.4, 0.53);
d3d_vertex_normal_texture(x-03, y+50, +00, 0, 1, 1, 0.5, 0.50);
d3d_vertex_normal_texture(x-03, y+61, +00, 0, 1, 1, 0.5, 0.61);
d3d_vertex_normal_texture(x+08, y+50, +00, 0, 1, 1, 0.6, 0.50);
d3d_vertex_normal_texture(x+08, y+54, +00, 0, 1, 1, 0.6, 0.54);
d3d_vertex_normal_texture(x+21, y+50, +00, 0, 1, 1, 0.7, 0.50);
d3d_vertex_normal_texture(x+21, y+54, +00, 0, 1, 1, 0.7, 0.54);
d3d_vertex_normal_texture(x+36, y+50, +00, 0, 1, 1, 0.8, 0.50);
d3d_vertex_normal_texture(x+36, y+57, +00, 0, 1, 1, 0.8, 0.57);
d3d_vertex_normal_texture(x+50, y+50, +00, 0, 1, 1, 1.0, 0.50);
d3d_primitive_end();
Qué puede estar fallando? Todas las caras están mirando hacia arriba (eje z positivo) y tienen una normal también apuntando hacia arriba, aunque un poco torcida hacia abajo, pero debería igualmente verse desde arriba...
por lo que leí los vértices deben estar en counter clockwise, y eso lo cumplo con los tres primeros, los cuales NO SE VEN, y con los siguientes... debería ser automático o como va esto?
Estoy dibujando esto:
(http://fotos.subefotos.com/5b9dc4e71dad8d20af2b726921c59752o.png)
Una espécie de sierra plana, pero pegada al y+50, y que se extiende para abajo.
La cara frontal de un triángulo tiene los vértices en sentido horario (clockwise), y no en sentido antihorario (counter clockwise), en tu figura todos los triángulos ven para abajo, aunque la normal apunte hacia arriba. Para arreglalo puedes invertir el orden de los vértices en el código, que los primeros sean lo últimos y los últimos sean los primeros.
Si definiste las normales para usar iluminación, debes hacer que el vector normal sea unitario, porque si no los objetos se iluminan de forma extraña.
Para entender mejor cómo se dibujan las primitivas usa el programa "Model Creator" http://www.comunidadgm.org/juegos-completos/model-creator-esp-(utilidad-3d)/ (http://www.comunidadgm.org/juegos-completos/model-creator-esp-(utilidad-3d)/), y puede ser mejor usar modelos en vez de primitivas porque se dibujan más rápido.
Mil gracias. En mi caso sólo uso modelos (primitivas) para hacer planos y paredes, por eso no quiero liarme con model creator (los personajes y objetos serán sprites).
Vale, lo de normalizar la modal mola. Pero lo otro... si lo he entendido bien, puedo dibujarlo como me de la santísima gana y, si no se ve, "invertir el orden de los vértices en el código", es decir, dar la vuelta a las líneas de código que crean los vértices, debería funcionar? Me ha funcionado en un caso, pero ahora me veo que aún invirtiéndolo sigue sin verse... algo que se me escapa? la idea es, al usar trianglestrip, el orden (horario o anti) que definas en LOS PRIMEROS TRES VÉRTICES debería definirlo PARA TODA LA PRIMITIVA, pues los siguientes vértices obligatoriamente ven invertidos este sentido, es IMPOSIBLE hacer que todos los triángulos sean en un sentido, así que si el primer triangulo de la primitiva se ve, deberían verse todos, y viceversa, y debería ser automático?
EDITO: vale, en otro caso invertir las llamadas no lo arreglaba, pero poner la segunda después de la tercera sí... seguiré probando si eso arregla el anterior que no me funciona, porque juraría que ya lo había probado
EDIT2: Confirmo que he arreglado muchas primitivas distintas poniendo el 2o vértice tras el tercer... pero para el que digo no logro que funcione
Aunque no generes modelos, te recomiendo que uses el "Model Creator" para experimentar con el orden de los vértices. Usé el programa para copiar tu dibujo, dejo una imagen adjunta con el orden de los vértices.
Muchas gracias. He rehecho el modelo a una versión más simple, pero sólo me dibuja el primer triángulo, ninguno si invierto el orden de la segunda línea...
EDITO: he tenido que dividir el modelo en dos, porque el original no me dibujaba un triángulo, y lo he hecho a parte... un cacao, pero funciona, gracias!