Essa é uma função que eu desenvolvi para desenhar cubos em C. Criei uma variável que chamei 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.
Minha função:
/* 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));
}
Explicação das variáveis 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:
/* 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));
}
Pergunta
Zeero
Essa é uma função que eu desenvolvi para desenhar cubos em C. Criei uma variável que chamei 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.
Minha função:
Explicação das variáveis 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:Programa com a animação: http://rapidshare.com/files/96573512/3D_em_C.zip.html
Abraços !
Editado por ZeeroLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.