Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

Это звучит как идеальная ситуация для списков дисплеев 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), но они все равно должны работать в обозримом будущем. Чтобы стать будущим доказательством, вы должны использовать вершин -массивы, но это немного сложнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top