Что случилось с opengl?Что это за кошмар сейчас? - PullRequest
0 голосов
/ 16 апреля 2011

Я использовал opengl 2 года назад. Однажды днем ​​я прочитал туто, нарисовал куб (а затем научился загружать любую 3d-модель) и научился дома перемещать камеру с помощью мыши. Это было легко, менее 100 строк кода. Я не получил конвейер полностью, но я смог сделать что-то .

Теперь мне нужно обновить opengl для некоторых базовых вещей, в основном мне нужно загрузить 3D-модель (любую модель) и переместить модель с фиксированной камерой. Что-то, что я думал, будет другим днем.

Я провел 1 день, и у меня ничего не работает. Я читаю рекомендованный tuto http://www.arcsynthesis.org/gltut/ Я ничего не понимаю, теперь, чтобы нарисовать только куб, вам нужно много линий и работать с большим количеством буфера, использовать какой-то особый синтаксис для шейдеров .... что, черт возьми, я только хочу нарисовать куб. До этого было только определение 6 сторон.

Что происходит с opengl? Некоторые утверждают, что сейчас это здорово, я думаю, что это ввернуто. Есть ли какая-нибудь простая библиотека для работы с чем-то, что облегчит мне жизнь?

Ответы [ 4 ]

8 голосов
/ 16 апреля 2011

GLUT - http://www.opengl.org/resources/libraries/glut/

ASSIMP - http://assimp.sourceforge.net/

Эти две библиотеки - все, что вам нужно для создания простого приложения, в которое вы импортируете модель (различные форматы). Прочитайте его документацию и примеры, чтобы лучше понять, как можно «склеить» OpenGL и ASSIMP для работы.

Документация

Что труднее понять в OpenGL? Нет. Что я узнал в последние годы от OpenGL, так это то, что GFX-программирование никогда не является простым или выполняется в несколько строк кода, вы должны быть организованы, вы должны быть осторожными и даже простым примитивом (например, куб) должен иметь более 100 строк кода, чтобы сделать его приличным и гибким (например, если вам нужно больше подразделений на полигонах или текстурировании).

4 голосов
/ 17 апреля 2011

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

Массивы вершин существуют еще с версии 1.1, и с тех пор они были предпочтительным методом отправки геометрии в OpenGL;в непосредственном режиме каждая вершина вызывает несколько вызовов функций, поэтому для любого сложного объекта вы тратите больше времени на управление стеком вызовов функций, чем на реальную работу по рендерингу.Если вы использовали вершинные массивы с момента их появления, переключение на объекты буфера вершин так же сложно, как просто вставить или заменить несколько строк.

Самое большое препятствие при использовании OpenGL-3 - в Windows, где нужно использоватьконтекст прокси для получения доступа к функциям расширения, необходимым для выбора возможностей OpenGL-3 для создания контекста.Однако, опять же, нет больших препятствий, 20 строк кода.И некоторые программы, такие как моя, например, в любом случае создают прокси-контекст GL, в который загружаются все совместно используемые данные, что позволяет быстро уничтожать / воссоздавать видимые контексты, но при этом иметь полный доступ к текстурам, VBO и прочему (вы можете поделиться VBO,что является еще одной причиной их использования вместо простых массивов вершин: это может не выглядеть как нечто большое, по крайней мере, если контекст используется из одного процесса, однако на платформах, таких как X11 / GLX, контексты OpenGL могут совместно использоваться клиентами X11,который может даже работать на разных машинах!)

Кроме того, существование таких функций, как стек матричных манипуляций, вводило людей в заблуждение, OpenGL была некоторой математико-математической библиотекой, некоторые даже полагали, что она была особенно быстрой.Ни то, ни другоеУдаление функций манипулирования матрицей было очень важным и правильным делом.В любом случае каждое серьезное OpenGL-приложение будет реализовывать свою собственную матричную математику.Например, любая современная игра, использующая какой-то физический движок, используемый для непосредственного использования в OpenGL (glLoadMatrix или glUniformMatrix) матрицы преобразования, выдаваемой физическим вычислением, полностью обходя остальные функции матрицы.Это также означает, что единственная причина иметь несколько матричных стеков (GL_PROJECTION, GL_MODELVIEW, GL_TEXTURE, GL_COLOR), а именно возможность использовать один и тот же набор функций манипуляции для нескольких матриц, была устаревшей и могла быть заменена чем-то вроде glLoadMatrixSelected{f,d}v(GLenum target, GLfloat *matrix),Однако униформы и шейдеры уже были рядом, поэтому логичным шагом было не введение новой функции, а повторное использование существующего API, который уже использовался для этой задачи, и вместо этого удалить того, что больше не требуется.

TL; DR: новый API OpenGL-3 значительно упрощает его использование.Это намного понятнее, меньше ловушек, и IMHO также более дружественный к новичкам.

2 голосов
/ 16 апреля 2011

Вам не нужно использовать буферные объекты. Вы можете использовать устаревший немедленный режим. Это будет медленнее, но если вам все равно, тогда используйте OpenGL, как вы привыкли. У NeHe есть отличные учебники по OpenGL 1.x.

Swiftless имеет несколько хороших учебных пособий (только несколько очень простых) по OpenGL 3.x и 4.x, но кривая обучения, как вы обнаружили, очень крутая.

1 голос
/ 16 апреля 2011

Должен ли это быть openGL?XNA предлагает возможность рисовать 3d модели, не ломая спину. Может стоит посмотреть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...