1

私は OpenGL の世界に足を踏み入れていますが、Vertexの宣言に問題があります。つまり、ウィンドウに対する相対的なサイズを座標として使用して頂点を正常に定義しただけです (0.25 は 500*0.25=125 を意味します)。これは直感的ではないようです。

相対値のない頂点をどのように定義しますか?

#include <GLUT/glut.h>
#include <stdlib.h>

void displayInit(void) {
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
}

void display(void) {
    glClear(GL_COLOR_BUFFER_BIT);

    // Select a drawing color
    glColor3f(1.0, 0.0, 0.0);
    // Draw a square
    glBegin(GL_POLYGON);
        glVertex2f(-0.25, -0.25); // start from -1/4 window w, -1/4 window h
        glVertex2f(-0.25, 0.25);  // add point 1/4 window h up from center
        glVertex2f(0.25, 0.25);
        glVertex2f(0.25, -0.25);
    glEnd();

    // Display the whole drawing on screen
    glFlush();
}

int main(int argc, char **argv) {
    // Initialize with a window
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);

    // Display first screen
    displayInit();

    // Enter the display loop
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

グラフィックはこんな感じ

ここに画像の説明を入力

4

1 に答える 1

2

OpenGL の古いバージョンでは、これは glOrtho のような非推奨の行列操作関数で行われていました。(実際、glBegin、glVertex、および glEnd の使用も非推奨です...)

非推奨の機能を使用してもかまわない場合は、glPushMatrix、glPopMatrix、glScale、glRotate、および glTranslate を調べると、さまざまな座標系を定義する方法のアイデアが得られます。また、glMatrixMode を調べて、射影マトリックスとモデルビュー マトリックスの違いを理解してください。射影行列は、glOrtho、または「正しく見える」ようにする場合は gluPerspective を適用するものになります (遠くのオブジェクトは小さくなります)。

ただし、最新の API を使用する場合は、 glmなどのライブラリを使用して自分で行列変換をデータに適用する必要があります。

これを行う方法に関する優れたチュートリアルを次に示します。

于 2013-09-23T16:54:25.537 に答える