|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
Как сделать перемещение камеры в PyOpenGL?28.08.2024, 20:55. Показов 7612. Ответов 70
Метки нет (Все метки)
Мне помог один человек (в целях конфиденциальности я решил не писать его username) с изучением OpenGL с помощью Python. Я взял его код с крутящимся синим кубиком (фигур было больше, но для удобства я решил оставить одну). Код изучил я подробно, но возникла проблема с перемещением камеры клавишами: я не знаю как их сделать. Помогите, пожалуйста.
Вот код:
0
|
||||||
| 28.08.2024, 20:55 | |
|
Ответы с готовыми решениями:
70
Как сделать перемещение камеры в пространстве по типу FPS шутера
|
| 08.09.2024, 18:13 | ||||||||||||
|
main.py
1
|
||||||||||||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
| 08.09.2024, 20:33 [ТС] | ||||||
|
Хорошо
Добавлено через 2 часа 10 минут Здравствуйте! Я попытался сделать на ночь глядя код, чтобы он доставал нужные объекты для теней, но их не использовал. Вдруг у меня возникла проблема с классами, а с ними я не очень хорош (а точнее импортом функций из класса). Вот код, который у меня получился на нынешний момент:
0
|
||||||
| 08.09.2024, 21:44 | ||||||||||||
|
main.py
0
|
||||||||||||
| 09.09.2024, 10:44 | ||||||||||||
1
|
||||||||||||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
| 11.09.2024, 17:15 [ТС] | ||||||
|
Здравствуйте! Я попытался сделать код, но у меня как всегда, появилась ошибка.
Вот код:
0
|
||||||
| 11.09.2024, 19:06 | ||||||||||||||||||||||||||||||||||||
|
Когда ошибка в коде, то показывается номер строки и текст ошибки. Пролистывайте код до номера строки, где ошибка и читайте текст ошибки. Я скачал ваш код и сразу его запустил. Мне вывелась такая ошибка:
0
|
||||||||||||||||||||||||||||||||||||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
|
| 11.09.2024, 20:14 [ТС] | |
|
Понял. Иду исправлять. Вот это я невнимательный
0
|
|
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
| 12.09.2024, 17:42 [ТС] | ||||||
|
Здравствуйте! Я решил ошибки программы, но появилась новая: отсутствует фигура, а также при изменении вектора позиции изменяется цвет фона
Вот код:
0
|
||||||
| 12.09.2024, 18:18 | |
|
Программа ошибок не выдаёт. Показывает оранжевый экран. Предлагаю детально разобраться по шагам. Для быстрого воспроизведения проблемы прикрепляю архив с программой и моделями, а позже начну разбирать программу.
0
|
|
| 12.09.2024, 21:04 | |||||||||||||||||||||||||||||||||||||||||
|
Я не знал, что за объект вы загружаете из файла под именем "untitled.dae", поэтому я импортировал этот файл в Blender. Оказалось, что это сфера. Я переименовал "untitled.dae" в "sphere.dae". Предлагаю вам тоже это сделать в своём проекте.
Сфера - это слишком сложный объект для тестирования. Надо загружать "plane.dae", то есть плоскость. У неё мало вершин, поэтому проще будет отлаживать. Вы передаёте имя файла при создании объекта здесь:
Я убрал класс Model в отдельный файл "model.py". Так удобнее. А ещё я убрал загрузку данных в отдельный файл "load_data.py". Загрузил два объекта - плоскость и куб. Скачайте прикреплённый архив и добавьте остальные объекты. Меняйте параметры "position" и "scale", а так же можете поменять цвета для новых объектов. Для плоскости надо сделать большой размер, чтобы это была земля, куда будут отображаться тени в следующей версии программы.
0
|
|||||||||||||||||||||||||||||||||||||||||
| 12.09.2024, 23:31 | |||||||||||
|
Я немного усовершенствовал пример из предыдущего сообщения. Добавил освещение. Передал нормали в Model:
Убрал модели в отдельную папку "assets/models", чтобы они не мешались среди файлов программы. Убрал код шейдеров отдельные файлы в папку "assets/shaders", чтобы "main.py" поменьше и чтобы работала подсветка синтаксиса в шейдерах. Теперь файлы с кодом не лежат в перемешку с файлами 3D-моделей. Использую редактор кода Sublime Text 4: Прикрепляйте программу архивом, когда она много файловая и/или содержит ассеты. Так всем удобнее. Скачал и запустил, или в архив добавил и прикрепил. Вот что нужно сделать:
1
|
|||||||||||
| 13.09.2024, 18:08 | |
|
Добавил тени к предыдущему примеру. Код теней взял из примера прошлой темы. Загрузил модель Хагрида из игры "Гарри Поттер и философский камень". Модель есть в свободном доступе здесь.
1
|
|
| 28.09.2024, 16:29 | ||||||
Сообщение было отмечено 8Observer8 как решение
Решение
Отвлёк я вас от темы. Хотел, чтобы вы научились загружать текстурированные объекты из Collada. По теме я попытался ответить в сообщении #34, где я привёл пример:
Команды для установки необходимых пакетов и запуска примера:
0
|
||||||
| 28.09.2024, 17:29 | ||
|
0
|
||
| 28.09.2024, 17:49 | |
|
Igor3D, что конкретно я ошибся? Управление камерой в Blender разве не является типом "Orbit Controls"? Я взял название "Orbit Controls" из Three.js: OrbitControls – three.js docs. Если разработчики Three.js не ошиблись с названием и логикой, то это управление камерой характеризуется тем, что камера смотрит на target и перемещается по орбите вокруг target, и постоянно смотрит на target. А название "Fly Controls" я тоже взял из Three.js: FlyControls – three.js docs. Не понимаю, в чём я ошибаюсь.
0
|
|
| 28.09.2024, 18:33 | |||
|
0
|
|||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
|
| 29.09.2024, 18:33 [ТС] | |
|
Здравствуйте! Извините, что долго не появлялся в сети, не было доступа к компьютеру. А во время отсутствия пк решил чуток углубиться в OpenGL. Хочу спросить, не легче использовать функцию GL_LIGHTING, или она не будет работать при шейдерах?
0
|
|
| 29.09.2024, 19:18 | ||||||||||||
Расчёт коэффициента vDot происходит в вершинном шейдере (а можно было бы считать vDot в фрагментом шейдере, то получилось бы не направленное, а точечное освещение, как от лампочки). Эта переменная со словом "varying", то есть это значение будет интерполироваться между вершинами. В фрагментом шейдере для промежуточных фрагментов, то есть которые находятся между вершинами, будет интерполированное значение vDot. Это значит, что у треугольника в вершинах может быть разный vDot, так как нормали могут быть разными - они могут быть усреднены, см. кнопка "Smooth" в Blender. То есть если у треугольника разные нормали, то и vDot будет разный, а промежуточные фрагменты получат разный vDot. Цвет для всех промежуточных фрагментов треугольника будет считаться со своим vDot вот так:
В этой строке: "vec3 diffuse = lightColor * color.rgb * vDot;" итоговый цвет рассчитывается из белого цвета освещения, цвет: (1, 1, 1), то есть белый цвет, это когда все компоненты равны единице. Можно изменить белый цвет, на какой-нибудь красноватый, если светит красноватый источник света. Второй множитель - это цвет текстуры - color.rgb, то есть это пиксель текстуры и у него есть цвет "RGB". Текстура накладывается на треугольник. Текстурная координата vTexCoord интерполируется между вершинами треугольника. Переменная uSampler хранит идентификатор текстуры. Функция texture2D() принимает идентификатор текстуры и интерполированную текстурную координату vTexCoord, на основании этих параметров texture2D() возвращает цвет текстуры в виде RGB. В этом произведении "lightColor * color.rgb * vDot" коэффициент vDot хранит значение от 0.3 до 1, то есть он определяет будет ли цвет на 100%, если vDot = 1, на 30%, если vDot = 0.3, либо какое-то промежуточное значение между 0.3 и 1, например, 0.55, 0.78 и т.д.
1
|
||||||||||||
| 30.09.2024, 02:07 | ||
|
Не по теме:
0
|
||
| 30.09.2024, 04:04 | |||||||||||||
texture.vert
0
|
|||||||||||||
| 30.09.2024, 04:04 | |
|
Как правильно настроить перемещение камеры? Перемещение камеры, как в редакторе unity в окне Scene
Как сделать перемещение нескольких файлов с заменой? И как это сделать проще? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|