2009-03-23 3 views
2

У меня очень тяжелое время, пытаясь настроить это поведение в моей программе.
В принципе, я хочу, чтобы при нажатии пользователем клавиши "a" на экране отображается новая сфера.Как вы можете нарисовать примитивы в OpenGL в интерактивном режиме?

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

ответ

5

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

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

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

1

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

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

0

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

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

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

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

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

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

Смежные вопросы