[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум Panda3D - по русски » Panda3D » Общие вопросы » Вопросы
Вопросы
BVOGДата: Четверг, 19.11.2009, 18:43 | Сообщение # 376
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Скоро будет.

Skype: thebvog
 
k0tДата: Пятница, 20.11.2009, 03:08 | Сообщение # 377
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
2BVOG, спасибо, жду.
2ninth Ага. Еще вопрос - как можно узнать, какое соединение выдало данное сообщение? Т.е. я вполне могу послать айдишник со стороны клиента, но как по нему найти нужное соединение... На данном этапе мне хватает броадкаста, правда, но через месяц-другой понадобится нормальная рассылка "не для всех" =) Просто если в sendData есть в self.cWriter.send(myPyDatagram, con) собсна "con", то бишь рассылка по адресу, но как этот адрес выбить из getData?

т.е. есть клиет Client, есть сервак Server, Client шлет серваку пламенное послание, как от сервера отправить послание именно ему?
В принципе, можно сделать через круто заверченную задницу, и сделать activeConnections не list'ом, а кортежем с простым идентификатором, но думаю есть разумный способ ))

 
ninthДата: Пятница, 20.11.2009, 09:26 | Сообщение # 378
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Кусок моей задачи для обработки входящих данных
Code

     def reciveDataTask(self,task):
         fulldata=self.nServer.getData()     #получаем данные
         if len(fulldata)>0:                 #если что-то получили
             for i in xrange(len(fulldata)): #проходим по списку полученых данных
                 print fulldata[i]
                 conn,cmddata=fulldata[i]    #разделяем на инфу о соединении и собственно данные
                 cmd,data=cmddata            #разделяем данные на команду и параметры команды
                 uid=self.nServer.getConnParam(conn,'uid') # получаем идентификатор пользователя по соединению
                 if uid>=0:                  #обрабатываем команды
                 .......................................................
                 .........................
                 ............
         return task.cont
 
k0tДата: Понедельник, 07.12.2009, 02:49 | Сообщение # 379
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
О. Идею поняль, спасибо большое.

Добавлено (07.12.2009, 02:49)
---------------------------------------------
Что-то я затупил =_= Как найти ширину экрана? В пикселях, в смысле... А то с GUI лажа выходит )

 
ninthДата: Вторник, 08.12.2009, 01:41 | Сообщение # 380
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
В пикселях base.win.getXSize() base.win.getYSize()
А лажа скорее всего потому что не учитываешь соотношение сторон. Сам недавно с этим ковырялся
что-то типа этого:
frame = DirectFrame(frameSize = (-0.7*base.getAspectRatio(),1.0*base.getAspectRatio(),-1.0,-0.8), frameColor = (0.5,0.5,0.5,0.7))
обрати внимание на base.getAspectRatio() это и есть соотношение сторон, оно необходимо т.к. в директ гуи размеры считаются не в пикселях а от -1 до 1
при этом ширину нужно корректировать при помощи этого параметра как показано выше.

В данном конкретном примере у меня получается серая панелька справа-внизу экрана. На скрине видно.

Прикрепления: 1236141.jpg (89.3 Kb)
 
k0tДата: Вторник, 08.12.2009, 06:56 | Сообщение # 381
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
О, спасибо большое. Да, я в курсе что от -1 до +1, но не мог найти про aspect ratio.
Кстати, а над чем ты сейчас работаешь? Что это за скрин с мультяшной графикой? )

+вопрос, так, на засыпку: намного ли больше будет жрать сценка типа "полигон+полигон+полигон" отдельными мешами, чем та же сценка одним мешем, но тем же количеством полигонов? У меня в разработке пошаговая гексостратежка небольшая, сейчас поле генерится из отдельных мешей, реализовать так было не слишком сложно... Думаю сейчас, стоит еще раз все переделывать, чтобы попробовать сделать поле одним мешем: гемора там предчувствую много.

 
ninthДата: Среда, 09.12.2009, 09:08 | Сообщение # 382
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Это квест/аркада... будущая... возможно ))

Жрать будет больше, но на практике не проверял насколько.
Обуславливается следующим: 1-е - будет больше вершин. 2-е матрица трансформации будет рассчитываться для каждого меша отдельно.
Со вторым можно бороться, используя flattenStrong(), но это имеет побочный эффект - положение твоих полигонов будет определяться как (0,0,0), хотя визуально они останутся на месте. Т.е. flattenStrong() сразу применяет все необходимые трансформации к вершинам и каждый раз при рендере считать их заново не потребуется.
А зачем переделывать? Есть проблемы с производительностью?

з.ы. я, когда мне потребовались хексы вообще с этим не заморачивался - делал обычный хейтфилд, а поверхность размечал линиями LineNodePath. Скрин прилагаю.

Прикрепления: 3512804.jpg (7.7 Kb)
 
BVOGДата: Среда, 09.12.2009, 13:33 | Сообщение # 383
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
А что ты использовал для создания освещения, как от солнца (на верхнем скриншоте про гнома)?

Skype: thebvog
 
ninthДата: Среда, 09.12.2009, 13:45 | Сообщение # 384
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Стандартный пример с тенями ) Кажется немного только шейдер подправил для уменьшения контраста самой тени, но точно не помню, возможно и не изменённый используется.
 
k0tДата: Среда, 09.12.2009, 15:29 | Сообщение # 385
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
Мне с такими гексами удобнее )
Насчет вершин я в курсе, но, с другой стороны, так куда удобней делать карту и т.д... Проще ) Плюс, у меня каждый гекс - какой-то рельеф, в смысле поверхность, по которой разная скорость передвижения.
Примерный скрин щас выложу... Чуть старый, но смысл не поменялся:
Прикрепления: 0869572.jpg (174.1 Kb)
 
BVOGДата: Среда, 09.12.2009, 15:30 | Сообщение # 386
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Который Shadows.
И там ещё надо изменить тип источника света на Directional Light.


Skype: thebvog
 
ninthДата: Среда, 09.12.2009, 16:27 | Сообщение # 387
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
k0t, ясн, ну, по-идее не должна очень сильно производительность падать.. пропробуй флаттенСтронг.
BVOG, да, он. Источник света там побоку вроде, ибо освещение рассчитывается на основе картинки построенной второй камерой, которая и считается источником.
 
BVOGДата: Четверг, 10.12.2009, 13:14 | Сообщение # 388
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Я не помню, какой из параметров влияет на контраст.

Skype: thebvog
 
k0tДата: Четверг, 10.12.2009, 19:07 | Сообщение # 389
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
замучался =_= Битый день пытаюсь разобраться...
Есть root, nodePath.
Почему, когда я беру root.getHpr() - все цифры по нулям (по крайней мере, при выводе через принт)? При этом сама моделька, которая ходит под рутом, прекрасно поворачивается (через root)... Но при этом все равно пишет, что рут не повернут =_+

Добавлено (10.12.2009, 19:07)
---------------------------------------------
чтобы не выглядеть (ну хотя как знать) совсем идиотом, спрошу точнее...

код, из детсада:

Code

   print '0% '+str(self.root.getH())
   if len(self.waypoints)>0:
    print '1% '+str(self.root.getH())
    v=self.waypoints[0]
    v.setZ(self.root.getZ())
    v=Vec3(v-self.root.getPos()) # ненормализованный вектор направления.  
    if v.length()<0.3:  # если длина мелкая, удалить
     del self.waypoints[0]
    else:
     v.normalize() # нормализованный вектор направления.  
     v2=Vec3(self.root.getQuat().getForward())
     v2.normalize()
     a=v2.angleDeg(v) # угол между векторами.  
     print '2% '+str(self.root.getH())
     if a>5:
      v3=self.root.getRelativeVector(render,v)
      if v3.getX()>0: a=-a
      self.root.setH(self.root.getH()+a*0.25)
      print '3% '+str(self.root.getH())
     else:
      self.root.setPos(self.root,0,0.2,0)
    if self.state is not 'walk':
     self.animInterval=LerpAnimInterval(self.model, 0.2, 'stand', 'walk')
     self.animInterval.start()
     self.state='walk'
   elif self.state is not 'stand':
    self.animInterval=LerpAnimInterval(self.model, 0.3, 'walk', 'stand')
    self.animInterval.start()
    self.state='stand'

Поставлены принты, 0-4.
У модели есть вэйпойнты. Т.е. робот идет куда-то вдаль, безостановочно.
Вывод:

Quote

0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 0.0
0% 70.0814819336
1% 70.0814819336
2% 70.0814819336

Ну иногда 3%, если поворачивает. Вопрос: почему по нулям, и откуда резко берется настоящий градус? Почему при том, что модель движется, выполнение кода, по идее, не доходит до 1%, т.е. self.root.setPos(self.root,0,0.2,0) - не выполняется? Точнее, выполняется, но крайне редко. Но главное, какого фига сбрасывается поворот рута? В других местах кода в принципе это не происходит.

 
ninthДата: Четверг, 10.12.2009, 23:15 | Сообщение # 390
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
BVOG, я в самом шэйдере изменял формулу для расчёта затенения.
k0t, а ты нигде ничего не менял? Попробуй этот код на чистом исходнике из деццкого сада - я в файлах последний выкидывал. По крайней мере на нём я ничего подобного не обнаружил - нормально выводится угол.
 
Форум Panda3D - по русски » Panda3D » Общие вопросы » Вопросы
Поиск: