Enero 10, 2016, 10:59:52 PM Ultima modificación: Enero 11, 2016, 11:42:58 PM por DarkKRuleR
Buenas! Pues en GMStudio, quiero poder dibujar dos objetos en 3D sin tener en cuenta el z buffer. Es decir, que si dibujo un PLANO en z=0, y luego otro PLANO en z=0, que no ocurra esto...


(Lo negro debería verse bien, sin esas líneas horizontales)

z fighting. Quiero que EL SEGUNDO PLANO QUE DIBUJE se vea POR ENCIMA DEL PRIMERO, aunque estén en la misma posicion.

En otro objeto tengo, al inicio de Draw: d3d_set_zwriteenable( false );, y al final lo vuelvo a poner a true. Creo que esa es la solución pero...

Al hacer lo mismo en ESTE objeto de AHORA (dibujar dos planos superpuestos), poner el zrwiteenable a false, dibujar los dos, y luego ponerlo a true, funciona, pero TODO EL ESCENARIO ENTERO queda con el zwrite desactivado, viéndose todo rarísimo y bugueado, y quiero que sólo suceda para ESAS DOS LÍNEAS DE CÓDIGO. ya desactivo justo antes del primero y activo tras el segundo, pero afecta a todo el escenario. Por qué? Con otro objeto no pasa esto...

pues quisas no estes activando bien el z_buffer, revisa bien esa parte de tu codigo, porque lo unico que modifica eso es d3d_set_zwriteenable(false/true), intenta esto, en la parte donde si funciona trata de dibujar esas texturas, si no hay problema en esa parte entonces el problema se encuentra en donde tu desactivas y activas otra vez el z_buffer, de todas maneras puedes probar el culling, no se si sera el problema, pero e visto errores parecidos cuando el culling esta desactivado.
no puedo creer que me hice un tumblr.
YGE Productions yep, otro tumblr.
y como no, el manual tambien

Lo que debes hacer es que la variable depth se relacione con la distancia a la cámara, para que todo se vaya dibujando en orden, primero el fondo y luego el primer plano. De forma alternativa puedes usar la función d3d_set_hidden

@Clamud, la depth no debería afectar pues es todo dentro de UN mismo objeto, ese mismo objeto dibuja los dos suelos, y el orden en las llamadas es todo lo que importa. Son 4 líneas: desactivar zwrite, dibujar los 2 suelos y activarlo.

@jmbs19, me he dado cuenta que el zwrite funciona bien...

el problema es más raro. Me di cuenta que funciona bien, que, como tiene que ser, los diferentes objetos no se ven raros entre ellos, sino que el zwrite desactivado y activado sólo afecta para cada objeto, como tiene que ser, pues desactivo y activo en el mismo objeto, pero el fallo es más raro... yo dibujo cubos con 6 caras. Dibujo primero una cara frontal, la hago en un script, entonces llamo 6 veces a ese script, cada una aplicando una rotación de 90 sobre distintos ejes para obtener el cubo. Por lo tanto, el orden de los vértices y las normales deberían ser perfectos para cada cara. Entonces cada cara es una doble cara, usando el truco anterior. Funciona para todas.. EXCEPTO PARA LA CARA INFERIOR. La cara inferior es la última en dibujarse, pero mirando desde arriba no debería dibujarse (pues su cara frontal debería apuntar hacia abajo tras rotarlo). No pasa con ninguna de las otras 5 caras. Desde cualquier dirección ninguna de las caras del otro lado se ven (culling a true), sólo veo la frontal, FUNCIONANDO con el truquito. Pero la cara inferior es vista desde cualquier dirección, jodiendo la vista, superponiéndose a la cara que estoy viendo, desafiando al culling( true ). Esto no lo entiendo...

Resuelto. Tuve que usar el zwrite, pero realmente... "no había problema". Al estar en la misma x e y, la distancia es la misma (depth = distancia) y la parte superior del cubo inferior se superponía al cubo superior por alguna razón. Lo arreglé (no dibujar el cubo inferior pues el superior lo tapa, debería taparlo pero tuve que taparlo manualmente) y ya. Cosas raras pero que por ahora solucioné. Muy raro todo xD