[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 712367»
Форум Panda3D - по русски » Panda3D » Для начинающих » Вопросы, вопросы, вопросы... (Вращение, перемещение и т.д.)
Вопросы, вопросы, вопросы...
MichmanДата: Понедельник, 30.08.2010, 21:49 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Питон и соответственно Панду стал изучать совсем недавно. Небольшой опыт в програмировании есть (Basic, Pascal, немного С++). Писал игры, вернее пытался писать, что-то получалось что-то нет. Скорее получались заготовки нежели игры. С ООП не очень дружу, с его классами, обьектами,
пространством имен и т.п., вообщем, мучаюсь. Мне ближе процедурное програмирование.

Так вот, у меня возникла масса вопросов по Панде, возможно они уже задавались и ответы где-нибудь на форуме имеются, ненашел ответов.

1. Как задается вращение объекта в сцене по заданной оси?
Например, имеется куб и его необходимо повернуть на определенный угол по оси Х.

2. Какое количество экземпляров taskMgr можно создавать одновременно, есть ли ограничения?

3. Можно ли изменять параметр pos в OnscreenText при выполнении програмы и как?, если это возможно.
Например, создать эффект бегущей строки.

Думаю пока хватит с вопросами. В дальнейшем ещё несколько подкину. Буду весьма признателен за более развернутый ответ, за неразвернутый тоже biggrin

P.S. Немного оффтопа. Читал статью на сайте про SPE и интеграцию оного в панду. Я нашел более простой вариант. Скачиваем редактор UliPad 4.0 и ставим его... по умолчанию ;). Все пути к файлу запуска програм прописываются автоматически. У редактора имеется свой PythonShell. Больше ничего ненужно делать. Запускаете UliPad, выбираете шаблон Python из меню File->New и всё, набирайте код и запускайте. Во время первого запуска выскочит окно выбора: запускать в консоли или в окне. Здесь выбираем в окне, хотя и в режиме консоли тоже работает, просто зачем нам консоль под пандовским окном biggrin .

Добавлено (30.08.2010, 21:49)
---------------------------------------------
С вращением разобрался. hpr методы. А по остальным вопросам пока глухо.

 
ninthДата: Среда, 01.09.2010, 04:31 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
1. Всё верно - getHpr, setHpr. Так же можно задавать через кватернионы и матрицы, но это уже ближе к высшей математике ) Один важный момент - углы, как и другие трансформации задаются относительно, т.е. в системе координат определённого нода. По-дефолту этим нодом является родительский нод.

2. Не совсем понял - тебе нужны именно менеджеры или всётаки задачи в менеджере? В любом случае, и на то и на то каких-либо ограничений я не знаю, кроме железа ) Хотя увлекаться тоже не стоит, например не надо добавлять персональную задачу для каждой отдельно взятой пули - лучше сделать одну задачу, которая будет обрабатывать массив со всеми твоими пулями.

3. Можно двумя способами: myText.setPos(x,y) или myText["pos"] = (x,y). Способы равноценны, т.к. по-сути второй является псевдонимом первого и предназначен для удобочитаемости )

----------
На самом деле можно писать в чём угодно ) Хоть в блокноте ). Просто изначально мне попался SPE и понравилось в нём то. что можно сразу по ссылке на ошибку перейти к проблемному участку, даже если он находится в другом файле. Сейчас пользуюсь geany.

 
MichmanДата: Среда, 08.09.2010, 17:23 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Сасибо, ninth, за ответы. Я тут пропал... , работа... Потихоньку разбираюсь прям на работе, в свободное время. Не так страшен чёрт... Geany тоже хорош.

На данный момент с тенями вожусь, экспериментирую. Есть лажа одна с отрисовкой теней. При Spotlight тени рисуются, а при остальных ИС(DirectLight, PointLight и т.д) ничего. Думал от растояния ИС до объекта зависит, вроде нет. ShadowCaster и setShaderAuto включены.

 
BVOGДата: Среда, 08.09.2010, 18:42 | Сообщение # 4
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Посмотри работу стенью через шейдер в примере Shadows.

