1

この単純なプログラムは、米国の国旗のように交互に配置された 13 の均等な赤と白のストライプを描画するように設計されています。

// A Simple OpenGL Project
// Author: Michael Hall
//
// This C++ code and project are provided "as is" without warranty of any kind.
//
// Copyright 2010 XoaX - For personal use only, not for distribution
// 
// Elaborated by me :)

#include <glut.h>

void DrawStripes(const int quantity)
{
    glBegin(GL_QUADS);

    for(int i=1; i <= quantity ; i++)
    {
        if(i%2)
            glColor3f(1.0,0.0,0.0);
        else 
            glColor3f(1.0,1.0,1.0);

            glVertex2f(0,static_cast<float>(i-1)/static_cast<float>(quantity));
            glVertex2f(1.0,static_cast<float>(i-1)/static_cast<float>(quantity));

            glVertex2f(0,static_cast<float>(i)/static_cast<float>(quantity));
            glVertex2f(1.0,2*static_cast<float>(i)/static_cast<float>(quantity));
    }
}



void Draw() 
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 0.0, 1.0);
    DrawStripes(13);


    glEnd();
    glFlush();
}

void Initialize() 
{
    glClearColor(0.0, 0.0, 102.0/255.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

int main(int iArgc, char** cppArgv) 
{
    glutInit(&iArgc, cppArgv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(950,500);
    glutInitWindowPosition(200, 200);
    glutCreateWindow("Rough draft");
    Initialize();


    glutDisplayFunc(Draw);
    glutMainLoop();

    return 0;
}

これは実際にどのように見えるかです: 最終窓口 前景に青い三角形があるのはなぜですか? Draw/DrawStripes 関数内で「QUADS」のみを指定しました。

4

2 に答える 2

3

青はあなたの澄んだ色から来ています:

 glClearColor(0.0, 0.0, 102.0/255.0, 0.0);

その 3 番目のパラメーターは、クリア カラーの青チャネルです。glClear(GL_COLOR_BUFFER_BIT); を呼び出すと、レンダー ターゲットをクリア カラーで初期化します。

したがって、表示されている青は、頂点がレンダー ターゲット全体を覆わず、青のクリア カラーを通過させたものです。表示するには、ワイヤーフレームを有効にします (glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);)。

また、左上、左下、右下、右上のように、反時計回りに描画する必要があります。これにより、ポリゴンが前面に描画されます (これは通常、背面のカリングを避けたいものです)。

現時点では、左上、右上、左下、右下を実行することで、ポリゴンを「折りたたんで」おり、基本的にクワッドをねじっています。時計回りに試して (右下と左下を反転)、まだポリゴンが表示されるかどうかを確認します (背面カリングがオンの場合は表示されません)。

最後に、右下の Y 座標のみに 2を掛けますが、なぜですか? それが(ねじれに加えて)変形を引き起こしているものです。長方形を作成するには、両方の下部頂点の Y 座標が同じである必要があります (したがって、右下と左下の Y 座標が一致する必要があります)。

于 2012-07-04T00:22:14.040 に答える
2

四角形の頂点を間違った順序で描いていると思います。それらは反時計回りである必要がありますが、「ねじれた」クワッドを描いています。

for ループで 3 番目と 4 番目の頂点を交換してみてください。

于 2012-07-04T00:11:42.820 に答える