Ir para conteúdo
Faça parte da equipe! (2024) ×

[Tutorial] Criando cubo 3D


~ Heatlex.
 Compartilhar

Posts Recomendados

Explicação

Quote

Foi criada uma variável chamada de índice de rotação, a partir dela a função desenha o cubo com certa inclinação, com um loop podemos fazer uma animação 3D de rotação.

O movimento é rotativo, isto é: o cubo gira em seu próprio eixo.

É um ótimo exemplo pra quem está começando a programar com gráficos em C.

 

 

 

 

Code:

/* Criação de Cubos por Raphael Pina Viana */

void drawCube(int x, int y, int aresta, int ir)

{

int i;

float dif = (aresta / 2); /* constante diferenca */

 

if(ir > aresta / 2)

{

ir = ir % (aresta / 2);

}

 

/* Quadrado Principal */

line(x, y + (2 * ir), x - ir, y + aresta - ir);

line(x, y + (2 * ir), x + aresta, y + (2 * ir));

line(x + aresta, y + (2 * ir), x + aresta - ir, y + aresta - ir);

line(x + aresta - ir, y + aresta - ir, x - ir, y + aresta - ir);

 

/* Arestas que ligam os dois quadrados */

line(x, y + (2 * ir), x - dif + ir, y - dif + ir);

line(x + aresta, y + (2 * ir), x + dif + ir, y - dif + ir);

line(x - ir, y + aresta - ir, x - dif, y + dif - (2 * ir));

line(x + aresta - ir, y + aresta - ir, x + dif, y + dif - (2 * ir));

 

x = x - dif;

y = y - dif;

 

/* Quadrado Secundario */

line(x + ir, y + ir, x, y + aresta - (2 * ir));

line(x + ir, y + ir, x + aresta + ir, y + ir);

line(x + aresta + ir, y + ir, x + aresta, y + aresta - (2 * ir));

line(x + aresta, y + aresta - (2 * ir), x, y + aresta - (2 * ir));

 

Explicando variaveis de chamada:

X e Y são as coordenadas X e Y do ponto superior esquerdo do quadrado principal do cubo.

 

Aresta é o comprimento de cada "traço" que compõe o cubo.

 

ir é o índice de rotação. Um sistema que eu criei para alterar o desenho do cubo em seu próprio eixo, fazendo o efeito de rotação.

 

Note que o índice de rotação deve valer de 0 até a metade do valor da aresta.

Logo 0 e (aresta / 2) é o estado estático do cubo.

 

Um exemplo que eu criei em que o cubo da 5 voltas e para, daí você pressiona qualquer tecla e a aplicação é finalizada:

 

Code:

/* Animação 3D, por Raphael Pina Viana */

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <graphics.h>

 

int main()

{

/* VARIAVEIS */

int far *gDriver, *gMode;

int color = WHITE;

int i;

 

/* FUNCOES */

void drawCube(int, int, int, int);

 

/* Inicia componentes gráficos */

detectgraph(gDriver, gMode);

initgraph(gDriver, gMode, '');

 

for(i = 0; i <= 40 * 5; i ++)

{

cleardevice();

drawCube(450, 200, 80, i);

delay(25000);

}

 

/* Fecha componentes gráficos e encerra o programa */

getch();

closegraph();

return 1;

}

 

void drawCube(int x, int y, int aresta, int ir)

{

int i;

float dif = (aresta / 2); /* constante diferenca */

 

if(ir > aresta / 2)

{

ir = ir % (aresta / 2);

}

 

/* Quadrado Principal */

line(x, y + (2 * ir), x - ir, y + aresta - ir);

line(x, y + (2 * ir), x + aresta, y + (2 * ir));

line(x + aresta, y + (2 * ir), x + aresta - ir, y + aresta - ir);

line(x + aresta - ir, y + aresta - ir, x - ir, y + aresta - ir);

 

/* Arestas que ligam os dois quadrados */

line(x, y + (2 * ir), x - dif + ir, y - dif + ir);

line(x + aresta, y + (2 * ir), x + dif + ir, y - dif + ir);

line(x - ir, y + aresta - ir, x - dif, y + dif - (2 * ir));

line(x + aresta - ir, y + aresta - ir, x + dif, y + dif - (2 * ir));

 

x = x - dif;

y = y - dif;

 

/* Quadrado Secundario */

line(x + ir, y + ir, x, y + aresta - (2 * ir));

line(x + ir, y + ir, x + aresta + ir, y + ir);

line(x + aresta + ir, y + ir, x + aresta, y + aresta - (2 * ir));

line(x + aresta, y + aresta - (2 * ir), x, y + aresta - (2 * ir));

}

 

Programa com a animação: Clique aqui

 

 

Créditos:

Raphael Pina Viana

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
Este tópico está impedido de receber novos posts.
 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.