Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje publicado por: DarkKRuleR en Octubre 08, 2020, 02:17:31 AM

Título: [Resuelto] Orden triángulos en modelo 3D
Publicado por: DarkKRuleR en Octubre 08, 2020, 02:17:31 AM
¡Buenas! La duda, la duda... ¿Cómo lo hace la gente en el mundo y todos los juegos para no tener problemas con el orden de los triángulos en un modelo 3D? Imaginad un caso simple, una mesa. Si dibujo primero las patas y luego la tabla, se ve bien mirando desde arriba, pero si miro desde abajo... Al principio mis modelos eran simples pero... a la mínima complejidad, el modelo peta si lo miras desde otro lado. No se me ocurre nada que sea... viable. ¿Cómo le hacen en los demás juegos? Gracias.
Título: Re:Orden triángulos en modelo 3D
Publicado por: BssString en Octubre 08, 2020, 03:12:05 AM
Hola DarkKRuleR

Mejor crear el objeto (como triángulo) en un programa externo (como Blender que es gratuito) e importar el .OBJ o no?
y la textura en .PNG

Saludos
Título: Re:Orden triángulos en modelo 3D
Publicado por: DarkKRuleR en Octubre 08, 2020, 06:11:12 PM
Cita de: BssString en Octubre 08, 2020, 03:12:05 AM
Hola DarkKRuleR

Mejor crear el objeto (como triángulo) en un programa externo (como Blender que es gratuito) e importar el .OBJ o no?
y la textura en .PNG

Saludos

Crearlo en un programa externo no cambiaría nada. El orden de los triángulos definidos en el modelo sería fijo y ocurriría ese problema al verlos desde el lado contrario, no?
Título: Re:Orden triángulos en modelo 3D
Publicado por: BssString en Octubre 08, 2020, 06:26:20 PM
Ahhhhh
Esa opción creo que es el Face Culling. Activar el Back-Face Culling hace que NO se dibuje la parte trasera del triángulo, quizás la has activado en algún momento y la tengas que desactivar.

GMS2
[gml]gpu_set_cullmode(cullmode)[/gml]

GMS1.4
[gml]d3d_set_culling(enable)[/gml]

Saludos
Título: Re:Orden triángulos en modelo 3D
Publicado por: DarkKRuleR en Octubre 08, 2020, 06:47:55 PM
Ya tengo el culling activado. Pondré un ejemplo gráfico, culpa mía.

(https://i.gyazo.com/e11c2bda6e0fc52e02cf1aade8bff792.png)

Si, por ejemplo, defines el modelo de la mesa primero las patas y luego la tabla, al dibujar la tabla al final, se dibujará superpuesta a las patas. Bien. Pero al mirar la mesa desde abajo, la tabla se seguirá superponiendo a las patas, pues así fue definido el modelo en el orden de sus triángulos, y se verá mal. No depende del culling.

Cada modelo se verá mal de 300 formas distintas segun desde dónde lo mires, y no se me ocurre cómo arreglan esto los que hacen juegos...
Título: Re:Orden triángulos en modelo 3D
Publicado por: BssString en Octubre 08, 2020, 08:25:34 PM
Hola DarkKRuleR

Insisto en que puede ser problema del culling, a mi no me pasa... desactivalo y manda un screenshot de cómo te anda el dibujo.
Desactivar el back face culling hace que la figura dibuje las 2 caras, sin importar el orden de los vértices, así si miras la figura desde distintos ángulos, siempre se dibujará completa.

GMS 2
[gml]gpu_set_cullmode(cull_noculling)[/gml]

GMS 1.4
[gml]d3d_set_culling(false)[/gml]

Saludos
Título: Re:Orden triángulos en modelo 3D
Publicado por: DarkKRuleR en Octubre 08, 2020, 08:52:57 PM
Si te fijas, en la imagen, la cara inferior de la mesa es la frontal, y en las patas, sus caras también son frontales. Ocurre que si en el modelo está definida primero la cara FRONTAL de la pata, y luego la cara FRONTAL de la mesa, pero lo miras desde abajo, entonces la cara FRONTAL de la mesa se superpone a la cara FRONTAL de la pata

Con modelos que son parecidos a cuadrados o redondos no ocurre

Y sí, siempre tengo el culling activado

EDIT: d3d_set_zwriteenable lo resuelve automáticamente... siempre pensé que no servía para nada la función xDDD Resuelto!
Título: Re:[Resuelto] Orden triángulos en modelo 3D
Publicado por: Clamud en Octubre 10, 2020, 06:03:10 AM
Es raro que tuvieras desactivado el buffer Z. ¿Se desactiva por usar el shader que una vez mencionaste?

Sí es así como lo resuelven otros juegos, o los gráficos 3D en general. Cada polígono se dibuja como un conjunto de pixeles y a cada pixel se le asigna un valor Z o profundidad. Cada nuevo pixel que se va a dibujar compara su valor Z con el valor del pixel ya dibujado. Si su profundidad es mayor se desecha, de lo contrario se dibuja.