Вопросы, вопросы, вопросы...
|
|
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
| Только экспортируй уже с текстурами, а то можешь не заметить разницы - симметричный однотонный незатенённый объект выглядит одинаково как с обычными нормалями так и с инвертированными.
|
|
| |
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
| Во, то, что надо! Спасибо, буду пробовать. Между тем, я таки расковырял код 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) Зачем всё это, если не секрет? Предположу убийцу миникрафта замышляет.
ООП -
|
|
| |