Вопросы, вопросы, вопросы...
|
|
Michman | Дата: Понедельник, 30.08.2010, 21:49 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
| Питон и соответственно Панду стал изучать совсем недавно. Небольшой опыт в програмировании есть (Basic, Pascal, немного С++). Писал игры, вернее пытался писать, что-то получалось что-то нет. Скорее получались заготовки нежели игры. С ООП не очень дружу, с его классами, обьектами, пространством имен и т.п., вообщем, мучаюсь. Мне ближе процедурное програмирование. Так вот, у меня возникла масса вопросов по Панде, возможно они уже задавались и ответы где-нибудь на форуме имеются, ненашел ответов. 1. Как задается вращение объекта в сцене по заданной оси? Например, имеется куб и его необходимо повернуть на определенный угол по оси Х. 2. Какое количество экземпляров taskMgr можно создавать одновременно, есть ли ограничения? 3. Можно ли изменять параметр pos в OnscreenText при выполнении програмы и как?, если это возможно. Например, создать эффект бегущей строки. Думаю пока хватит с вопросами. В дальнейшем ещё несколько подкину. Буду весьма признателен за более развернутый ответ, за неразвернутый тоже P.S. Немного оффтопа. Читал статью на сайте про SPE и интеграцию оного в панду. Я нашел более простой вариант. Скачиваем редактор UliPad 4.0 и ставим его... по умолчанию ;). Все пути к файлу запуска програм прописываются автоматически. У редактора имеется свой PythonShell. Больше ничего ненужно делать. Запускаете UliPad, выбираете шаблон Python из меню File->New и всё, набирайте код и запускайте. Во время первого запуска выскочит окно выбора: запускать в консоли или в окне. Здесь выбираем в окне, хотя и в режиме консоли тоже работает, просто зачем нам консоль под пандовским окном . Добавлено (30.08.2010, 21:49) --------------------------------------------- С вращением разобрался. hpr методы. А по остальным вопросам пока глухо.
|
|
| |
ninth | Дата: Среда, 01.09.2010, 04:31 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 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
Группа: Администраторы
Сообщений: 1582
Награды: 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 игру(типа - "башенки"), изучая саму Панду. В планах сделать орудия трансформируемыми и програмируемыми, множество "нечисти" и связанных локаций, разнообразные боеприпасы к орудиям и глубокая игровая логика. М-мда-а, попахивает не небольшой, а вполне полноценной игрой со всеми вытекающими... Ну ладно, не буду о грустном, в конце концов за спиной заказчик не стоит Когда добью хотя бы одну локацию выложу скрины. Эх-х, работа душит... Прошу прощения за столь длинные сообщения, поскольку редко удается "выглянуть" в сеть. Вопросов на данном этапе изучения движка нет. Всё, что запланировал, пока получается. Не без помощи форумчан, конечно, за что - Спасибо.
Сообщение отредактировал 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
Группа: Администраторы
Сообщений: 1582
Награды: 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
Группа: Администраторы
Сообщений: 1582
Награды: 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%. Затем на него накладываешь затухание о стороны ближайшей к объекту к концу. Это так в голову взбрело.
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
|
|
| |