Пятница, 22 Ноября 2024, 03:08

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
OpenGL. Вместо изображения видно заднее окно
AntXXXДата: Пятница, 25 Апреля 2014, 22:01 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем привет!
После компиляции вместо изображения видно заднее окно.

Код

#include <GL/glut.h>

void myinit()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 500.0, 0.0, 500.0);
glMatrixMode(GL_MODELVIEW);
}

void display()
{
typedef GLfloat point2[2];
point2 verticles[3] = {{0.0, 0.0}, {250.0, 500.0}, {500.0, 0.0}};
static point2 p= {75.0, 50.0};
int j, k;
int rand();
for(k=0; k<5000;k++)
{
j=rand()%3;
p[0]=(p[0]+verticles[j][0])/2;
p[1]=(p[1]+verticles[j][1])/2;
glBegin(GL_POINTS);
glVertex2fv(p);
glEnd();

}
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(0,0);
glutCreateWindow("123");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}


Скрин:


Всем заранее спасибо!

Добавлено (25.04.2014, 22:01)
---------------------------------------------
Решено!
Я так понял не срабатывает glFlush(). Вместо glFlush() я юзнул glutSwapBuffers(). Спасибо за помощь!

Сообщение отредактировал AntXXX - Пятница, 25 Апреля 2014, 13:27
Just1uckyДата: Воскресенье, 25 Мая 2014, 20:10 | Сообщение # 2
частый гость
Сейчас нет на сайте
Еще причина того, что ты просто фон не задал. Сегодня узнал об этом:)
XakepДата: Воскресенье, 25 Мая 2014, 21:26 | Сообщение # 3
めちゃくちゃちゃ
Сейчас нет на сайте
на каждом кадре нужно очищать экран:
Код
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);


Добавлено (25.05.2014, 21:26)
---------------------------------------------
Цитата AntXXX ()
Я так понял не срабатывает glFlush(). Вместо glFlush() я юзнул glutSwapBuffers(). Спасибо за помощь!

glFlush и glutSwapBuffers это не одно и то же
glFlush говорит что мы больше не будем выполнять операций с графической картой в этом кадре и видео может прекратить ждать от нас команд и начать работу по отрисовке, а glutSwapBuffer - это смена экранных буферов.


Сообщение отредактировал Xakep - Воскресенье, 25 Мая 2014, 21:31
-l33t-h4xx-Дата: Понедельник, 26 Мая 2014, 07:17 | Сообщение # 4
участник
Сейчас нет на сайте
Если при инициализации glut стоит бит GLUT_SINGLE, то glFlush как раз вызывает перерисовку экрана. Я думаю, он у тебя не работал, потому что в коде его на самом деле просто не было.

glutSwapBuffers неявно вызывает glFlush, так что экран дейстительно перерисовывается, но это неправильное использование glutSwapBuffers. Он имеет реальный смысл только при включенной двойной буферизациии (GLUT_DOUBLE).


Как правильно задавать вопросы
XakepДата: Понедельник, 26 Мая 2014, 10:00 | Сообщение # 5
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата -l33t-h4xx- ()
glutSwapBuffers неявно вызывает glFlush, так что экран дейстительно перерисовывается, но это неправильное использование glutSwapBuffers. Он имеет реальный смысл только при включенной двойной буферизациии (GLUT_DOUBLE).

glFlush и glutSwapBuffer вроде бы не перерисовывают ничего, а только указывают карточке, что команды в этом кадре все выполнены (это glFlush) перерисовка идет когда вызываешь glClear, ты очищаешь весь экран и рисуешь заново новый кадр. Читайте RedBook.


Сообщение отредактировал Xakep - Понедельник, 26 Мая 2014, 10:01
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг