Start 3D! [Tutorial]

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Start 3D! [Tutorial]

Mensagem por Thiago_o_programador em Dom 24 Jun 2012, 13:57

Nome: Start 3D!
Nível de dificuldade: iniciante (Em 3D) mediano (Em Gml em geral)
Requerimentos: Versão do GM 8 - Pro (Funções D3D rodam apenas na versão PRO)

Bem pessoal, hoje vou ensinar como 'entrar' no mundo 3D através do Game Maker, então vamos por a mão na massa! (Literalmente falando)

Câmera


Em um game 3D a câmera é um dos objetos mais importantes, nela estão armazenadas as configurações de projeção do 'mundo' nas funções:
Código:
d3d_set_projection(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup)
d3d_set_projection_ext(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,angle,aspect,znear,zfar)

Hoje vamos trabalhar com a primeira que é mais simples.
'xfrom', 'yfrom' e 'zfrom' são, como o nome já diz, de onde a câmera está olhando.
'xto', 'yto' e 'zto' são os pontos para onde a câmera vai olhar.
'xup', 'yup' e 'zup' são como niveis de desfoque da câmera, os valores padrão para eles são respectivamente 0,0,1; mais é claro que vai depender do programador.

Vamos começar!

Crie um objeto e chame-o de 'obj_cam' (Sem aspas)
Daí no evento CREATE adicione:
Código:
d3d_start()
Está função serve para ligar o modo 3d no game maker alterando suas configurações e desbloqueando as outras funções 'd3d'.

Código:
d3d_set_perspective(true)
A perspectiva aumenta a nossa visão de profundidade dos objetos na tela.

Código:
d3d_set_hidden(true)
O hidden fara com que as superfícies atrás de objetos não sejam desenhadas. (Muito util não?)

Código:
d3d_set_culling(false)
Isso faz com que as partes internas dos objetos não sejam desenhadas. Por exemplo num jogo onde a câmera rotacione, e por acidente ela entrar em um objeto, as paredes ficarão invisíveis.

Código:
texture_set_interpolation(true)
Melhora a qualidade das texturas.

Código:
draw_set_color(c_white)
Adiciona a cor padrão de desenho.

Código:
z=50
Os objetos do Game Maker já tem as variáveis x e y por padrão, mas não tem a variável 'z' que nós devemos adicionar manualmente.

Código:
angulo=0 dx=0 dy=0 dz=0
Servem para segurar a posição x,y,z, rotacionar a câmera e normalizar os vetores da mesma.

Código:
instance_create(x,y,obj_player)
Cria o Personagem dentro da Câmera

Crie o evento STEP e adicione:

Código:
if keyboard_check(vk_left) {angulo+=4}
if keyboard_check(vk_right) {angulo-=4}
Ele vai rotacionar a câmera consoante as teclas apertadas.

Código:
yang=15 //Altura da câmera relativa ao personagem na esfera trigonométrica.
dx=cos(degtorad(angulo));
dy=-sin(degtorad(angulo));
dz=tan(degtorad(yang));
Armazena e faz os cálculos necessários nos movimentos x,y,z para rotacionar a câmera.

Código:
m=sqrt(sqr(dx)+sqr(dy)+sqr(dz));
dx/=m;
dy/=m;
dz/=m;
Normaliza os vetores da câmera para que quando girar a câmera não ficar entrando e sindo do 'obj_player'.

Pronto! O mais difícil já foi agora vamos para o DRAW:

Código:
x = obj_player.x+dx*175
y = obj_player.y+dy*175
z = obj_player.z+dz*175
d3d_set_projection(x,y,z,obj_player.x,obj_player.y,z,0,0,1)

Esse código baseia a posição x, y e z nas respectivas posições do obj_player (que será criado depois) e uma distancia a mais para não dar colapso.

Pronto a Câmera já foi, agora criar o personagem.

Personagem


Primeiramente crie um objeto chamado 'obj_player' (Sem aspas)

No CREATE adicione:
Código:
z=0 //Posição Z do Player no mundo
zspeed=0 //Zspeed serve para o pulo
zgravity=0 //Zgravity é para a gravidade
friction=0.5 //determina a fricção absoluta do Player

No STEP coloque:
Código:
direction=point_direction(obj_cam.x,obj_cam.y,x,y)
Estabelece a variavel local 'direction' de acordo com a localização do obj_cam, é como se o player estivesse apontando na direção do obj_cam.

Código:
if keyboard_check(vk_up) {speed=8}
if keyboard_check(vk_down) {speed=-8}
Usando as teclas de navegação o player ira mover-se.

Código:
if keyboard_check_pressed(vk_space)&&zspeed=0&&zgravity=0 {zspeed=10}
Se for pressionado espaço e zspeed for igual a 0 assim como o zgravity ele vai pular.

Terminamos o STEP, agora adicione o evento END STEP:

Código:
z-=zgravity
z+=zspeed
Isso faz com que z esteja em função de zspeed e zgravity.

Código:
if zspeed>0 {zspeed-=0.5}else{zspeed=0}
if z>0&&zspeed=0 {zgravity+=0.5}
if z<=0 {zgravity=0 zspeed=0 z=0}
Esse código estabelece a gravidade, por ser um tuto de iniciação vou estabelecer o chão como z=0, plataformas serão em tutoriais posteriores.

Ok, inicie o evento DRAW e adicione:
Código:
d3d_draw_ellipsoid(x-16,y-16,z,x+16,y+16,z+32,background_get_texture(bac_ball),1,1,25)
Isso desenhara uma esfera de dimensões: 32x32x32. Na textura do background que será criado depois.

Código:
d3d_draw_floor(0,0,-1,room_width,room_height,0,background_get_texture(bac_floor),20,15)
Será desenhado o chão do tamanho da room com a textura que será criada posteriormente.

Pronto terminamos o Player.

Texturas


Já estamos quase terminando, crie uma textura e chame de 'bac_ball' e adicione a textura:



Crie outra e chame de 'bac_floor' e adicione a textura:



Pronto agora basta adicionar uma room e colocar a Câmera.

Para quem não conseguiu montar o game aqui vai a engine:
Link direto

Espero que tenham gostado, até a proxima!

Thiago_o_programador

Ranking : Nota D
Número de Mensagens : 709
Idade : 19
Data de inscrição : 14/05/2009
Notas recebidas : D - C - D - C
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://www.jogosdahora.maisblog.net

Voltar ao Topo Ir em baixo

Re: Start 3D! [Tutorial]

Mensagem por ariel h.s em Dom 24 Jun 2012, 14:48

Po cara,seu tutorial esta muito legal,pena que eu não tenho o GM pro,vc tem uma dica de onde eu encontro o gm + crack?Quero começar a desenvouver meus games em 3º dimensão. What a Face

ariel h.s

Ranking : Nota C
Número de Mensagens : 191
Idade : 18
Data de inscrição : 30/04/2012
Notas recebidas : E-D-D-B
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Start 3D! [Tutorial]

Mensagem por Thiago_o_programador em Dom 24 Jun 2012, 19:28

Brigadão!!

of: Se você ficar procurando GM+cr*** você vai acabar com alertas, leia as regras, o melhor mesmo é comprar Smile é só 25 ¢

Thiago_o_programador

Ranking : Nota D
Número de Mensagens : 709
Idade : 19
Data de inscrição : 14/05/2009
Notas recebidas : D - C - D - C
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://www.jogosdahora.maisblog.net

Voltar ao Topo Ir em baixo

Re: Start 3D! [Tutorial]

Mensagem por DiegoBr em Dom 24 Jun 2012, 19:36

Achei muito bom seu tutorial,vai me ajudar muito no futuro quando eu pensar em passar a criação em 3D =)
vlw

DiegoBr

Ranking : Nota D
Número de Mensagens : 127
Data de inscrição : 11/03/2011
Notas recebidas : D
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.diogost.no.comunidades.net

Voltar ao Topo Ir em baixo

Re: Start 3D! [Tutorial]

Mensagem por Thiago_o_programador em Dom 24 Jun 2012, 19:40

Brigado amigo, eu espero criar outro muito em breve falando sobre plataformas elevadas.

Thiago_o_programador

Ranking : Nota D
Número de Mensagens : 709
Idade : 19
Data de inscrição : 14/05/2009
Notas recebidas : D - C - D - C
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://www.jogosdahora.maisblog.net

Voltar ao Topo Ir em baixo

Re: Start 3D! [Tutorial]

Mensagem por Conteúdo patrocinado Hoje à(s) 17:14


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum