Você está na página 1de 10

3D Game Maker 8.

0
Game Maker Iniciamos aqui a nossa viagem dentro do Mundo 3D do Game Maker. Esta apostila desenvolvida para ensinar o uso das funes padres do Game Maker e a juno de tudo que possvel fazer nesse esplndido programa. A apostila vem com trs partes e vrias engines. As engines so bem simplificadas e desenvolvidas para fcil entendimento, que sero usadas vrias vezes. Quando for examinar as engines no apenas execute o jogo ou copie, mais tente ler e entender os princpios contidos nelas, examinado minuciosamente o cdigo de cada objeto. Aqui est o resumo do que ser visto em cada parte da apostila: Iniciando o Mundo 3D Mostrar as funes bsicas do Game Maker com respeito a desenhos tridimensionais. Percorrendo o Mundo 3D Ser explicado com detalhes como resolver falhas grficas do Game Maker e usar em conjunto varias funes bsicas para conseguirmos novos efeitos. Finalizando o Mundo 3D Os ltimos e complicados efeitos sero explicados, e exemplificados alm de dicas para usar o editor de rooms e uma lista de ferramentas para a edio 3D.

Nem todos os criadores de trs dimenses usam os mesmo padres de XYZ, na maioria dos editores Z indica a profundidade, como demonstrar a figura da prxima pgina, por isso este formato ser usado nesta apostila, mesmo assim existem outros editores como Unity que usam Y como profundidade e ainda mais alguns pouqussimos usam X como profundidade. O Game Maker foi desenvolvido com a varivel Z desta maneira: Quanto maior z mais profundo Vamos usar o contrrio, quando menor Z mais prximo do cho ,ou abaixo, ficar, e quanto maior Z mais longe, ou acima, ficar. Lembre-se de usar a imaginao, no se apegue unicamente aos efeitos criados na apostila, desenvolva e invente, tudo aqui s um aperitivo de todas as possibilidades do que voc pode fazer no Game Maker.

Lembre-se de me dar um pouqinho de credito nos seus jogos 3D. ^__^

Iniciando o mundo 3D
Para iniciarmos devemos entender o que est envolvido dentro da programao tridimensional. O mundo 3D formado por trs coisas bsicas, que se subdividem em outras, aqui se alistam elas: Representao de objetos tudo aquilo que mostrado dentro do momento especfico no jogo Sprites e backgrounds Agora so todos quase iguais, chamaremos de texturas, pois s sero usados para diferenciar a rea externa (no rea de coliso) no desenho dos objetos, a diferena de sprite e background que os sprites sero texturas animadas e background no. Sons- Aqui sero usados sons de fundo, normais e tridimensionais, que, se voc usar um fone de ouvido lhe dar a impresso de ouvir o som vindo de qualquer direo real (muito bom!) Modelos- Os modelos sero as sprites do jogo 3D, pois eles que tero movimento e rea de coliso (prxima apostila para colises). Ground- Podemos compar-los aos backgrounds. Grounds so modelos que no possuem duplicao de coordenadas, ou seja, nunca haver pontos ou tringulos sobre outro, o mximo que poder ocorrer um ngulo prximo a 90.

Luz - Ela altera a realidade do seu jogo, dando volume aos desenhos. Ponto- Luz que clareia at uma rea especfica. Direo-Luz que clareia toda a cena, como o sol

Cmeras - Sem esta no h como produzir um mundo 3d, pois ela quem realmente mostra tudo. Tridimensional- Mostrara os desenhos em perspectiva (mais longe menor) Bidimensional - Mostrara efeitos 2d como menu e mapas.

Dica: Declare varivel z no evento


criate dos objetos que tero participao ativa dentro do mundo 3D. (z=0[vamos ver mais detalhes na prxima apostila])

Comeando o mundo 3D
Para iniciar o uso especial da memria e placa de vdeo no Game Maker, preciso avisar. Para isto existe as seguintes funes: d3d_start()-Inicia os grficos tridimensionais d3d_end()-Termina o uso dos grficos

interessante colocar no evento create dum objeto principal, mas esta funo (d3d_start) s precisa ser ativada

uma vez dentro do jogo, contando que no se-use a funo d3d_end. O mundo 3D formado por trs variveis: x, y, z. No de admirar que no mundo 2D so usados apenas x e y. Voc dever notar que y ficar invertido, mas na verdade ele estar realmente correto. Voc deve conhecer um plano cartesiano, nele y-0 fica na parte inferior e no superior, acostumese, ou ir errar muito!

Ilustrando: Resumindo A rea de edio deveria ficar assim (se GM fosse especial para 3D): Textures-No lugar de backs e sprites Models-Novo Grounds-Novo Sounds-Com especificaes de volume min e max Paths-Linha 3D Scripts Fontes Time Lines Objects Scenes-No lugar de rooms e com Profundidade

Existem tambm funes de especificaes, aqui seguem elas: d3d_set_hidden(ativar)-Ativa ou desativa a operao de esconder partes da superfice. Sugiro ativ-lo, pode traser um grande bug para seu jogo deixa-lo desativado. d3d_set_perpective(ativar)-Ativa ou Desativa perspectiva, j comentada. Padro true. d3d_set_depth(depth)- como o depth 2D, desenha-se do maior para o menor, deixando o menor na frente. Porm esta funo no nos muito til, pois nosso desejo que o computador calcule automaticamente quem est na frente ou atrs. d3d_set_culling(ativar)- Ativa ou desativa a operao de esconder partes que no precisam Dica: NUNCA ser vistas, como a parte de dentro de uma esfera. Esta funo diminui o uso de memria, USE ESTA porm , as vezes iremos usar as partes no vistas(Espere a prxima apostila).Padro false. FUNO

Desenhando
O desenho que no tiver a clave color no nome, ir desenhar com a ultima cor escolhida, e a padro inicial preta ento voc poderia inicialmente colocar draw_set_color(c_white), para defini-la como branca. Dica Use antes de desnhar Formas se quiser outra cor d3d_draw_block(x1, y1, z1, x2, y2, z2, textura, hrep, vrep)-Desenha um draw_set_color(cor) e cubo(paraleleppedo), de x1, y1, z1 para x2, y2, z2 com determinada no final do script ponha textura(-1 pra no us-la) e determinadas repeties horizontais(hrep) e draw_set_color(c_whit verticais(vrep). e) para padronizar novamente. d3d_draw_cylinder(x1, y1, z1, x2, y2, z2, textura, hrep, vrep, tampa, presiso)-Desenha um cilindro em p de x1, y1, z1 para x2, y2, z2 com determinada textura(-1 pra no us-la) e determinadas repeties horizontais(hrep) e

verticais(vrep), com ou sem tampa e com determinado nvel de preciso. (recomendo de 15 a 25) d3d_draw_cone(x1, y1, z1, x2, y2, z2, textura, hrep, vrep, tampa, presiso)Desenha um cone em p de x1, y1, z1 para x2, y2, z2 com determinada textura(-1 pra no us-la) e determinadas repeties horizontais(hrep) e verticais(vrep), com ou sem tampa e com determinado nvel de preciso. (recomendo de 15 a 25) d3d_draw_ellipsoid(x1, y1, z1, x2, y2, z2, textura, hrep, vrep, presiso)-Desenha uma esfera(oval de x1, y1, z1 para x2, y2, z2 com determinada textura(-1 pra no us-la) e determinadas repeties horizontais(hrep) e verticais(vrep), e com determinado nvel de preciso. (recomendo de 20 a 25)

Dica Para ter uma textura de background coloque background_get_text ure(id), e para ter de uma sprite coloque sprite_get_texture(id, sub_imagem). No coloque apenas o nome, pois ir ocorrer erro.

d3d_draw_wall(x1, y1, z1, x2, y2, z2, textura, hrep, vrep)-Desenha uma parede(ela gira em x, y e sempre em p em z), de x1, y1, z1 para x2, y2, z2 com determinada textura(-1 pra no us-la) e determinadas repeties horizontais(hrep) e verticais(vrep).

d3d_draw_floor(x1, y1, z1, x2, y2, z2, textura, hrep, vrep)-Desenha um piso(ele sempre est em 90 x, y e sempre deitado em z), de x1, y1, z1 para x2, y2, z2 com determinada textura(-1 pra no us-la) e determinadas repeties horizontais(hrep) e verticais(vrep). No vrep e hrep podera usar nmeros negativos para inverter a imagem! Observe que todas essas funes so de draw, s podem ser feita no evento draw, se quiser pode usar as variveis x, y, z(j comentada) para desenhar estas formas onde o personagem estiver. Ex.: d3d_draw_ellipsoid(x-5, y-5, z, x+5, y+5, z+10,-1, 0, 0, 20). Veja a Engine_basic_3d_first

Obs
As texturas ficam de cabea para baixo no Game Maker, para consertar esse erro sempre lembre de colocar em vrep um nmero negativo.

Polgono qualquer
As funes acima desenham timas formas, mas, no, e nem chegam perto de todas as possveis. Por isso existem as seguintes funes. d3d_primitive_begin(modo)-Inicia o desenho de polgonos, de determinado modo, abaixo a explicao de cada um. pr_pointlist-Cada vrtice um ponto. De um em um pr_lineliste-A cada duas vrtice cria uma nova linha. De dois em dois pr_linestrip-A cada nova vrtice cria uma linha interligada com a ultima vrtice. pr_trianglelist-A cada tres vrtice cria um triangulo. De ts em trs pr_trianglestrip- A cada duas novas vrtices cria um triangulo interligado com a ultima vrtice do ultimo triangulo. pr_trianglefan- A cada nova vrtices cria um triangulo interligado com a ultima vrtice do ultimo triangulo e com a primeira a ser criada.

E agora d3d_primitive_end() para finalizar o uso. Sempre coloque este no final do script, para que no ocorram erros. Aqui vo as funes das vrtices: d3d_vertex(x,y,z) Adiciona uma vrtice que varia com a ultima cor(de draw _set_color) especificada. d3d_vertex_color(x,y,z,cor,alpha) Adiciona uma vrtice com a cor e alpha especificado. Mas voc tambm pode querer colocar uma textura, ento dever usar o conjunto: d3d_primitive_begin_texture(modo, textura)- Agora os vrtices podem, mas no necessariamente, ter textura. d3d_primitive_end_texture()-Esta funo no exite, voc dever usar a mesma d3d_primitive_end() Para que tenham textura voc dever colocar vrtices compatceis d3d_vertex_texture(x,y,z,tx,ty) Adiciona uma vrtice que varia com a ultima cor(de draw _set_color) especificada,com a coordenada da textura de tx,ty. d3d_vertex_texture_color(x,y,z,tx,ty,cor,alpha) Adiciona uma vrtice com a cor e alpha especificado,com a coordenada da textura de tx,ty. Se voc quizer colocar alguns vrtices sem a clave textura , eles tero tx e ty 0,0 automaticamente. Tx e ty indicam a coordenada, no o nmero de repeties ,como foi visto para shapes. Eles variam de 0 (inicio) e 1 (fim), independente do tamanho da imagen. Em conjunto eles arrancam(copiam) um pedao da textura. Por exemplo , um triangulo com texturas (0.5,0.5);(0.5,1);(1,1) arrancariam:

Obs
(0.5),(0.5)

(0.5),(1)

(1),(1)

Se quiser usar dois tipos ter de faze dois grupos: d3d_primitive_begin(tipo) .. d3d_primitive_end(); d3d_primitive_begin(tipo2) .. d3d_primitive_end();

Veja a engine_basic_unknouw_poligon

Rotaes e Translaes
Oque seria um mundo 3D em que no se pudesse rodar,crescer e diminuir os desenhos? para isto que as funes seguintes servem: d3d_transform_set_identity()- Reinicia qualque transformao feita; d3d_transform_set_scaling(xsc,ysc,zsc)-Cresce o desenho multiplicado pelo nmero dito. >1 almenta ; <1 diminui ;=1 no muda-padro( caso voc queira alongar s de um lado).

d3d_transform_set_ratation_x(ang)-Rotao em torno de x em determinados angulos(ang). d3d_transform_set_ratation_y(ang)-Rotao em torno de y em determinados angulos(ang). d3d_transform_set_ratation_z(ang)-Rotao em torno de z em determinados angulos(ang). d3d_transform_set_axis(xvet,yvet,zvet,angulo)-Rotao em torno de um vetor(vamos logo aprender como se faz um) em determinados angulos(ang). d3d_transform_set_translation(xt,yt,zt)-Coloca o ponto 0,0,0 na posio indicada. timo para diminuir o uso de variveis. Porm os Sets(definidores) iro destruir uma alterao anterior, ento, se voc colocar uma rotation_x ela ser apagada se depois voc colocar um set_translation Ento realmente voc dever usar os Adds, que possuem a mesma definio mais no destroem o anterior: d3d_transform_set_identity()- Este reinicia, por isso sempre set, alias, se voc quiser desenhar duas coisas com transformaes diferentes use este pra reiniciar. d3d_transform_add_scaling(xsc,ysc,zsc)Dica d3d_transform_add_ratation_x(ang)Use sempre o set_identity(), no inicio e no fim do script se d3d_transform_add_ratation_y(ang)for usar transformaes, pois uma transformao afetara a d3d_transform_add_ratation_z(ang)todos se no for usado o identity(). d3d_transform_add_axis(xvet,yvet,zvet)Dica:Se for usar rotate e/ou scaling, use nesta sequencia: d3d_transform_add_translation(xt,yt,zt)Ex.: Por exemplo em vez de colocar: d3d_draw_ellipsoid(x-5,y-5,z,x+5,y+5,z+10,-1,0,0,20) Coloca-se: d3d_transform_add_translation(x,y,z) d3d_draw_ellipsoid(-5,-5,0,5,5,10,-1,0,0,20)
d3d_set_identity() d3d_transform_set_rotation_z(direction) d3d_transform_set_translation() d3d_draw_ellipsoid(-5,-5,0,5,5,10,-1,0,0,20) d3d_set_identity()

Obs.:Lembre-se de usar o ratate e scaling antes de usar o translation, pois eles iro rodar e crescer do ponto 0,0 ento melhor fazer antes de colocalos em um posio absurda para rodar. Isso ocorer tambem se colocar direto(ex.: d3d_draw_ellipsoid(x-5,y-5,z,x+5,y+5,z+10,1,0,0,20) ) a posio que voc quer no desenho. Veja a engine_basic_rotate

Iluminao
sta outra parte importante na criao de um mundo 3D, ela que da a impresso de realidade ao jogo. Primeiramente devemos avisar que iremos requerir a luz: d3d_set_lighting(ligar)-Ativa a luz, padro desativada. Com a iluminao desetivada tudo vai ficar com sua cor original, com ela ativada tudo ir depender das luzes. Obs.:Vai ficar tudo preto exeto a cor de fundo, de inico. Quando voc ativa aluz, agora voc tambm precisarar ativar uma lampada. Existem apenas TRS tipos de luz, mais so todos que precisamos.

d3d_light_define_point(id,x,y,z,raio,cor)-Caracteriza uma lampada em determinado lugar, com determinado raio de alcance e determinada cor.Seu estado inicial apagada. d3d_light_define_direction(id,xvet,yvet,zvet,cor)-Caracteriza uma lampada (estilo sol), que afeta toda a room, com determinada direo vetorial, e determinada cor.Seu estado inicial apagada. Obs.:Voc define o id,(coisa que s acontece aqui), lembre-se desse nmero ou guarde-o em uma varivel.A lampada no desenhada, nem a sua luz, apenas os desenhos prximos que sero iluminados. Agora podemos ascender e apagar estas luzes criadas: d3d_light_enable(id,ligar)-Liga ou desliga a lampada de determinado indice(id). E ainda podemos embaar a luz-sobra para ficar mais realista: d3d_set_shading(ligar)-Ativa o embao.Padro ativado. Dica: Deixe isto sempre ativado, ou seja, do jeito que vem no padro, pois os grficos ficariam horrveis! Agora voc ter um campo iluminado, porem os poligonos ,feitos a partir de vrtices, ficaro pretos. Isso acontece porque eles no recebem luz, para que eles identifiquem a luz, voc dever alter apenas os vrtices(no a funo primitive_begin), aqui seguem as funes: d3d_vertex_normal(x,y,z,xn,yn,zn,tx,ty) d3d_vertex_normal_color(x,y,z, xn,yn,zn,tx,ty ,cor,alpha) d3d_vertex_normal_texture(x,y,z, xn,yn,zn,tx,ty) d3d_vertex_normal_texture_color(x,y,z, xn,yn,zn,tx,ty,cor,alpha)

Dica Se voc no usar mais a luz, voc pode reciclar seu nmero.Use define novamente, com o mesmo nmero.

Obs Light no criada nem destruida, existe um nmero definido j criado. Por isso seu id no devolvido. Voc apenas ativa, desativa ou caracteriza a luz. Lembre-se de apagar as luzes, pois elas vo sempre ficar ligadas, independente da room.

Que nmero eu coloco em xn,yn,zn? Estes so os vetores de deteco de luz, para ter um efeito correto voc dever criar um calculo de vetores que dependem dos trs pontos, este vetor a resultante da posio que o triangulo est voltado. Veja calculo_vetorial_padrao

Idia: Se voc quiser fazer um objeto que est que no afetado por luz, mais que fique da
sua cor original(por exemplo uma bola de fogo), voc pode desativar a luz no inicio do script e re-ativala no final. Ex.: d3d_set_lighting(-1) d3d_set_identity() d3d_transform_set_rotation_z(direction) d3d_transform_set_translation() d3d_draw_ellipsoid(-5,-5,0,5,5,10,-1,0,0,20) d3d_set_identity() d3d_set_lighting(1) Agor ter uma esfera incandecente na posio x,y,z, e todos os outros desenhos ainda sero afetados pela luz, menos este! Obs.: Isto gasta um pouco a mais de memria

Nvoa Nvoa um tipo diferente de luz. Quando a nvoa esta ativada, os desenhos se disipam dentro da cor especificada dependendo da distancia que estiverem, como a nvoa real. Ela ativada por: d3d_set_fog(ativar,cor,inicio,fim)-Aqui se inicia o uso da nvoa, quanto mais longe o objeto mais ele se mistura a cor at que em certo ponto ele se torna igual, essa distancia e o fim, mais se o objeto estiver bem perto(inicio) ele no afetado pela nvoa. Ento a nvoa comea a afetar em inicio e afeta totalmente em fim.Voc poder desativar com esta mesma funo.; Esta nvoa pode ser desativada com a mesma funo, caso voc queira fazer como o exemplo anterior. Veja a engine_basic_light

Cmeras
Isto muda drasticamente seu jogo! Agora, aqui est parte mais importante e complexa do jogo, Cmeras. A camera basicamente tem trs coisas: De onde se olha ,para onde se olha e como se olha. Aqui vai a funo principal: d3d_set_projection(xde,yde,zde,xpara,ypara,zpara,xtopo,ytopo,ztopo)- xde,yde,zde a posio onde a cmera vai estar, xpara,ypara,zpara para a onde a camera vai olhar. xtopo,ytopo,ztopo so escolhas, a sequencia 1,0,0 o eixo x voltado para cima, 0,1,0 o eixo y voltado para cima, 0,0,1 o eixo z voltado para cima. Aqui foi usado 1 e 0 mais realmente questo de true e false.(No adianta tentar fazer 0.5 ou vetores; No adianta colocar dois, sempre ser o primeiro true(ou 1);0,0,0 x ). Dica Voc pode usar lenghtdir_x e lenghtdir_y Obs.:A cmera perde sua alterao no final da frame, ento para que a cmera rode junto com o jogador. ela deve ser colocada no evento continuo Draw, objetos que Ex.:d3d_set_projection( foram criados antes(com mesmo depth) ou possuem depth maior no sero afetados pela projeo, ento melhor colocar esta funo em um objeto com super depth mximo(10000).
x-lenghtdir_x(25,direction), y-lenghtdir_y(25,direction), z-25,x,y,z,0,0,1)

Mais e se eu quiser desenhar 2d, como menus ou mapas? Para isto servem as prximas duas prximas funes.: d3d_set_projection_ortho(x,y,largura,comprimento,angulo)-Depois de usar esta funo, todo o desenho ser bidimensional, com y inicial, mais no sai do modo 3d. Porm realmente todos os desenhos sero bidimensionais, inclusive os desenhos 3D mostrados, ento no final do script voc dever reatornar ao modo de desenho 3D.Mais como?Usando a funo oposta: d3d_set_projection_perspective(x,y,largura,comprimento,angulo)Retoma o desenho 3D. Obs.: x,y, largura,comprimento servem apenas para esticar a imagen, mais ela ainda ser desenhada na tela toda. Dica:Use (0,0,room_width,room,_height,0) {ou view, se voc utilizar} em ambos, pois ser tudo desenhado normal.

Mesmo assim ainda existe uma outra funo, mais complexa, de projeo.: d3d_set_projection_ext (xde,yde,zde,xpara,ypara,zpara,xtopo,ytopo,ztopo,ngulo, aspecto,zmin,zmax) O inicio j foi explicado, ento vamos ver os novos: ngulo - o ngulo de viso, as coisas vo ficar menores e mais aparecero (padro 45). Aspecto quantas vezes a largura maior que comprimento.Ex.: Com 1 a cmera pensar que a tela exterior quadrada, seno for ela vai alongar, ento melhor colocar este nmero com room_height/room_width ou se voc usar uma port screen(que altera a exibio da tela, independente do tamanho da room) voc usa view_wport[0]/view_hport[0]. zmin se um desenho for mais prximo da cmera do que este nmero ele no desenhado e se for maior que zmax tambm no. O padro zmin 1 e zmax 32000. Veja a engine_basic_cameras

Criado Modelos
Modelo um desenho salvo na memria, evitando que voc use muitas funes no evento draw, ou at mesmo usar um modelo feito que foi salvo externamente. Para iniciar o modelo vejamos: d3d_model_create()-Retorna o id do modelo d3d_model_destroy(id)-Livra a memria, se voc no for mais usar o modelo USE ISTO, pois ele no destruido e no tem ligao com objetos que so destrudos. Quando a room passa ele tambm no destrudo. Dica Por favor, use isto ou seu jogo vai travar depois de algumas rooms. Voc pode colocar d3d_model_clear(id)-Reinicia o modelo identificado model_destroy(id) d3d_model_save(id,nome)-Salva o modelo externamente no evento d3d_model_load(id,nome)-Carregar modelo externamente destroy. d3d_model_draw(id,x,y,z,textura)-Desenha o modelo na posio especificada com determinada textura, esta textura usada internamente em todas as partes. Agora para salvar um desenho dentro do modelo voc no vai mais desenhar e sim adicionlos ao modelo, usando as mesmas funes de desenhos de formas e polgonos. Mais em vez de colocar a clave draw coloque a clave model, e o primeiro argumento vira o id, e o argumento de alguns de textura somem, pois sua textura ser especificada no draw model (exceto as coordenadas nos vrtices). Por isso no ser novamente explicado cada funo. d3d_model_primitive_begin(id, modo) d3d_model_primitive_end(id)-Este necessrio!Aqui no se pode mais usar apenas o primitive_end(); Dica d3d_model_vertex(id,x,y,z) d3d_model_vertex_color(id,x,y,z,cor,alpha) Use d3d_model_vertex_texture(id,x,y,z, tx,ty) texture_set_interpolation(1) d3d_model_vertex_texture_color(id,x,y,z,tx,ty,cor,alpha) d3d_model_vertex_normal(id,x,y,z,xn,yn,zn) d3d_model_vertex_normal_color(id,x,y,z,xn,yn,zn,cor,alpha) d3d_model_vertex_normal_texture(id,x,y,z,xn,yn,zn,tx,ty) d3d_model_vertex_normal_texture_color(id,x,y,z,xn,yn,zn,tx,ty,cor,alpha) Melhora significativamente todas as texturas

d3d_model_block(id,x1,y1,z1,x2,y2,z2,hrep,vrep) d3d_model_cylinder(id,x1,y1,z1,x2,y2,z2,hrep,vrep,tampa,presiso) d3d_model_cone(id,x1,y1,z1,x2,y2,z2,hrep,vrep, tampa,presiso) d3d_model_ellipsoid(id,x1,y1,z1,x2,y2,z2,hrep,vrep presiso) d3d_model_wall(id,x1,y1,z1,x2,y2,z2,hrep,vrep) d3d_model_floor(id,x1,y1,z1,x2,y2,z2,hrep,vrep) Veja a engine_basic_model Obs.: No precisa mais colocar o primitive_texture, pois este primitive j detecta os vrtices com textura. Obs. Tudo que vimos at agora so modos diferentes de se desenhar, por isso que nenhum deles altera a coliso, no espere que os modelos tenham! Agora aqui acabam as funes PADRES (e bsicas) do Game Maker, na prxima apostila vamos ver coisas mais avanadas como gua, cu, colises, transparncias, sombras, surfaces, uso em cadeia de funes e mtodos do uso de cmeras. Veja engine_basic_all

Extra:
Criando Vetores: Use cos(degtorad(ngulo de xy)), sin(degtorad(ngulo de xy),tag(degtorad(ngulo de z)).

Espere e ver! Obrigado por Ler

Por Rodrigo Santiago.

Você também pode gostar