|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
Как сделать перемещение камеры в PyOpenGL?28.08.2024, 20:55. Показов 6658. Ответов 65
Метки нет (Все метки)
Мне помог один человек (в целях конфиденциальности я решил не писать его username) с изучением OpenGL с помощью Python. Я взял его код с крутящимся синим кубиком (фигур было больше, но для удобства я решил оставить одну). Код изучил я подробно, но возникла проблема с перемещением камеры клавишами: я не знаю как их сделать. Помогите, пожалуйста.
Вот код:
0
|
||||||
| 28.08.2024, 20:55 | |
|
Ответы с готовыми решениями:
65
Как сделать перемещение камеры в пространстве по типу 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 | |
|
Помогаю со студенческими работами здесь
60
Как правильно настроить перемещение камеры? Перемещение камеры, как в редакторе unity в окне Scene
Как сделать перемещение нескольких файлов с заменой? И как это сделать проще? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|