Устаревшие функции OpenGL и gluPerspective и Transform - PullRequest
3 голосов
/ 01 ноября 2011

Я новичок в OpenGL, и я все еще экспериментирую с основными формами. Иногда я нахожу много функций, таких как glEnd и многие другие, которые не упомянуты в документации OpenGL 3+. Были ли они заменены другими функциями? Или я должен написать их вручную? Есть ли онлайн-учебник, использующий OpenGL 3+?

Что касается "gluPerspective", я прочитал, что он не используется в Opengl 3+. Разве это не должно быть отдельной функцией в GLUT? какое это имеет отношение к OpenGL 3+? Последнее, что делает Transform (Width, Height); делать? (Я нашел его в загруженном образце кода и не могу найти его в GLUT или OpenGL).

вот код:

GLvoid Transform(GLfloat Width, GLfloat Height)
{
  glViewport(00, 00, Width, Height);              /* Set the viewport */
  glMatrixMode(GL_PROJECTION);                  /* Select the projection matrix */
  glLoadIdentity();             /* Reset The Projection Matrix */
  gluPerspective(20.0,Width/Height,0.1,100.0);  /* Calculate The Aspect Ratio Of The Window */
  glMatrixMode(GL_MODELVIEW);                   /* Switch back to the modelview matrix */
}


/* A general OpenGL initialization function.  Sets all of the initial parameters. */
GLvoid InitGL(GLfloat Width, GLfloat Height)    
{
  glClearColor(0.0, 0.0, 0.0, 0.0);     /* This Will Clear The Background Color To Black */
  glLineWidth(2.0);                             /* Add line width,   ditto */
  Transform( Width, Height );                   /* Perform the transformation */
}

/* The function called when our window is resized  */
GLvoid ReSizeGLScene(GLint Width, GLint Height)
{
  if (Height==0)    Height=1;                   /* Sanity checks */
  if (Width==0)      Width=1;
  Transform( Width, Height );                   /* Perform the transformation */
}

Ответы [ 2 ]

4 голосов
/ 01 ноября 2011

Иногда я нахожу много функций, таких как glEnd и многие другие, которые не упомянуты в документации OpenGL 3+.Были ли они заменены другими функциями?

Они были полностью удалены, поскольку их работа плохо отражает то, как современные графические системы работают как на аппаратной, так и на программной стороне.glBegin (…) и glEnd () формируют окружение так называемого непосредственного режима: каждый вызов вызывает операцию.Это отражает то, как были построены ранние графические системы, около 20 лет назад.

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

Или я должен написать ихвручную?Есть ли онлайн-учебник, в котором используется OpenGL 3 +?

Это зависит от рассматриваемой функции.Например всю текстуру среды, объединители были удалены.Так же, как функции манипулирования матрицей и весь интерфейс освещения.

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

Что касается "gluPerspective", я читал, что он не используется в Opengl 3+,Разве это не должно быть отдельной функцией в GLUT?какое это имеет отношение к OpenGL 3+?Последнее, что делает Transform (Width, Height);делать?(Я нашел его в некотором примере загруженного мной кода, и не могу найти его в GLUT или OpenGL).

gluPerspective является частью GLU.GLU - это сопутствующая библиотека функций OpenGL Utility, которая использовалась в комплекте с OpenGL-1.1.Однако это не является частью спецификации OpenGL и является полностью необязательным.

GLUT - это нечто другое.Это упрощенная структура для быстрой и грязной настройки окна и контекста OpenGL, предлагающая некоторый минималистичный API ввода.Также он больше не поддерживается.Лично я рекомендую не использовать его.Если вы должны использовать GLUT API, используйте FreeGLUT.Или, что еще лучше, не используйте GLUT, используйте инструментарий, такой как Qt, GTK, или фреймворк, такой как GLFW или SDL.

2 голосов
/ 01 ноября 2011

Были ли они заменены другими функциями?

Нет.

Или я должен написать их вручную?

Для представления геометрии в непосредственном режиме в старом стиле вам придется сделать свою работу похожей. В матричном стеке есть замена .

Есть ли в Интернете учебное пособие, в котором используется OpenGL 3 +?

По крайней мере, один .

...