Skype: thebvog
 
ninthДата: Среда, 08.09.2010, 23:41 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
На самом деле, ShadowCaster ввели только в последней версии панды - 1.7.0 и по сути он является автоматически генерируемым шейдером, которй показан в примере Tut-Shadow-Mapping-Advanced
На данный момент, видимо, автошейдер реализован только для Spotlight. Можно надеяться на то что в следующих версиях это пофиксят, либо самому писать шейдер, как было в преддущих версиях.
Вообще тени - довольно сложная штука и если опыта в 3D мало, то лучше в дебри пока не лезь.
 
MichmanДата: Понедельник, 13.09.2010, 15:50 | Сообщение # 6
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Quote (ninth)
На данный момент, видимо, автошейдер реализован только для Spotlight.

Ясно, я уж начал думать, что с железом что-то не так.

Quote (ninth)
Вообще тени - довольно сложная штука и если опыта в 3D мало, то лучше в дебри пока не лезь.

Опыта вправду маловато, если говорить о DirectX API или OpenGL API. Как я говорил уже, раньше пытался писать игры на других движках-GLScene,
"монстрячем" OGRE(нууууу очень громоздкий, но шустрый :D, я не освоил его так, чтобы писать полноценную графику) и др. Начинал, вообще, на PureBasic(среда разработки ПО со встроенным графическим, слегка кривоватым, функционалом), который использует OGRE для написания игр. И реализация отрисовки теней у всех перечисленных разумеется разная, не углубляясь в исходники движка. Всё это сбивает с толку при изучении других движков.

Quote (BVOG)
Посмотри работу стенью через шейдер в примере Shadows.

Смотрел. Если чесно, на моём железе(CoreDuo 2,66 ГГц, ASUS EN8800GTS 512 Мб, 2 Гб оперативки) вместо теней рисуется абра-кадабра какая-то, что-то вроде сэмплов(световые пятна в виде кружочков на поверхностях объектов), наверное сталкивались с таким, когда неправилно настроен GI при рендере в 3D редакторе. При этом ошибки невыдаются при запуске. Скрины не могу разместить поскольку на другом компе экспериментирую. Пока до конца не разобрался почему такая лажа с тенями, поскольку это не приоритетная задача.

На данный момент пытаюсь написать небольшую аркадную 3D игру(типа - "башенки"), изучая саму Панду. В планах сделать орудия трансформируемыми и програмируемыми, множество "нечисти" и связанных локаций, разнообразные боеприпасы к орудиям и глубокая игровая логика. М-мда-а, попахивает не небольшой, а вполне полноценной игрой со всеми вытекающими... Ну ладно, не буду о грустном, в конце концов за спиной заказчик не стоит biggrin

Когда добью хотя бы одну локацию выложу скрины. Эх-х, работа душит...

Прошу прощения за столь длинные сообщения, поскольку редко удается "выглянуть" в сеть. Вопросов на данном этапе изучения движка нет. Всё, что запланировал, пока получается. Не без помощи форумчан, конечно, за что - Спасибо.

Сообщение отредактировал Michman - Понедельник, 13.09.2010, 15:57
 
BVOGДата: Понедельник, 13.09.2010, 16:38 | Сообщение # 7
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Quote (Michman)
Смотрел. Если чесно, на моём железе(CoreDuo 2,66 ГГц, ASUS EN8800GTS 512 Мб, 2 Гб оперативки) вместо теней рисуется абра-кадабра какая-то

В принципе, уменя таже проблема на некоторых компах. OpenGL может не идти некоторых видекартах. Попробуй в Config-е изменить opengl на directx. А можешь переписать шейдер cg)


Skype: thebvog
 
MichmanДата: Понедельник, 13.09.2010, 22:55 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Quote (BVOG)
Попробуй в Config-е изменить opengl на directx.

Попробуем.

Я здесь поковырял примерчик Tut-Disco-Lights и нашел весьма интересную вещь. Оказывается для отображения теней от ИС DirectiоnalLight шейдер
необязателен(посторонний). Если интересно, то поотключайте ИС Spotlight, AmbientLight и включите тени в том примере. DirectionalLight и PointLight(в дальнейшем просто DL и PL) оставьте включёнными. Возможно, что бы тени рисовались придётся выключить и снова включить DL. Вуа-ля, тени рисуются и именно от DL, а не от PL, это доказуемо уменьшением или увеличением яркости DL.

Вообщем, смысл заключается в том, что при создании источника света DL создается некий контейнер, в границах которого идёт отображение теней
от объектов, за пределами контейнера объекты не отбрасывают тени. Этот контейнер виден в Tut-Disco-Light, если покрутите камеру.

Есть одно "но" - это неудобство связанное с векторами направления как самого источника света, так и этого контейнера, поскольку напрвление тени отбрасываемые объектом связано с напрвлением этого контейнера. Это значит, если не согласовать напрвления контейнера и ИС DL, то, например, осветив объект по оси X, обьект отбросит тени куда-нибудь по оси Y.

Второе, одного контейнера оказалось недостаточно для теней. Необходимо ещё и включить PL. И местоположение этого PL должно быть внутри контейнера. Да, вот такя вот хрень получается!!!. Но PL можно отключить, назначив в цвет ИС - "черный", если он не нужен.

Более опытных прошу не "есть" меня, что нашел, тем и делюсь. Может кому и пригодится.

Вот фрагмент кода.

Code

self.directionalLight = render.attachNewNode(DirectionalLight("directionalLight"))
self.directionalLight.node().setColor(Vec4(1, 1, 1, 1))
self.directionalLight.node().setScene(render)        
self.directionalLight.node().setDirection(Vec3(0, 1, 0))      
self.directionalLight.setZ(10)
self.directionalLight.setY(100)        
dlens = self.directionalLight.node().getLens()
dlens.setFilmSize(1000, 1000)
dlens.setNearFar(0, 100)
self.directionalLight.node().showFrustum()
self.pointLight = render.attachNewNode(PointLight("pointLight"))
self.pointLight.setY(0)
self.pointLight.node().setColor(Vec4(0,0,0, 1))
self.directionalLight.node().setShadowCaster(True)
render.setLight(self.directionalLight)
render.setLight(self.pointLight)

Проверьте код пред тем как копи-пастить.

Вообщем, в приведенном коде объект будет освещен вдоль оси Y, поэтому плоскость, принимающая тени, должна быть перпендикулярна Y.

Короче говоря, как ко всему этому относиться пока не знаю. Что это? Сыроватость движка в работе с тенями? Или разработчики так и задумали? Если так задумали, то это явный промах, жутко неудобно, особенно если надо плавно изменить время суток в игре, а без теней от DL этот эффект теряет смысл.

 
ninthДата: Вторник, 14.09.2010, 09:02 | Сообщение # 9
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
Quote (Michman)
вместо теней рисуется абра-кадабра какая-то

Обнови дрова, у меня 8600 - всё нормально и под виндой и под линухом. Включение DX скорее всего не спасёт, под ним в панде вообще шейдеры мало работоспособны, т.к. панда в основном на OGL ориентирована.

Quote (Michman)
Оказывается для отображения теней от ИС DirectiоnalLight шейдер необязателен(посторонний)

