[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Форум Panda3D - по русски » Panda3D » Для начинающих » камера для космосима
камера для космосима
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
Спасибо ! то что нужно. как всегда всё оказалось просто smile
 
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
Ну, мне особые сложности не нужны - минимальная физика без учета гравитации больших объектов (действие в сферическом вакууме, в астероидном поле)
На самом деле управление уже сделал минимальное. Теперь довожу его до удобного smile

Я просто хотел полетать в астероидном поле, но не нашел подходящей игрушки. Сейчас решаю две проблемы: управление и производительность.
 
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
 
Форум Panda3D - по русски » Panda3D » Для начинающих » камера для космосима
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: