0

ここでは半立方体という言葉を使用していますが、実際の立方体ではなく、面が 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);

しかし、まだ基本が欠けているので、とりあえず先に進みます。

4

2 に答える 2

2

回転は、回転後に描画されるオブジェクトにのみ影響します。を呼び出すとglBegin、描画するものはすべて、スタック上の現在のmodelviewマトリックスを使用してすぐに描画されます。

描画後にマトリックスを変更しても効果はありません。ドローコールの前に回転を移動する必要があります。

于 2012-11-12T22:38:40.833 に答える
0

回転は現在のマトリックスを更新し、回転後に描画されるすべてのオブジェクトに影響します。

回転を確認するには、描画線の上に移動します。

于 2012-11-12T22:44:15.347 に答える