Безблочный пример рисования куба? - PullRequest
1 голос
/ 24 декабря 2011

Я пытаюсь вернуться в OpenGL, но мои знания и математика устарели. Раньше я использовал C ++, но сейчас я предпочитаю C # ... пробую OpenTK. Очевидно, Glu устарела с GL 3.1, поэтому я пытаюсь найти пример рисования куба без экрана на C # или C ++ (я могу перевести его).

Часть, которую я нахожу сложной, это настройка области просмотра / угла обзора / камеры / перспективы / инициализации. Я в порядке с очисткой буфера и установкой точек в трехмерном пространстве, но другие вещи я забываю!

В частности, мне нужны замены для Glu.Perpsective и Glu.LookAt.

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Я предлагаю взглянуть на http://openglbook.com/ Там написано, что это OpenGL 4, но все описанное здесь (пока только основы) напрямую относится и к OpenGL 3. Я думаю, что это лучший ресурс для быстрого начала работы с последними версиями OpenGL. Другим очень хорошим ресурсом является Learning Modern 3D Graphics Programming , который немного углублен.

Вы должны заметить, что OpenGL 3 и новее игнорирует фиксированный конвейер. Вы по-прежнему можете использовать фиксированный конвейер, используя профиль совместимости, но IMO лучше изучить программируемый конвейер. Это означает, что больше не требуется немедленный режим (например, glVertex3f и т. П.) И списки отображения. Вы должны отправить свои данные вершин непосредственно в графическую карту до рисования. Это делается с использованием буферных объектов, которые являются ничем иным, как массивом данных вершин. Затем вы должны представить программу GLSL, которая будет обрабатывать эти данные, например, применять матрицу вида модели и проекции (даже если вам не нужны причудливые шейдерные компоненты).

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

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

1 голос
/ 30 декабря 2011

OpenTK имеет свои собственные математические классы, включая матрицу 4x4 - Matrix4. Он включает в себя как метод орфографической, так и перспективной проекции - Matrix4.CreateOrthographic(...); и Matrix4.CreatePerspectiveFieldOfView(...);. Также есть метод lookAt: Matrix4.LookAt(...);

Привязки OpenTK для OpenGL принимают Matrix4 для таких методов, как GL.LoadMatrix(), GL.UniformMatrix4() и т. Д.

0 голосов
/ 28 декабря 2011

С Ch4 книги OpenGL , GLu.Perspective более или менее эквивалентно:

98  Matrix CreateProjectionMatrix(
99      float fovy,
100     float aspect_ratio,
101     float near_plane,
102     float far_plane
103 )
104 {
105     Matrix out = { { 0 } };
106  
107     const float
108         y_scale = Cotangent(DegreesToRadians(fovy / 2)),
109         x_scale = y_scale / aspect_ratio,
110         frustum_length = far_plane - near_plane;
111  
112     out.m[0] = x_scale;
113     out.m[5] = y_scale;
114     out.m[10] = -((far_plane + near_plane) / frustum_length);
115     out.m[11] = -1;
116     out.m[14] = -((2 * near_plane * far_plane) / frustum_length);
117  
118     return out;
119 }
...