[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 6 из 7
  • «
  • 1
  • 2
  • 4
  • 5
  • 6
  • 7
  • »
Форум Panda3D - по русски » Panda3D » Для начинающих » Вопросы, вопросы, вопросы... (Вращение, перемещение и т.д.)
Вопросы, вопросы, вопросы...
MichmanДата: Пятница, 21.01.2011, 16:15 | Сообщение # 76
Лейтенант
Группа: Пользователи
Сообщений: 44
Награды: 0
Репутация: 0
Статус: Offline
Спасибо, ninth, за ценные замечания и советы, поскольку дельного совета от тебя получу гораздо быстрее, чем докапаюсь до истины сам или найду её в нете, нередко всё приходилось делать самому и помощи ждать было не от кого, а тут такая оперативность! На данный момент пытаюсь посмотреть как Панда реализует подгрузку моделей в Runtime, поскольку планирую создавать большие пространства и не хотелось бы смотреть на экран загрузки каждой локации несколько минут.

Сообщение отредактировал Michman - Пятница, 21.01.2011, 16:23
 
ninthДата: Вторник, 25.01.2011, 08:19 | Сообщение # 77
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Особых изысков я в этом плане не знаю. Единственное - панда проверяет есть ли модель уже в памяти и если есть, то грузит не с диска, а копирует уже загруженную.
 
fateДата: Четверг, 17.02.2011, 23:59 | Сообщение # 78
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
а в панде есть скайбоксы и скайдомы? а то просто я их не нашел в ней
 
ninthДата: Воскресенье, 20.02.2011, 17:59 | Сообщение # 79
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Это всего-лишь бокс или сфера/полусфера с инвертированными внутрь нормалями. Легко делается в любом редакторе, так что в данном случае выделять отдельный класс нет смысла. Единственное - для неё надо будет отключить освещение. К тому же поведение неба может быть весьма специфичным для каждого конкретного случая.
 
BVOGДата: Суббота, 12.03.2011, 13:04 | Сообщение # 80
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
Встретил в инете вариацию скайбокса, где на его гранях вместо статичной текстуры - видео или анимация, например, облаков.

Skype: thebvog
 
fateДата: Четверг, 17.03.2011, 23:18 | Сообщение # 81
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
а как можно инвертировать нормали внутрь в блендере?
 
ninthДата: Четверг, 17.03.2011, 23:34 | Сообщение # 82
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline

Только экспортируй уже с текстурами, а то можешь не заметить разницы - симметричный однотонный незатенённый объект выглядит одинаково как с обычными нормалями так и с инвертированными.

Прикрепления: 7686275.jpg (71.1 Kb)
 
DancingOxДата: Среда, 08.02.2012, 18:28 | Сообщение # 83
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Подскажите нубу пожалуйста верный способ процедурно создать затекстуренный треульгольник/четрёхугольник с заданными вершинами?
Как вариант, изменить геометрию уже существующего примитива.


Сообщение отредактировал DancingOx - Среда, 08.02.2012, 18:31
 
serg-kkzДата: Среда, 08.02.2012, 18:50 | Сообщение # 84
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Загляни сюда по поводу создания примитивов, и сюда для изменения. А так же посмотри Demomaster там есть много примеров. И конкретней поясни по изменению геометрии, размер или еще что-то. Вопросы задавай в указанных темах.

ООП  -  
 
DancingOxДата: Пятница, 10.02.2012, 17:00 | Сообщение # 85
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Изучив код в теме, смог ответить на свой недавний вопрос.
Получился такой скрипт, который рисует в сцене один-единственный четырёхугольник:
Code

from pandac.PandaModules import *    
loadPrcFileData("editor-startup", "show-frame-rate-meter #t")     
from direct.directbase import DirectStart           
    
from direct.gui.OnscreenText import OnscreenText       
from direct.gui.DirectGui import *    

def Square(pos0, pos1, pos2, pos3):    
      
     square_path = NodePath('triangle_path')    
     square_node = GeomNode('triangle_node')    
     square_path.attachNewNode(square_node)
         
     gvd = GeomVertexData('gvd', GeomVertexFormat.getV3(), Geom.UHStatic)    
     geom = Geom(gvd)    
     gvw = GeomVertexWriter(gvd, 'vertex')    
     square_node.addGeom(geom)    
     prim = GeomTriangles(Geom.UHStatic)    
      
     gvw.addData3f(VBase3(Vec3(pos0)))
     gvw.addData3f(VBase3(Vec3(pos1)))
     gvw.addData3f(VBase3(Vec3(pos2)))
     gvw.addData3f(VBase3(Vec3(pos3)))    
        
     prim.addVertices(0, 1, 3)
     prim.addVertices(3, 2, 0)    
      
     prim.closePrimitive()    
     geom.addPrimitive(prim)    
       
     return square_path    

    
Sq = Square((0,0,0), (2,0,0), (0,2,0), (2,2,0))    
Sq.reparentTo(render)    
       
#tex = loader.loadTexture('1.png')     
#Sq.setTexture(tex)
Sq.setRenderModeWireframe()  

render.analyze()     
    
run()  

Однако, остаётся вопрос - как задать UV-развёртку для наложения текстуры на этот полигон?
Пытался распотрошить код ShapeGenerator с сайта NoUserOrg, создающий геометрические примитивы, но пока что не смог разобраться. Объясните, пожалуйста, кто понимает.
 
serg-kkzДата: Пятница, 10.02.2012, 17:31 | Сообщение # 86
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Вот тебе ссылка на пост в одной интересной ветке, думаю Ты для себя найдешь много полезного.

И картинка для понимания.



ООП  -  

Сообщение отредактировал serg-kkz - Пятница, 10.02.2012, 17:34
 
ninthДата: Пятница, 10.02.2012, 17:40 | Сообщение # 87
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Если коротко, то у тебя используется формат вершин без техтурных координат getV3() с текстурными кооординатами это будет getV3t2(). При добавлении врешин тебе надо будет сначала добавлять координату вершины, затем текстурную координату для этой вершины
gvw.addData3f(x, y, z)
gvw.addData2f(u, v)

А так - да в ссылке serg-kkz есть рабочие примеры с текстурированием.
 
DancingOxДата: Пятница, 10.02.2012, 17:54 | Сообщение # 88
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Во, то, что надо! Спасибо, буду пробовать. biggrin
Между тем, я таки расковырял код ShapeGenerator и вывел на экран затекстуренный треугольник:
Code

from pandac.PandaModules import *
from direct.directbase import DirectStart

class Geometry(NodePath):
     
     def __init__(self):
         NodePath.__init__(self, 'Geometry')
    
     def addTriangle(self):
      
         format = GeomVertexFormat.getV3n3t2()
         vdata = GeomVertexData('name', format, Geom.UHStatic)
         vertex = GeomVertexWriter(vdata, 'vertex')
         normal = GeomVertexWriter(vdata, 'normal')
         texcoord = GeomVertexWriter(vdata, 'texcoord')
         prim = GeomTriangles(Geom.UHStatic)
        
         v0 = (0,0,0)
         v1 = (2,0,0)
         v2 = (0,2,0)

         uv0 = (0,0)
         uv1 = (0,1)
         uv2 = (1,0)
          
         n0 = (0,0,0)
         n1 = (2,0,0)
         n2 = (0,2,0)
       
         vertex.addData3f(*v0)
         normal.addData3f(*n0)
         texcoord.addData2f(*uv0)
        
         vertex.addData3f(*v1)
         normal.addData3f(*n1)
         texcoord.addData2f(*uv1)
          
         vertex.addData3f(*v2)
         normal.addData3f(*n2)
         texcoord.addData2f(*uv2)
          
         prim.addVertex(0)
         prim.addVertex(1)
         prim.addVertex(2)
         prim.closePrimitive()
            
         geom = Geom(vdata)
         geom.addPrimitive(prim)
          
         node = GeomNode('gnode')
         node.addGeom(geom)
          
         nodePath = self.attachNewNode(node)
         return nodePath

Ex = Geometry()
Ex_path = Ex.addTriangle()

tex = loader.loadTexture('testTex.png')

Ex_path.reparentTo(render)
Ex_path.setTexture(tex)

run()
 
ninthДата: Пятница, 10.02.2012, 20:46 | Сообщение # 89
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Зачем всё это, если не секрет? Панда - высокоуровневый движок, так что, как правило, ручной доступ к геометрии не требуется.
 
serg-kkzДата: Пятница, 10.02.2012, 20:55 | Сообщение # 90
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Quote (ninth)
Зачем всё это, если не секрет?

Предположу убийцу миникрафта замышляет. happy


ООП  -  
 
Форум Panda3D - по русски » Panda3D » Для начинающих » Вопросы, вопросы, вопросы... (Вращение, перемещение и т.д.)
  • Страница 6 из 7
  • «
  • 1
  • 2
  • 4
  • 5
  • 6
  • 7
  • »
Поиск: