2013-10-25 3 views
0

Я пытаюсь повернуть 2D-треугольник в OpenGL и SFML, но по какой-то причине я получаю черный экран. Без бита вращения код работает нормально и отображает 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(); 
} 
} 

here's учебник я учусь с.

Я не думаю, что мне нужны заголовки в верхней части учебного кода, но я новичок, поэтому я мог ошибаться.

+0

Использование glTranslatef (0.0f, 0.0f, -6.0f); вы перемещаете свой треугольник SIX UNITS в направлении -z, который на самом деле в этом случае, с матрицей представлений и проекций по умолчанию, является НЕСКОЛЬКИМИ ЭКРАНАМИ вне поля зрения! –

+0

, и я думаю, вы пропустили хотя бы один glMatrixMode здесь –

+0

Я думал, что glMatrixMode был только при работе с 3D-объектами:/oops. – user2727356

ответ

0

Вы сначала glTranslate, а затем glRotate, поэтому ваша камера не смотрит на треугольник. Вы должны сначала повернуть (треугольник), а затем перевести назад, чтобы увидеть треугольник, вращающийся по его центральной вертикальной оси.

Второй glTranslate бесполезен.

Внимание: glLoadIdentity, glTranslatef, glRotatef, glBegin, glVertex3f, glColor3f и glEnd являются устаревшими с 2009 года (OpenGL 3.1).

Смежные вопросы