Шейдер используется в любом случае, просто setShadowCaster генерирует его автоматически.
Во избежание дальнейших заблуждений попробую объяснить как работает тень в панде.
Вообще используется несколько техник построения динамических теней, все имеют свои плюсы и минусы. Можно погуглить если интересует общая теория, я когда-то натыкался на развёрнутую статью по этому поводу.
В панде используется Shadow Mapping - суть в том что на позицию источника света помещается специальная камера, которая рендерит сцену с позиции источника в текстурку (depth map), только в текстуру записывается не нормальный цвет, а глубина сцены - расстояние от камеры (источника) до пикселя. После этого при рендеринге из обычной камеры повторно считаются расстояния от источника до точек, которые видит уже нормальная камера и сравнивается с тем, что было записано в depth map. Если расстояние больше, значит точка в тени.
Отсюда следуют пара выводов:
1. В принципе, на источники света в обычном понимании нам параллельно т.к. их роль выполняют эти самые специальные камеры и чтобы переместить источник, т.е. чтобы тени падали в другую сторону, надо перемещать камеру.
2. Понятно почему пока не реализован точечный источник - камера смотрит только в одном направлении. Для реализации Точечного источника потребуется рендерить во все стороны от источника. Как правило рендерится кубическая карта, а это 6 проходов рендера и падение производительности - не самый лучший вариант в плане оптимизации. Есть ещё варианты с параболическими картами - рендер двух полусфер, но там надо бороться с искажениями.
 
BVOGДата: Вторник, 14.09.2010, 14:43 | Сообщение # 10
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Quote (ninth)
Обнови дрова, у меня 8600 - всё нормально и под виндой и под линухом. Включение DX скорее всего не спасёт, под ним в панде вообще шейдеры мало работоспособны, т.к. панда в основном на OGL ориентирована.

Если честно, на моей видеокарте ATI Direct прёт с большим FPS и нормальным качеством, а OpenGL not supported.


Skype: thebvog
 
ninthДата: Вторник, 14.09.2010, 15:10 | Сообщение # 11
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
Хм. у брата ATI - OGL работает. Насчёт скорости - да dx на ati быстрее, но шейдеры в панде только ogl
 
MichmanДата: Вторник, 14.09.2010, 15:24 | Сообщение # 12
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Quote (ninth)
Обнови дрова, у меня 8600 - всё нормально и под виндой и под линухом

Стоят последние дрова на видюхе. У меня видюха в принципе игровая, а на счёт поддержки шейдеров под OpenGL не уверен. Вообще-то в работе
видюхи нареканий нет. Ни с одной игрой, в которые доводилось играть(от классического Fallout до навороченного Crysis) проблем не было.

Quote (ninth)
В панде используется Shadow Mapping

Знаком не понаслышке и про прожорливость данного метода тоже.

Quote (ninth)
Шейдер используется в любом случае, просто setShadowCaster генерирует его автоматически.

Под словом "постороний" я имел в виду: подключать какой-либо, специально написанный, шейдер связанного с тенями не надо. В куске кода указан setShadowCaster, но не указан setShaderAuto в надежде, что и так понятно - идет речь об автоматическом создании шейдера.

Спасибо, ninth, за замечания и советы! Поддержка с со стороны опытных крайне необходима!
Надо будет заглянуть на буржуйский форум на досуге по воросу теней.

 
BVOGДата: Вторник, 14.09.2010, 17:05 | Сообщение # 13
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Есть идея как сделать тень, чрез самую... но может работать. Делаешь профиль объекта как модель, делаешь прозрачность от 35-75%. Затем на него накладываешь затухание о стороны ближайшей к объекту к концу.

Это так в голову взбрело.
Прикрепления: 5504795.png(23Kb)


Skype: thebvog
 
MichmanДата: Вторник, 14.09.2010, 18:09 | Сообщение # 14
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Это хорошо, если обьект и ИС статичны. А если их трансформировать, то возникает масса проблем.
 
BVOGДата: Вторник, 14.09.2010, 21:01 | Сообщение # 15
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Можно ещё что-нибудь придумать, например динамическое редактирование модели.

Skype: thebvog
 
Форум Panda3D - по русски » Panda3D » Для начинающих » Вопросы, вопросы, вопросы... (Вращение, перемещение и т.д.)
Страница 1 из 712367»
Поиск: