ここでは半立方体という言葉を使用していますが、実際の立方体ではなく、面が 3 つしかありません。次のことを行います。
1.立方体の 3 つの面を青で描きます。最初の面は青、残りの 2 つは赤です。 2.半立方体を 45 度回転させて、赤い面の半分が見えるようにします。
しかし、青い面だけがそこにある立方体を表示すると、半分が青で半分が赤に見えるはずです。
深さを有効にできない可能性があります (glEnable() を使用します)。図面では深さの寸法が無視されているような印象を受けます。
#import <OpenGL/OpenGL.h>
#import <GLUT/GLUT.h>
int width=500, height=500, depth=500;
void init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glViewport(0, 0, width, height);
glOrtho(0, width, height, 0, 0, 1);
}
void display()
{
glClearColor(0.9, 0.9, 0.9, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor4f(0, 0, 1, 0);
glBegin(GL_QUADS);
// First face
glVertex3i(100, 100,0);
glVertex3i(300, 100,0);
glVertex3i(300, 300,0);
glVertex3i(100, 300,0);
glColor4f(1, 0, 0, 0);
// Second face
glVertex3i(300,100,0);
glVertex3i(300,300,0);
glVertex3i(300,100,300);
glVertex3i(300,100,300);
// Third face
glVertex3i(100, 100,300);
glVertex3i(300, 100,300);
glVertex3i(300, 300,300);
glVertex3i(100, 300,300);
glEnd();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(45, 1, 0, 0);
glFlush();
}
int main(int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitWindowPosition(100, 100);
glutInitWindowSize(width, height);
glutCreateWindow("Test");
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;
}
これは私が代わりに得るもののイメージです:
編集:ビューポートの変更をちょっと解決しました:
glOrtho(0, width, height, 0, -depth, depth);
しかし、まだ基本が欠けているので、とりあえず先に進みます。