OpenGL сохранить рендер для дальнейшего использования - PullRequest
0 голосов
/ 09 октября 2010

Это довольно интересный вопрос для начинающих, но, учитывая, что я рендеринг сложной формы в OpenGL, которая требует много вычислений, есть ли возможность экспортировать ее в такое состояние, как модель, которая может быть открыта снова позже, если вы не будете редактировать ееснова?

Я не могу создать их вне программы (с чем-то вроде Blender), так как форма вычисляется при запуске программы.Затем рендер переводится, поворачивается, рисуется и т. Д. Обратите внимание, что мне не нужно редактировать фигуру, но я хочу, чтобы она была в 3D-состоянии, поэтому сохранение изображения не вариант.

Я использую OpenTK 1.0, VB.NET (.NET 4)

Ответы [ 2 ]

3 голосов
/ 09 октября 2010

Очевидная возможность состоит в том, чтобы записать ваши вершины в файл, а затем повторно загрузить их при необходимости. Если у вас нет особых причин поступать иначе, вероятно, лучше использовать для этого один из многих существующих форматов файлов, например Wavefront OBJ , Ogre3d mesh XML файлы, и т. Д. .

1 голос
/ 10 октября 2010

Это звучит как идеальная ситуация для списков отображения OpenGL. То, как вы их используете, - это сначала запросить у OpenGL идентификатор отображаемого списка:

GLuint draw_id = glGenLists(1);

(Вы можете запросить несколько последовательных идентификаторов одновременно, но в этом случае мы запрашиваем только 1) Затем в первый раз во время процедуры рисования вызовите glNewList:

glNewList(draw_id, GL_COMPILE);
<do compute intensive drawing here>
glEndList();

Обратите внимание, что на самом деле это не будет отображать вашу форму (вы можете использовать GL_COMPILE_AND_EXECUTE в glNewList, который будет отображать вашу форму, но это обычно не рекомендуется)

Теперь, когда вам нужно нарисовать ваш объект:

< set up your OpenGL matrices >
glCallList(draw_id);

И, наконец, когда вы закончите с этим, вы можете использовать glDeleteLists.

Отображение списков на самом деле может ускорить рендеринг, поскольку можно выполнить некоторые оптимизации и удалить все накладные расходы на вызовы функций.

Технически, списки отображения OpenGL устарели (но не удалены!) В OpenGL 3.0 и выше (вместе с glTranslate, glVertex glBegin ... grrr), но они все еще должны работать в обозримом будущем. Чтобы быть надежным в будущем, вы должны использовать массивы вершин, но это немного сложнее.

...