Bueh, me preguntaba como hacerlo, me han dado una base de ejemplo, pero es algo incomoda, ya que es algo confusa, no dare detalles ya que no funciona correctamente, causa problemas de transparencia, pone la pantalla de distintos colores y eso...
Cual seria la manera mas eficaz de hacer esto? preferiblemente que se dibuje en cada object.
Osea, me gustaria utilizarla para:
-Personajes (Ojos, Boca, Cicatrices y otros detalles en textura)
-Efectos (Osea, un anillo estirandose con image_xscale y desapareciendo con image_alpha)
-Mostrar Daño (Una variable con un fondo de "explosion")
Trate utilizando d3d_end, en el Gui, en Step Event, probe de todas las maneras que se me ocurrieran, nunca logre que funcionara correctamente, incluso jugue con las Depths y nada....
Que dicen? es posible? La base que me dieron es mala? :P
PD: Puedo cambiarme el nick?
Puedes editar y dibujar surfaces sin salir del modo 3D. Quizá los cambios extraños de colores y de transparencia se deben a que, después de editar las surfaces, no se usan las funciones draw_set_alpha y draw_set_color para volver a poner los valores normales.
La forma de dibujar en las surfaces sería así:
[gml]
//Evento previo a Draw
d3d_set_projection_ortho( 0,0, w,h, 0 ); //proyeccion sin perspectiva
surface_set_target( sf ); //dibujar en surface
// dibujar algo ...
surface_reset_target();
txr = surface_get_texture( sf ); //obtener textura
[/gml]
El evento sería Draw parecido a esto:
[gml]
//Evento Draw
d3d_set_projection( xcam,ycam,zcam, x,y,z, 0,0,1 ); //proyeccion con perspectiva
d3d_transform_set_rotation_z( angZ ); //rotar
d3d_transform_add_translation( x,y,z ); //mover
d3d_model_draw( mdl, 0,0,0, txr ); //se usa una surface como textura
[/gml]
Si quieres dibujar un HUD puedes usar alguno de los eventos Draw y poner primero la proyección ortogonal
[gml]
d3d_set_projection_ortho( 0,0, view_wview[0],view_hview[0], 0 );
// dibujar HUD
[/gml]
Si las texturas tienen transparencia debes dibujar los modelos en orden, comenzando con los más alejados a la cámara y después con los más cercanos. Eso se puede hacer cambiando la depth de esta forma
[gml]
depth = point_distance_3d( x,y,z, xcam,ycam,zcam );
[/gml]
Y el nick creo que sí se puede cambiar. Tienes que hablar con un admin. Sin embargo, no me parece tan malo.
Cita de: Clamud en Mayo 09, 2016, 07:21:53 PM
Puedes editar y dibujar surfaces sin salir del modo 3D. Quizá los cambios extraños de colores y de transparencia se deben a que, después de editar las surfaces, no se usan las funciones draw_set_alpha y draw_set_color para volver a poner los valores normales.
La forma de dibujar en las surfaces sería así:
[gml]
//Evento previo a Draw
d3d_set_projection_ortho( 0,0, w,h, 0 ); //proyeccion sin perspectiva
surface_set_target( sf ); //dibujar en surface
// dibujar algo ...
surface_reset_target();
txr = surface_get_texture( sf ); //obtener textura
[/gml]
El evento sería Draw parecido a esto:
[gml]
//Evento Draw
d3d_set_projection( xcam,ycam,zcam, x,y,z, 0,0,1 ); //proyeccion con perspectiva
d3d_transform_set_rotation_z( angZ ); //rotar
d3d_transform_add_translation( x,y,z ); //mover
d3d_model_draw( mdl, 0,0,0, txr ); //se usa una surface como textura
[/gml]
Si quieres dibujar un HUD puedes usar alguno de los eventos Draw y poner primero la proyección ortogonal
[gml]
d3d_set_projection_ortho( 0,0, view_wview[0],view_hview[0], 0 );
// dibujar HUD
[/gml]
Si las texturas tienen transparencia debes dibujar los modelos en orden, comenzando con los más alejados a la cámara y después con los más cercanos. Eso se puede hacer cambiando la depth de esta forma
[gml]
depth = point_distance_3d( x,y,z, xcam,ycam,zcam );
[/gml]
Y el nick creo que sí se puede cambiar. Tienes que hablar con un admin. Sin embargo, no me parece tan malo.
Este es un Draw Event de un Efecto
d3d_set_projection_ortho(0,0,800,600,0)
surface_set_target(DashEffect[id]);
draw_sprite_ext(tDashEffect,0,0,0,1,1,0,c_white,image_alpha)
surface_reset_target();
Texture=surface_get_texture(DashEffect[id]);
draw_set_alpha_test(1)
draw_set_alpha_test_ref_value(1)
draw_set_color(c_white)
d3d_set_projection(Cam.x3,Cam.y3,100+Cam.z,Cam.x2,Cam.y2,50+Cam.z2,0,0,1)
if vsbl=1
{shader_set(sh_blend)
shader_set_uniform_f(global.shader_ambientColor,1,1,1);
shader_set_uniform_f(global.shader_lightDirection,99999,99999,99999);
shader_set_uniform_f(global.shader_lightDirectionalColor,1,1,1);
d3d_transform_set_scaling(1,size,size)
d3d_transform_add_rotation_z(direction)
d3d_transform_add_translation(x,y,z)
var worldMat = scr_TranspoInverse(matrix_get(matrix_world))
shader_set_uniform_f_array(global.shader_worldMatTranspInv,worldMat)
scr_draw_animation_frame(Model,animation_step,animation_length,Texture)
shader_set_uniform_f(global.shader_ambientColor,0.4,0.4,0.4);
shader_set_uniform_f(global.shader_lightDirection,0.5,-0.5,0.5);
shader_set_uniform_f(global.shader_lightDirectionalColor,1,1,1);
d3d_transform_set_identity()
shader_reset()}
Hice de todo y sigue fallando, Agregue, borre, De momento "arreglo" un Plano que tenia, pero la transparencia no la muestra, se ven cosas negras, y el suelo se torna blanco mientras esos objects con surfaces esten presentes, y lo peor de el caso, ni siquiera muestra esos objects >.<
Lo primero sería sacar la función surface_set_target del evento Draw, porque a veces causa errores.
También creo que no deberías usar draw_set_alpha_test, sino simplemente draw_set_alpha.
¿Qué hace el shader?, tal vez ahí hay algo que provoca el error.
¿Qué técnica usas para la animación?
Cita de: Clamud en Mayo 10, 2016, 03:53:40 AM
Lo primero sería sacar la función surface_set_target del evento Draw, porque a veces causa errores.
También creo que no deberías usar draw_set_alpha_test, sino simplemente draw_set_alpha.
¿Qué hace el shader?, tal vez ahí hay algo que provoca el error.
¿Qué técnica usas para la animación?
Step Event
d3d_set_projection_ortho(0,0,800,600,0)
surface_set_target(DashEffect[id]);
draw_sprite_ext(tDashEffect,0,0,0,1,1,0,c_white,image_alpha)
surface_reset_target();
Texture=surface_get_texture(DashEffect[id]);
draw_set_alpha(1)
Sigue fallando, no entiendo que pasa >.< >:( (Puse el draw_set_alpha, no sirvio asi que igual lo borre .-.)
Aqui estan las animaciones:
http://gmc.yoyogames.com/index.php?showtopic=609490
Las "Apague" e incluso sigue fallando, tiene que ser algo con las Surfaces .-.
Vaya, que problematico es esto u.u
Sube una captura de lo que ocurre, y sube una imagen de lo que quieres lograr, para entender mejor el error.
Cita de: Clamud en Mayo 11, 2016, 05:19:55 PM
Sube una captura de lo que ocurre, y sube una imagen de lo que quieres lograr, para entender mejor el error.
No puedo tomar fotos, Si tengo la Fog apagada sale la foto Negra y si la enciendo sale Blanca .-. (Raro ya que en cierto momento de el pasado si podia tomarlas o.o)
Sobre el problema que el suelo se tornaba blanco era que tenia que agregar otro inicio para la Fog, ya que al apagar y encender el 3D creo que se apagaba la Fog...
Finalmente logre arreglar los problemas (No tengo idea de como), Pero quede con un Problema de Depth (O transparencia), tengo tu codigo puesto pero aun asi no sirve, deberia crear un tema aparte? (Ya que creo que sali de el problema de las Surfaces :D)
Este es el Create Event de la Camara:
d3d_start();
d3d_set_hidden(0);
d3d_set_lighting(0);
d3d_set_culling(0);
texture_set_interpolation(1);
texture_set_repeat(1);
draw_set_alpha_test(1)
draw_set_alpha_test_ref_value(1)
No se si tenga algo que ver...
El problema ocurre en Dibujar dos Planos, Uno es el que dibuja la cantidad de el daño (Con Surfaces) y el otro un efecto de golpe, ocurre esto:
http://docs.yoyogames.com/source/dadiospice/002_reference/drawing/color%20and%20blending/draw_set_alpha_test.html
Se ve algo como esto:
(http://docs.yoyogames.com/source/dadiospice/002_reference/drawing/color%20and%20blending/alpha_test_on_off.png)
Pero lo activo y se ve como la primera imagen xD
Gracias, me ayudastes a avanzar, estaba por cancelar este Proyecto xD (Este Problema de transparencia no es nada comparado con los problemas que tenia antes de que llegaras :3)
Me imagino que esto ha de causar algunos errores
[gml]
d3d_set_hidden(0);
[/gml]
No deberías desactivar la prueba de profundidad, a menos que tengas una buena razón para ello, borra esa línea o escribe un 1 como parámetro.
Si sólo se ve un lado de los triángulos, entonces deberías activar el "sacrificio"
[gml]
d3d_set_culling(1);
[/gml]
Este código no hace algo que se pueda ver
[gml]
draw_set_alpha_test(1)
draw_set_alpha_test_ref_value(1)
[/gml]
Hace que se dibujen sólo los pixeles con transparencia mayor a 1, y un pixel con ese valor de transparencia es casi imperceptible.
Después de pensarlo un rato, creo que el problema de transparencia se debe a que las surfaces en realidad no tienen transparencia. Antes de dibujar algo en las surfaces deberías limpiarlas con esta función:
[gml]
draw_clear_alpha(0,0);
[/gml]
Cita de: Clamud en Mayo 12, 2016, 02:53:45 AM
Me imagino que esto ha de causar algunos errores
[gml]
d3d_set_hidden(0);
[/gml]
No deberías desactivar la prueba de profundidad, a menos que tengas una buena razón para ello, borra esa línea o escribe un 1 como parámetro.
Si sólo se ve un lado de los triángulos, entonces deberías activar el "sacrificio"
[gml]
d3d_set_culling(1);
[/gml]
Este código no hace algo que se pueda ver
[gml]
draw_set_alpha_test(1)
draw_set_alpha_test_ref_value(1)
[/gml]
Hace que se dibujen sólo los pixeles con transparencia mayor a 1, y un pixel con ese valor de transparencia es casi imperceptible.
Después de pensarlo un rato, creo que el problema de transparencia se debe a que las surfaces en realidad no tienen transparencia. Antes de dibujar algo en las surfaces deberías limpiarlas con esta función:
[gml]
draw_clear_alpha(0,0);
[/gml]
Al parecer el problema estaba en la Depth, habia colocado:
depth=-point_distance_3d( x,y,z, Cam.x3,Cam.y3,100+Cam.z)/10
Luego lo cambie a positivo (Como me lo distes) y le removi el /10 (Lo habia puesto para que no salieran numeros tan grandes)
depth=point_distance_3d( x,y,z, Cam.x3,Cam.y3,100+Cam.z)
Luego modifique las Depth, a la camara: 1000001
El escenario a 1000000
Y el resto a 999999
Ahora sin ningun problema :D, gracias por la ayuda ^w^
Aqui una foto bien vieja (Hay mejoras), tomaria una nueva, pero como dije no me salen o.o
http://i.imgur.com/Mg5yCCur.png