Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: nkls en Abril 18, 2011, 10:14:26 PM

Título: Ayuda problema 3D
Publicado por: nkls en Abril 18, 2011, 10:14:26 PM
Hola. Tengo un problema con un juego 3D, lo que pasa es que
la etapa es en 3D pero el personaje es 2D y cuando pongo
luz todos los sprites 2D se ven negro, como hago para que el
sprite se vea normal???, el sprite esta echo en un evento draw,
tengo GM8

Título: Re: Ayuda problema 3D
Publicado por: Ge en Abril 18, 2011, 11:05:32 PM
Antes que nada tendrias que fijarte si estas colocando correctamente:
[gml]draw_set_color(c_white)
draw_set_alpha(1)
[/gml]
Despu?s, coincido con vos en que el Game Maker, no le otorga iluminaci?n a los sprites, ya que la iluminaci?n es por v?rtices, y los sprites no tienen v?rtices (Por que "T?cnicamente" el uso de sprites no corresponde al uso correcto del 3d).

En todo caso, se soluciona f?cil. En el caso de que la c?mara sea de angulo fijo, la soluci?n mas simple es representar al sprite como un plano (Coloc?ndole como textura la misma imagen que el sprite). En el caso de que la c?mara sea de angulo cambiante, al plano vas a tener que girarlo constantemente para que siempre este mirando a la camara.

Okey, para dibujar un sprite en un plano, en el evento draw:
[gml]ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(x-16,y,0,x+16,y,32,ttt,1,1)[/gml]
Simplemente lo que estoy dibujando es una pared, con el sprite y su subimagen correcta. Dependiendo del angulo de tu c?mara en otros casos quiz?s tendr?as que usar d3d_draw_floor, o d3d_draw_block .

En el caso de que la c?mara sea de angulo cambiante tendr?as que ser algo as?, de igual manera no se cuales son los ?ngulos de tu c?mara, as? que tendr?as que ir modificando los valores para hacer que coincidan correctamente, los valores a modificar son +90 o -180

[gml]d3d_transform_set_identity();
d3d_transform_add_rotation_x(point_direction(x,0,obj_camara.x,0)+90);
d3d_transform_add_rotation_y(point_direction(0,y,0,obj_camara.y)-180);
d3d_transform_add_rotation_z(0);
d3d_transform_add_translation(x,y,0);

ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(-16,0,0,+16,0,32,ttt,1,1)

d3d_transform_set_identity();[/gml]
Lo que hace este script es girar los ?ngulos x,y,z de la pared, para que siempre este mirando a la c?mara.


:-[ , Espero que no te pierdas y suerte.
si te explique cualquier cosa, avisame  XD

Título: Re: Ayuda problema 3D
Publicado por: nkls en Abril 19, 2011, 12:08:51 AM
Gracias, ya no se ve negro y me falto poner esto
[gml]draw_set_alpha(1)[/gml]
y use este codigo
[gml]ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(x-16,y,0,x+16,y,32,ttt,1,1)[/gml]

pero sigo tendiendo un problema mi juego es de
plataformas 3D y con el c?digo de "draw_wall" mi personaje
se dibuja como una linea, como lo puedo modificar para que
se ponga normal?, mi c?mara es fija.
Título: Re: Ayuda problema 3D
Publicado por: Ge en Abril 19, 2011, 01:29:07 AM
Ahhh, es de plataformas en 3d
en ese caso tendr?as que usar d3d_draw_block o usar:

[gml]d3d_transform_set_identity();
d3d_transform_add_rotation_x(90);
d3d_transform_add_rotation_y(180);
d3d_transform_add_rotation_z(0);
d3d_transform_add_translation(x,y,0);

ttt = sprite_get_texture(sprite_index,image_index)
d3d_draw_wall(-16,0,0,+16,0,32,ttt,1,1)

d3d_transform_set_identity();[/gml]

este script es similar al otro, solo que ahora los valores 90 y 180 estan fijos. Intenta combinar diferentes valores para ir encontrando el angulo correcto para que no se vea como una linea

:-[
Título: Re: Ayuda problema 3D
Publicado por: nkls en Abril 19, 2011, 11:09:31 PM
No se me hab?a ocurrido use el d3d_draw_block()
con profundidad -1 y se ve plano, muchas gracias Ge
me sirvi? mucho.
Título: Re: Ayuda problema 3D
Publicado por: Ge en Abril 19, 2011, 11:18:12 PM
Oky, de nada  :-[