forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Проблема с тримешем. (http://forum.boolean.name/showthread.php?t=11676)

St.AnGer 07.01.2010 20:16

Проблема с тримешем.
 
Мне нужно реализовать игровой уровень. Для этого сделал уровень в 3ds max studio 2009, экспортировал на всякий случай в разные форматы (3ds и Fbx). Гружу командой xLoadMesh. Создаю своей функцией (функция приведена ниже) Trimesh pmap. Потом создаю из полученного п-мап создаю тримеш командой pxCreateTrimeshFromPmap. Ну и прикручиваю модель к созданному тримешу.
Всё содаётся и ни на что не ругается (ни при 3ds, ни при fbx). Но... Наблюдаю следующую картину. Созданный тримеш не сталкивается вообще (!!!) ни с одним физическим объектом (эксперементировал с массами, но результат один - тримеш просто пролетает всё насквозь).
Пробовал до кучи создавать файл ещё в b3d формате. Результат тот же.


Если без Ксорса, то всё работает =(

Функция создания п-мап файла у меня такая:

Код:

Function pxBodyCreateMesh(mesh%,file_name$)
        nsurf = xCountSurfaces(mesh)-1
        nvert = 0
        nface=0
        For ns = 1 To nsurf
                Local surf = xGetSurface(mesh,ns)
                nface = nface+xCountTriangles(surf)
                nvert = nvert +xCountVertices(surf)
        Next

        fbank = CreateBank(nface*4*3)
        nf = 0
        vbank = CreateBank(nvert*4*3)
        nv = 0
        For ns = 1 To nsurf
                surf = xGetSurface(mesh,ns)
                nfv = xCountTriangles(surf)
                For nfc = 0 To nfv -1
                        PokeInt fbank,nf*12+0,xTriangleVertex(surf,nfc,0)
                        PokeInt fbank,nf*12+4,xTriangleVertex(surf,nfc,1)
                        PokeInt fbank,nf*12+8,xTriangleVertex(surf,nfc,2)
                        nf=nf+1
                Next

                nvv = xCountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,xVertexX(surf,nvc)
                        PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)
                        PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)
                        nv = nv+1
                Next
        Next
        bbb%=pxCreateTriMeshPmap(vbank, fbank, nvert, nface, file_name$, 64)
        FreeBank vbank
        FreeBank fbank
        Return bbb%
End Function

Помогите пожалуйста разобраться с ситуацией. Файл уровня состоит всего из трёх кубов, так что он очень низкодетализированый.

И ещё вопрос, но уже по физике. Что означает цифра 64 в команде pxCreateTriMeshPmap(vbank, fbank, nvert, nface, file_name$, 64) ? Пробовал ставить другие цифры (например 32), всё равно столкновений не наблюдается.

Knightmare 07.01.2010 20:20

Ответ: Проблема с тримешем.
 
Твой тримеш - гавно. Ты ничего не понимаешь в тримешах. Странно что с MAV не вылетает, тебе повезло нефигово, да.

St.AnGer 07.01.2010 20:23

Ответ: Проблема с тримешем.
 
Я и не спорю - в тримешах нихрена не смыслю. Мав не вылетал вообще на этом ниразу. Странно то, что в простом Blitz3d этот же уровень грузится и всё сталкивается как надо. А в Xors3d не робит.

Knightmare 07.01.2010 20:27

Ответ: Проблема с тримешем.
 
Цитата:

Сообщение от St.AnGer (Сообщение 132552)
Странно то, что в простом Blitz3d этот же уровень грузится и всё сталкивается как надо.

Ты врешь. Этот код не будет работать под B3D (если затереть все префиксы у команд).

St.AnGer 07.01.2010 20:32

Ответ: Проблема с тримешем.
 
Работает. Только за место nsurf = xCountSurfaces(mesh)-1 пишу на nsurf = CountSurfaces(mesh), ну и везде префиксы убираю.

Knightmare 07.01.2010 20:37

Ответ: Проблема с тримешем.
 
Цитата:

Только за место nsurf = xCountSurfaces(mesh)-1 пишу на nsurf = CountSurfaces(mesh)
Т.е. ты считаешь что после этого код идентичен? Собственно здесь и проблема. А вообще тримеш создается в 7 строк.

St.AnGer 07.01.2010 20:43

Ответ: Проблема с тримешем.
 
Цитата:

А вообще тримеш создается в 7 строк.
Код:

free= xLoadMesh(...)
VB = xGetMeshVB(free)
VB_size = xGetMeshVBSize(free)
IB = xGetMeshIB(free )
IB_size=xGetMeshIBSize(free)
in_mesh=pxCreateTriMesh(VB, IB, VB_size, IB_size, 0)

эти вот строки? Взял из примера. Их проверял, вот с ними MAV как раз вылетает. На команде pxCreateTriMesh

St.AnGer 07.01.2010 20:47

Ответ: Проблема с тримешем.
 
Ой... Проверил пример из физикса под ксорс "Trimesh_Spring". Он тоже не работает чего то =( чего то не так с физиксом у меня что ли?

EvilChaotic 07.01.2010 21:17

Ответ: Проблема с тримешем.
 
Цитата:

Функция создания п-мап файла у меня такая:
Для создания тримеша тебе не понадобится это хрень.

Попробуй:
Код:

Function CreatePxTrimesh(mesh,mass#=0)
If mesh <> 0
        Local VBs = xGetMeshVB(mesh)
        Local VB_sizes = xGetMeshVBSize(mesh)
        Local IBs = xGetMeshIB(mesh )
        Local IB_sizes=xGetMeshIBSize(mesh)
        Local Trimesh=pxCreateTriMesh(VBs, IBs, VB_sizes, IB_sizes, mass)
        Return Trimesh
End If
End Function

Массу 0 оставь для левела.

Цитата:

Сообщение от St.AnGer (Сообщение 132557)
Ой... Проверил пример из физикса под ксорс "Trimesh_Spring". Он тоже не работает чего то =( чего то не так с физиксом у меня что ли?

Дрова для физикса поставь.

Si-Jey 07.01.2010 21:32

Ответ: Проблема с тримешем.
 
St.Anger

Выдаёт МАВ на pxCreateTriMesh. Даже знаю наверно из за чего. У меня старый враппер. Только что обнаружил новый (от октября того года) на xor3d.com. Сейчас скачаю и попробую.

Это St.Anger

Katenok 07.01.2010 23:36

Ответ: Проблема с тримешем.
 
Проблема была в моём установленом враппере. Переустановил и всё работает. Спасибо всем кто помогал.

St.AnGer


Часовой пояс GMT +4, время: 23:18.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot