内定をもらった会社から課題を出されてしまいました。
三角形の面を定義する配列trianlglepを作成して、立方体を三つの頂点ごとの三角形で色分けするやり方がわかる方がいたら回答お願いします。
プログラミング未経験者なのでよろしくお願いします。
#include <GL/glut.h>
GLdouble vertex[][3] = {
{ 0.0, 0.0, 0.0 }, /* A */
{ 1.0, 0.0, 0.0 }, /* B */
{ 1.0, 1.0, 0.0 }, /* C */
{ 0.0, 1.0, 0.0 }, /* D */
{ 0.0, 0.0, 1.0 }, /* E */
{ 1.0, 0.0, 1.0 }, /* F */
{ 1.0, 1.0, 1.0 }, /* G */
{ 0.0, 1.0, 1.0 } /* H */
};
int edge[][2] = {
{ 0, 1 }, /* ア (A-B) */
{ 1, 2 }, /* イ (B-C) */
{ 2, 3 }, /* ウ (C-D) */
{ 3, 0 }, /* エ (D-A) */
{ 4, 5 }, /* オ (E-F) */
{ 5, 6 }, /* カ (F-G) */
{ 6, 7 }, /* キ (G-H) */
{ 7, 4 }, /* ク (H-E) */
{ 0, 4 }, /* ケ (A-E) */
{ 1, 5 }, /* コ (B-F) */
{ 2, 6 }, /* サ (C-G) */
{ 3, 7 } /* シ (D-H) */
};
int plane[][4] = {
{ 0, 1,2,3 }, /* 面0 (A-B-C-D) */
{ 1, 5,6,2 }, /* 面1 (B-F=G-C) */
{ 2, 6,7,3 }, /* 面2 (C-G-H-D) */
{ 0,3,7,4 }, /* 面3 (A-D-H-E) */
{ 1, 0,4,5 }, /* 面4 (B-A-E-F) */
{ 4, 7,6,5 }, /* 面5 (E-H-G-F) */
};
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
/* 図形の描画 */
//glColor3d(0.0, 0.0, 0.0);
//glBegin(GL_LINES);
glBegin(GL_QUADS);
for (i = 0; i < 6; ++i) {
switch (i) {
case 0 :
glColor3d(1.0, 0.0, 0.0);
break;
case 1 :
glColor3d(0.0, 1.0, 0.0);
break;
case 2 :
glColor3d(0.0, 0.0, 1.0);
break;
case 3 :
glColor3d(1.0,1.0,0.0);
break;
case 4 :
glColor3d(0.0, 1.0, 1.0);
break;
case 5 :
glColor3d(1.0, 0.0, 1.0);
break;
case 6 :
glColor3d(1.0, 0.5, 0.0);
break;
case 7 :
glColor3d(0.0, 1.0, 0.5);
break;
case 8 :
glColor3d(0.5, 0.0, 1.0);
break;
case 9 :
glColor3d(1.0, 0.5, 0.5);
break;
case 10 :
glColor3d(0.5, 1.0, 0.5);
break;
case 11 :
glColor3d(0.5, 0.5, 1.0);
break;
default:
glColor3d(0.0, 0.0, 0.0);
break;
}
glVertex3dv(vertex[plane[i][0]]);
glVertex3dv(vertex[plane[i][1]]);
glVertex3dv(vertex[plane[i][2]]);
glVertex3dv(vertex[plane[i][3]]);
}
glEnd();
glFlush();
}
void resize(int w, int h)
{
glViewport(0, 0, w, h);
glLoadIdentity();
// glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0);
gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);
//glTranslated(0.0, 0.0, -5.0);
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//課題はここを弄るだけ
}
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 1.0);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutReshapeFunc(resize);
init();
glutMainLoop();
return 0;
}