Показать сообщение отдельно
Старый 12.05.2014, 06:59   #9
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Xors3D + PhysX Проблемы

pxCreateTriMesh
Почитал, что автор Render для BMax-а написал отдельный загрузчик Ткани pxCreateClothSpec

Сейчас я просто заменил строку Функции xConvertMeshToTrimesh на аналогичную загрузочку Ткани.
Ошибок загрузки нет.
Но при pxUpdateCloth() - ошибка.
Предполагаю что к Ткани не закреплёна Модель.

Global cloth_mesh=xLoadMesh("..\Media\pol.b3d")
cloth_tex=xLoadTexture("..\Media\rug512.jpg")
xEntityTexture cloth_mesh,cloth_tex
xEntityFX cloth_mesh
,16    ;ЭТО ВАЖНО чтобы плоскость отображалась с двух сторон
xScaleMesh cloth_mesh
,0.1,0.1,0.1
xPositionMesh cloth_mesh
,0,8,0

Global cloth_body=xConvertMeshToCloth(cloth_mesh)
Global 
cloth_nvert=pxClothGetNumVertices(cloth_body)    ;оптимизация чтобы не
Global cloth_vbank=CreateBank(cloth_nvert*4*3)        ;повторять в цикле

pxClothAttachVertexToPos
(cloth_body,399,-1,8,0)
pxClothAttachVertexToPos(cloth_body,440,1,8,0)
pxClothSetBendingStiffness(cloth_body,1)

~ ~ ~
Function 
xConvertMeshToCloth(mesh)
    
nsurf=xCountSurfaces(mesh)
    
nvert=0
    nface
=0
    
For ns=0 To nsurf-1
        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
    pnvv
=0
    
For ns=0 To nsurf-1
        surf
=xGetSurface(mesh,ns)
        
nfv=xCountTriangles(surf)
        For 
nfc=0 To nfv -1
            PokeInt fbank
,nf*12+0,xTriangleVertex(surf,nfc,0)+pnvv+ns
            PokeInt fbank
,nf*12+4,xTriangleVertex(surf,nfc,1)+pnvv+ns
            PokeInt fbank
,nf*12+8,xTriangleVertex(surf,nfc,2)+pnvv+ns
            nf
=nf+1
        Next
        
        nvv
=xCountVertices(surf)
        For 
nvc=0 To nvv-1
            PokeFloat vbank
,nv*12+0,xVertexX(surf,nvc)*xEntityScaleX(mesh)
            
PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)*xEntityScaleY(mesh)
            
PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)*xEntityScaleZ(mesh)
            
nv=nv+1
        Next
        pnvv
=pnvv+nvv-1
    Next
    bbb
%=[b]pxCreateClothSpec[/b](vbank,fbank,nvert,nface)
    
FreeBank vbank
    FreeBank fbank
    
Return bbb%
End Function 
эта писанина ныне не актуальна:

Пока вот думаю как закрепить Ткань на Модель.
Есть функция pxClothGetNormals(Cloth%, nbank*), но не знаю как её применить (в архиве bmax-а должен быть пример).

Посмотрел в исходник враппера, там в файле Blitzpx.cpp
на 3105 строке:
regularCloth->entityData = 0;

почему то не приписывается Entity к Cloth, хотя можно было бы (наверное) через функцию (при создании Ткани)


Обновление Ткани и её Модели читать ниже \/

Последний раз редактировалось LLI.T.A.L.K.E.R., 12.05.2014 в 10:28. Причина: оптимизация банка
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tirarex (12.05.2014)