forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Улучшенная функция тримеша (http://forum.boolean.name/showthread.php?t=14375)

Coks 07.03.2011 22:55

Улучшенная функция тримеша
 
Теперь тримешь без проблем строится из многосюрфейсных мешей:
Код:

Function BodyCreateMesh(mesh%, mass# = 0)
          nsurf = CountSurfaces(mesh)
        nvert = 0
        nface=0
        For ns = 1 To nsurf
                Local surf = GetSurface(mesh,ns)
                nface = nface+CountTriangles(surf)
                nvert = nvert +CountVertices(surf)
        Next

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

                nvv = CountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
                        PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
                        PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
                        nv = nv+1
                Next
                pnvv=pnvv+nvv-1
        Next
        bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,mass)
        FreeBank vbank
        FreeBank fbank
        Return bbb%
End Function


DeeJex 11.03.2011 18:45

Ответ: Улучшенная функция тримеша
 
БЕЗНОГNМ
Код:

Function BodyCreateMesh(mesh, mass# = 0)
          nsurf = CountSurfaces(mesh)
        nvert = 0
        nface=0
        For ns = 1 To nsurf
                Local surf = GetSurface(mesh,ns)
                nface = nface+CountTriangles(surf)
                nvert = nvert +CountVertices(surf)
        Next

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

                nvv = CountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,VertexX(surf,nvc)*EntityScaleX(mesh)
                        PokeFloat vbank,nv*12+4,VertexY(surf,nvc)*EntityScaleY(mesh)
                        PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)*EntityScaleZ(mesh)
                        nv = nv+1
                Next
                pnvv=pnvv+nvv-1
        Next
        bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,mass)
        FreeBank vbank
        FreeBank fbank
        Return bbb%
End Function

Function EntityScaleX#(ent%) 
    row=0
    el1# = GetMatElement(ent,row,0) 
    el2# = GetMatElement(ent,row,1) 
    el3# = GetMatElement(ent,row,2) 
    Return Sqr(el1*el1+el2*el2+el3*el3) 
End Function
Function EntityScaleY#(ent%) 
    row=1
    el1# = GetMatElement(ent,row,0) 
    el2# = GetMatElement(ent,row,1) 
    el3# = GetMatElement(ent,row,2) 
    Return Sqr(el1*el1+el2*el2+el3*el3) 
End Function
Function EntityScaleZ#(ent%)
    row=2
    el1# = GetMatElement(ent,row,0) 
    el2# = GetMatElement(ent,row,1) 
    el3# = GetMatElement(ent,row,2) 
    Return Sqr(el1*el1+el2*el2+el3*el3) 
End Function

Hint: убирает потребность в ResetXForm и проблемы с масштабами.

Randomize 11.03.2011 18:56

Ответ: Улучшенная функция тримеша
 
Цитата:

Сообщение от DeeJex (Сообщение 182345)
БЕЗНОГNМ
Код:

...
Hint: убирает потребность в ResetXForm и проблемы с масштабами.

Опередил же!

Colossus 13.03.2011 17:00

Ответ: Улучшенная функция тримеша
 
а в чем разница?

Randomize 13.03.2011 17:59

Ответ: Улучшенная функция тримеша
 
Цитата:

Сообщение от Colossus (Сообщение 182651)
а в чем разница?

Вариант от DeeJex`а принимает во внимание ScaleEntity при создании тримеша.

Coks 17.04.2011 16:25

Ответ: Улучшенная функция тримеша
 
Цитата:

Сообщение от DeeJex (Сообщение 182345)
Hint: убирает потребность в ResetXForm и проблемы с масштабами.

С ResetXForm это не может помочь!
А для изменения масштаба лучше использовать функцию ScaleMesh, в противном случае могут вылезти другие неприятные глюки.

HolyDel 17.04.2011 21:22

Ответ: Улучшенная функция тримеша
 
а если ентитю покрутят или переместят? все ваши танцы с отдельными элементами матрицы трансформации станут ненужными. была же кажется функция переводящая вектор из системы ентити в систему мира? както ТФорм кажется...

Coks 17.04.2011 22:45

Ответ: Улучшенная функция тримеша
 
Так а смысл вращать/перемещать объект, если из него собираешься делать тримешь. Сначала сделай физ. тело, а потом его уже ориентируй как тебе надо.


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

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