камера для космосима
|
|
unkier | Дата: Суббота, 23.10.2010, 17:36 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 2
Статус: Offline
| поделитесь куском кода люди добрые. нужна камера для космосима. в субботу как то не хочется читать про вектора и кватернионы, хочется готового.
|
|
| |
ninth | Дата: Понедельник, 25.10.2010, 22:20 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Эм, вопрос недостаточно полный, чтобы дать готовый код. Каков будет вид - от первого лица (из кабины) или от третьего (со стороны). Каково управление? Камера обычно тесно связана с управлением.
|
|
| |
unkier | Дата: Вторник, 26.10.2010, 06:38 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 2
Статус: Offline
| да, я именно управление и имел ввиду. откуда вид не суть важно. вот тупейный пример (неправильный) того что нужно примерно. Code def inputTask(self, task): if not base.mouseWatcherNode.hasMouse(): return task.cont x=base.mouseWatcherNode.getMouseX() y=base.mouseWatcherNode.getMouseY() hpr = camera.getHpr() hpr.addX(-x) hpr.addY(y) camera.setHpr(hpr) return task.cont
|
|
| |
ninth | Дата: Вторник, 26.10.2010, 16:06 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Очень даже важен и вид и управление - приведу несколько примеров. 1. вид из кабины, управление без вращения вдоль продольной оси - камера будет фиксированной с полным повторением положения корабля, в управлении можно обойтись лишь мышью для поворотов и парой кнопок для увеличения и уменьшения тяги. 2. вид из кабины, управление с вращением вдоль продольной оси - камера будет фиксированной с полным повторением положения корабля, управление либо полностью с клавиатуры, либо джойстиком, можно и мышью, но придётся всё равно часть функций переносить на клавиатуру. 3. вид от третьего лица, управление не важно - камера фиксирована в горизонтальной плоскости, в остальном следует за кораблём, возможно сглаживание. 4. стратегический вид (наподобие звёздных волков), управление мышью с выбором точки назначения - камера свободная, в управлении потребуется как-то учесть "глубину". 5. вид а-ля космические рейнджеры, управление и перемещения фиксированы в одной плоскости - камера фиксирована, либо следует за кораблём, управление point and click ... ещё куча разных вариантов ... Для всех них код будет отличаться - где-то сильно, где-то не очень.
|
|
| |
unkier | Дата: Среда, 27.10.2010, 09:13 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 2
Статус: Offline
| ну пункты 4,5 это не космосим как я понимаю. про пункт 3 непонял, пример игрушки есть с таким управлением ? 1,2 это то что нужно. номер 1 былобы здорово для начала. в общем можно взять freelancer для примера. заранее благодарен.
|
|
| |
ninth | Дата: Четверг, 28.10.2010, 10:38 | Сообщение # 6 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Космосим - понятие растяжимое. Допустим, 4 пункт действительно больше стратегия, но 5 - вполне себе космосим, а тому кто скажет, что это аркада, я отвечу, что например названный тобой фрилансер - не менее аркада, т.к. физика, работающая в космосе, абсолютно не учитывается, а какая разница откуда ты смотришь на корабль, если вся симуляция заключается в космическом "антураже". 3 пункт, если память не изменяет я видел в какой-то из игрушек старварсовкой серии. Впрочем это уже "религиозные" споры. я понял что ты имел ввиду - вот набросок кода: Code #! /usr/bin/env python # -*- coding: utf_8 -*- from pandac.PandaModules import * loadPrcFileData("editor-startup", "sync-video #f") loadPrcFileData("editor-startup", "show-frame-rate-meter #t") from direct.directbase import DirectStart from random import randrange
# подобие окружения, чтобы видеть, что камера движется for i in xrange(100): tmp = loader.loadModel('box') tmp.reparentTo(render) tmp.setPos(randrange(-50,50),randrange(-50,50),randrange(-50,50)) # отключение дефолтного управления base.disableMouse() # создание "корабля" root = NodePath('avatar root') root.reparentTo(render) tmp = loader.loadModel('box') tmp.setColor(1,0,0) tmp.reparentTo(root) base.camera.reparentTo(root) base.camera.setPos(0,-15,10) base.camera. lookAt(root)
# непосредственно процедура управления def controlTask(task): if base.mouseWatcherNode.hasMouse(): mpos = base.mouseWatcherNode.getMouse()*globalClock.getDt()*50 root.setHpr(root,-mpos[0],mpos[1],0) return task.cont
taskMgr.add(controlTask,'control task')
run()
|
|
| |
unkier | Дата: Четверг, 28.10.2010, 19:23 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 2
Статус: Offline
| Спасибо ! то что нужно. как всегда всё оказалось просто
|
|
| |
k0t | Дата: Четверг, 29.11.2012, 15:30 | Сообщение # 8 |
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
| Превед =) Давно тут не был. Ninth, у тебя под рукой нет случайно примера для управления спейсшипом с нормальной физикой? (т.е. не аркадной)
|
|
| |
ninth | Дата: Пятница, 30.11.2012, 10:21 | Сообщение # 9 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Нет, если честно ) На самом деле универсальной физики для космосима, имхо, быть не может. Здесь зависит от гипотетических технологий, применяемых в гипотетическом будущем - то-ли это посадка на луну (да-да, была такая игрушка, ещё на спектруме), то-ли космические бои истребителей возле кораблей, которые создают "поле эффекта массы" и являются для истребителя локальными "планетами", то-ли это полёт в открытом космосе вдали от объектов, чьё притяжение будет учитываться. Ну плюс система двигателей. Помню давно была забавная игрушка про летающую над поверхностью планеты платформу - физика была адская, без джойстика играть нереально ) А, ну да ещё могут быть всякие системы стабилизации и т.п.
|
|
| |
k0t | Дата: Пятница, 30.11.2012, 11:56 | Сообщение # 10 |
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
| Ну, мне особые сложности не нужны - минимальная физика без учета гравитации больших объектов (действие в сферическом вакууме, в астероидном поле) На самом деле управление уже сделал минимальное. Теперь довожу его до удобного
Я просто хотел полетать в астероидном поле, но не нашел подходящей игрушки. Сейчас решаю две проблемы: управление и производительность.
|
|
| |
ninth | Дата: Пятница, 30.11.2012, 12:45 | Сообщение # 11 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Ну в этом случае по-идее физика минимальна - вектор движения + вектор вращающего момента. Вращать для упрощения относительно центра массы. Вектор вращения может и скорее всего должен компенсироваться маневровыми движками - иначе игрок никогда не сможет прекратить кувыркание корабля. При столкновении смотрим нормаль точки касания, и считаем импульсы тел (масса*скорость). Хотя можно взять и уеб использовать какой-нить физ движок (ODE, Bullet), выкрутив гравитацию на 0
з.ы. я здесь с ODE летающим телом игрался, правда там с гравитацией http://panda3d.org.ru/forum/6-99-3
|
|
| |
k0t | Дата: Пятница, 30.11.2012, 12:52 | Сообщение # 12 |
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
| Боюсь, с ODE будет ФПС низкое слишком. Сейчас в первом приближении полуфизика есть... Вопрос уже в том, как оптимизировать астероидное поле ) Если бы делал серьезный проект, то, конечно, взял бы тот же Огр... Инстансы не помогают, т.к. там оптимизация идет на анимацию, которой нет у астероидов...
|
|
| |
ninth | Дата: Пятница, 30.11.2012, 13:02 | Сообщение # 13 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Сколько примерно астероидов в поле?
|
|
| |
k0t | Дата: Пятница, 30.11.2012, 13:53 | Сообщение # 14 |
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
| Сейчас 343 - и тормозов почти нет в window-mode, 1280* 720, но пока нет и коллизий хотелось бы, конечно,гораздо больше. Буду делать локации, скорее всего, с подгрузкой realtime. Астероиды с 4 степенями lod, но достаточно хорошее какчество должно быть в любом разе.
|
|
| |
ninth | Дата: Пятница, 30.11.2012, 14:01 | Сообщение # 15 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| После примерно 300 независимых объектов производительность начнёт резко падать. Тут проблема из того-же разряда, что и в манкрафт-подобных картах с кучей кубиков - отдельные группы объектов придётся объединять, когда они далеко от игрока и разбивать обратно для взаимодействия, когда игрок будет рядом. Т.е. делить твою карту на сектора, чтобы отсекать группы с которыми в принципе не будет происходить взаимодействие, соответственно делать их неактивными.
Поищи по RigidBodyCombiner
|
|
| |