3D no Game Maker - Parte 1

    Compartilhe

    jiraya
    Administrador
    Administrador

    Mensagens : 1299
    Credibilidade : 54

    3D no Game Maker - Parte 1

    Mensagem por jiraya em Sab Jan 08, 2011 2:14 pm

    [Autor :Cast08 ]
    3D no Game Maker - Parte 1
    Créditos:
      Autor: desconhecido
      Tradução: psycon.

    Nível:
      Intermediário.

    1.1. Introdução

    -O que você aprenderá:

      Indo para 3D modo
      Iniciando 3D modo
      Criando um 3D bloco
      Usando uma camera virtual
      Executando o programa 3D





      1.2. Indo para 3D modo
      Esse tutorial mostrara como iniciar com 3D. Para isso nós criaremos um script nomeado ‘scr_Start3D’ no qual nós poremos o código seguinte para chavear/ligar/manipular o 3D modo:
      Código:
      //ligando o 3D mode
      d3d_start();
      Isso resultará para que o GM rode no modo 3D, também com a habilidade para executar 2D sobre-desenhando (conhecido como projeção ortográfica).
      Se você quiser deixar/sair completamente do 3D modo, você usaria o código seguinte:
      Código:
      //switch to 2D mode
      d3d_end();



      1.3. Iniciando o 3D mode
      Ligando o modo 3D, nos permitiremos fazer materiais/formas 3D, Como desenhar as coisas em perspectiva (3D), que faz com que aquelas estão longe da camera parecer menor, como no mundo real. Assim, façamos isso... Somemos ao código, o seguinte para
      nosso script ligar a perspectiva:
      Código:
      //ligando perspective on
      d3d_set_perspective(true);
      Objetos próximos a nós, normalmente bloqueiam a visão dos objetos fora destes.
      Coisas que são escondidas de nossa visão, estando atras de objetos, não é visto por nossos olhos. A mesma coisa pode ser feito no Modo 3D do Game Maker. Nós teremos que ligar a remoção de superfície escondida. Então adicione isto a nosso script:
      Código:
      //removendo superfícies escondidas
      d3d_set_hidden(true);
      No mundo real nós podemos apenas ver coisas com efeitos de luz e sombra (luz fontes e sombras dos objetos). O GM nos permite usar iluminação, mas nós deixaremos isto fora da explicação nesse momento, para não complicar o entendimento das coisas demais ainda.
      Você não precisa ligar a iluminação para começar. Então torne-a off (iluminação false) e sete a cor para branco para tornar as cores padrões sem sombreamento e colorizaçao. Nós acrescentaremos o código seguinte ao nosso script de inicialização:
      Código:
      //iniciar com a iluminaçao desligada-off
      d3d_set_lighting(false);
      //set draw color branco
      draw_set_color(c_white);
      Em um dia nublado, coisas se dissolvem/desaparecem na distância, como você pode ter notado no mundo real.
      Isto também pode ser simulado em nosso programa usando névoa. (Note que algumas placas de video podem ter dificuldade para desenhar névoa). Assim, somemos o código seguinte para fazer nossos objetos desaparecem na névoa quando estiverem fora de visao:
      Código:
      //draw neblina
      d3d_set_fog(true,c_white,1,1024);
      Quando você vê um objeto, normalmente só se vê a parte de fora dele. O lado de dentro fica invisivel para o programa. Nós podemos usar este mesmo princípio em nosso programa. Isso é chamado culling e pode ser usado para acelerar o desempenho do desenho por que nós só teriamos de desenhar o lado dos objetos que nós podemos ver de fato.
      Se você tem um chão grande e apenas quer desenhar o lado atual que se vê, por exemplo. Deixaremos por enquanto isso de lado. Mas se você quiser acelerar essas ações você pode ligar isso depois.
      Código:
      //set culling to false
      d3d_set_culling(false)
      Aqui há outras duas funções que adicionaremos para manipular a visão. Nós não iremos usa-las por enquanto pois ainda não são importante para começar. Você poderia usar mais tarde.
      Código:
      //switch shading off
      d3d_set_shading(false)
      //switch interpolation on
      texture_set_interpolation(true)
      Com esse script de inicialização configuramos tudo que se precisa para manuzearmos o 3D. Se formos rodar esse script, nós não veríamos nada porque não há nada para ser visto. Nós ainda não desenhamos nada para se ver no mundo 3D.



      1.4. Criando um cubo/bloco 3d
      Nós podemos desenhar todos os tipos de formas complicadas e modelos, mas devemos começar agora com algo simples: um cubo/bloco. Nós quereremos ver um bloco ou cubo no espaço 3D. Entao vamos criar um script nomeado ‘scr_Block’ que trara o seguinte codigo:
      Código:
      //draw the block
      d3d_draw_block(0,0,0, 32,32,32,background_get_texture(bac_Block),1,1);
      Esses três primeiros valores (0,0,0) é o canto inicial do bloco e os proximos tres (32,32,32) é o canto final do bloco. Precisaremos adicionar uma textura de fundo a ele que esta chamada de ‘bac_Block’. Os ultimos dois valores indicam onde a textura sera posicionada/desenhada uma vez que esta na horizontal e vertical.
      Agora nós temos um bloco para ver, temos de desenhar tudo o que há de ser visto. OK, Mas ainda não criamos nada que possa "ver" o bloco.



      1.5. Usando uma camera virtual
      Criemos um script que nos permite colocar uma camera virtual em nosso mundo 3D. Essa camera tera o ponto de vista do qual vamos olhar para nosso bloco/ mundo 3D.
      A camera é como um olho. Nos permitirá ver o mundo 3D como se nós estivesemos dentro dele. O script que criaremos será ‘scr_Camera’, contendo o codigo seguinte:
      Código:
      //draw o q a camera ve
      d3d_set_projection(128,96,64, 16,16,16, 0,0,1);
      Os primeiros três valores são a posição da camera. É o ponto do qual a camera vê e esta, enquanto os próximos três valores indicam o ponto que a camera esta olhando.
      A camera olhará da posição (128,96,64) para o centro do nosso bloco (16,16,16).
      Os últimos três valores indicam que nós queremos ter a camera dentro da orientação normal (parte superior é para cima).



      1.6. Rodando o programa 3d
      Nós teremos que criar uma room no GM e pôr algun(s) objeto(s) e nele(s) nosso código.
      A room atual sera nomeada ‘roo_Tutorial’. Nós criaremos um objeto para
      rodar nosso script da camera e um para nosso bloco com seus scripts.
      Iremos criar o objeto para a camera (obj_Camera) onde rodara o script de inicializaçao (scr_Start3D) em seu evento de Criação (Create event).
      Esse objeto da camera tambem mostrara o que a camera ve todo o tempo que a tela é desenhada.
      Em outras palavras, executara o script da camera (scr_Camera) no Draw event.
      Vamos criar o objeto do bloco/cubo (obj_Block) esse rodadra nosso block script
      (scr_Block) no Draw event desse mesmo objeto.
      Agora vamos fazer o objeto da camera criar o bloco objeto para nós. Como fazer isso? Criaremos um script nomeado ‘scr_Make’, No qual ele criara a instancia do block object. O código fica assim:
      Código:
      //create the block object
      instance_create(0,0,obj_Block);
      Fazendo o objeto da camera executar o script (scr_Make) no Creation event, depois rodar o script ‘scr_Start3D’. Agora nós só temos que colocar o obj da camera na room que criará o bloco objeto para nós automaticamente (no local 0,0 na Room 2D).
      Bem, agora temos o obj (obj_Camera) na room (roo_Tutorial).
      Lembre-se, não importa onde vc coloque a camera object na Room que seu posicionamento nao sera mudado, isso se faz por causa dos scripts (scr_Camera and scr_Block) que determinao onde o cubo é desenhado e como a camera vê ele.
      Agora, está na hora de apertar F5 (ou clique no "play verde") p/ executar o programa e ver o que acontece.
      Nós veríamos um cubo colorido no meio de nossa tela, desenhado em perfeita perspectiva.

      Data/hora atual: Seg Dez 05, 2016 9:53 pm