LINUX.ORG.RU

Вопрос по OpenGL


0

0

Мне нужно сделать так, чтобы в одном окне отображалась 3D графика и обычная 2D (рисуемая с помощью Xlib)
То есть необходимо в окне выделить регион, с которым будут работать gl функции, а с остальным окном - X - функции. Как такое реализовать?? И как все это обновлять? В определенном порядке перерисовывать??


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

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

goodwin ★★
()

А не пойдёт сделать вертикальный стек ваджетов, типа QVBox ?

CKulT
()
Ответ на: комментарий от goodwin

ИМХО такой набор необходимых элементов интерфейса можно взять с blender'а

anonymous
()
Ответ на: комментарий от goodwin

а кто так делал? В смысле, у кого получалось рисовать OpenGL функциями в текстуру (в pixmap), а потом отображать на экран? Просто при попытке это сделать (что-нить нарисовать) мой Х-сервер уходит в перезагрузку :( (FC2, XOrg, дрова NVidia) Можно примерчик, если не жалко???

ProtecT
() автор топика
Ответ на: комментарий от ProtecT

вот пример:
//----
double aspect=(double)TEX_WIDTH/(double)TEX_HEIGHT;
glViewport(10,10,TEX_WIDTH,TEX_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0,aspect,4.0,1000.0);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//
// рендер сцены (или что там у вас)
//
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,sc_texture);
glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,10,10,TEX_WIDTH,TEX_HEIGHT);
glDisable(GL_TEXTURE_2D);
//----
естественно размер текстуры должен быть кратен степени 2
и текстура, куда вы копируете изображение (glCopyTexSubImage2D)
должна быть создана.

еще вопросы?

goodwin ★★
()
Ответ на: комментарий от goodwin

Если используешь Qt - то там можно просто использовать QPainter совместно
с QGLWidget. Подробности - просто поищи в архивах этого раздела - примерно год назад. Этот вопрос уже обсасывался. Если не найдешь, тогда напиши - попробую найти тот старый код.

anonymous
()

В fltk кажется тоже можно совмещать 3D и 2D в одном окне. Хорошая вещь кстати этот fltk.

anonymous
()
Ответ на: комментарий от anonymous

Если устраивают стандартные контролы - то можно создать просто дочерние ваджеты у QGLWidget. QPainter на QGLWidget работает как на любом другом ваджете :)

CKulT
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.