Lost Makers
Últimos assuntos
» Melody raiser
Sex Nov 18, 2016 8:52 am por Finalshare

» Shiginima Launcher SE V2.0
Ter Out 20, 2015 6:08 pm por Finalshare

» [Extensão] Easy 3D
Qua Set 23, 2015 6:14 pm por Cyisthat

» Acoustica Mixcraft 6.0 + crack
Ter Set 15, 2015 8:32 pm por Finalshare

» Várias Sugestões
Ter Set 15, 2015 7:59 pm por Finalshare

» [Álbum] Abyss
Dom Set 13, 2015 10:12 pm por Cyisthat

» [Extensão] Easy Motion
Sex Set 11, 2015 11:04 pm por Finalshare

» Rpg Maker Vx Ace + Crack
Sex Set 11, 2015 4:33 pm por Finalshare

» [Minecraft] Shiginima Launcher
Sex Set 11, 2015 2:42 pm por Finalshare

Painel do usuário
Carregando avatar...
Parceiros

[Turtorial] Start 3D

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

code [Turtorial] Start 3D

Mensagem por Cyisthat em Dom Jun 24, 2012 2:20 pm

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)

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:

Spoiler:
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.

Cyisthat
avatar
.:Admin:.
.:Admin:.

Mensagens : 78
Idade : 19

Ver perfil do usuário http://lostmakers.web-rpg.com

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