0

OpenGL と SFML で 2D 三角形を回転させようとしていますが、何らかの理由で黒い画面が表示されます。回転ビットがなければ、コードは正常に動作し、2D の三角形を本来のように表示するので、回転コードが黒い画面の原因であることがわかります。

これが私のコードです:

#include <SFML/Window.hpp>

int drawTri()
{
GLfloat rtri;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -6.0f);

glRotatef(rtri, 0.0f, 1.0f, 0.0f);

glBegin(GL_TRIANGLES);
    glVertex3f(0.0f, 1.0f, 0.0f);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex3f(1.0f, -1.0, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex3f(-1.0f, -1.0f, 0.0f);
    glColor3f(0.0f, 0.0f, 1.0f);
glEnd();

glLoadIdentity();
glTranslatef(0.0f, 0.0f, -6.0f);

rtri+=0.2f;

return 0;
}

int main()
{
sf::WindowSettings winSet;
winSet.DepthBits = 24;
winSet.StencilBits = 8;
winSet.AntialiasingLevel = 2;
sf::Window App(sf::VideoMode(640, 480, 32), "Practice", sf::Style::Close, winSet);


bool isRunning = true;

while(App.IsOpened())
{
    sf::Event aEvent;
    if(App.GetEvent(aEvent))
        if(aEvent.Type == sf::Event::Closed) 
        isRunning = false;

    drawTri();

    if(!isRunning)
        App.Close();

    App.Display();
}
}

これが私が学んでいるチュートリアルです

チュートリアル コードの先頭にあるヘッダーは必要ないと思いますが、初心者なので間違っている可能性があります。

4

1 に答える 1

0

最初に glTranslate を実行し、次に glRotate を実行するので、カメラは三角形を見ていません。最初に (三角形を) 回転させ、次にバックウェアを変換して、三角形が中央の垂直軸を中心に回転することを確認します。

2 番目の glTranslate は役に立ちません。

注意: glLoadIdentity、glTranslatef、glRotatef、glBegin、glVertex3f、glColor3f、glEnd は 2009 年 (OpenGL 3.1) 以降非推奨です。

于 2013-10-25T23:20:20.707 に答える