Как вы можете рисовать примитивы в OpenGL в интерактивном режиме? - PullRequest
2 голосов
/ 23 марта 2009

Я с трудом пытаюсь настроить это поведение в моей программе.
По сути, я хочу, чтобы, когда пользователь нажимал клавишу "a", на экране отображалась новая сфера.

Как ты можешь это сделать?

Ответы [ 3 ]

5 голосов
/ 23 марта 2009

Я бы, вероятно, сделал это, просто имея какую-то структуру данных (массив, связанный список, что угодно), содержащую текущую «сцену». Изначально это пусто. Затем, когда событие происходит, вы создаете какое-то представление новой желаемой геометрии и добавляете это в список.

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

Структура данных часто упоминается как граф сцены , часто в форме дерева или графа, где геометрия может иметь дочерние геометрии и т. Д.

1 голос
/ 23 марта 2009

Если вы используете библиотеку GLuT (которая является довольно стандартной), вы можете воспользоваться ее функциями автоматической генерации примитивов, такими как glutSolidSphere. Вы можете найти API документы здесь . Взгляните на раздел 11 «Рендеринг геометрических объектов».

Как и предполагалось, ваша программа может хранить какой-то список, но с параметрами для каждого примитива, а не с реальной геометрией. В случае сферы это будет позиция / радиус / срезы. Затем вы можете использовать функции GLuT, чтобы легко рисовать объекты. Очевидно, это ограничивает вас тем, что может рисовать GLuT, но это обычно хорошо для простых случаев.

0 голосов
/ 23 марта 2009

Без дополнительных подробностей о том, какую среду вы используете, сложно быть конкретным, но несколько указателей на вещи, которые могут легко пойти не так при настройке OpenGL

  1. Убедитесь, что у вас настроена камера для просмотра точки, в которой вы рисуете сферу. Это может быть удивительно сложно, и самый простой подход заключается в реализации glutLookAt из OpenGL Utility Toolkit. Убедитесь, что передняя и задняя плоскости настроены на разумные значения.

  2. Отключить отбраковку задней поверхности, хотя бы для начала. Конечно, с производственным отбраковкой обратной стороны кода вы получаете быстрый выигрыш в производительности, но удивительно легко установить неправильные нормали на объект и не увидеть его, потому что вы смотрите на невидимое лицо

  3. Не забудьте вызвать glFlush, чтобы убедиться, что все команды выполнены. Рисование в обратном буфере и последующий сбой вызова glSwapBuffers также является распространенной ошибкой.

  4. Иногда вы можете столкнуться с проблемами с форматами буфера - хотя если вы копируете из примера кода, который работает в вашей системе, это вряд ли будет проблемой.

Графическое кодирование имеет тенденцию быть довольно простым для отладки, если у вас есть правильная базовая среда, потому что выходные данные являются визуальными, но настройка среды рендеринга в новой системе всегда может быть немного сложной, пока у вас не будет визуализирован первый куб или сфера , Я бы порекомендовал получить образец или шаблон и изменить его для начала, а не пытаться настроить окно рендеринга с нуля. Использование GLUT для проверки первых версий вызовов OpenGL также является хорошей техникой.

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