forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   фиксим BodyCreateHull (http://forum.boolean.name/showthread.php?t=12940)

DeeJex 16.07.2010 20:32

фиксим BodyCreateHull
 
где-то слышал кто-то жаловался, что загружая из макса хуллы не учитывается скалирование
самый очевидный фикс:
Код:

Function BodyCreateHull%(mesh%, mass#)

    Local nsurf = CountSurfaces(mesh)
    Local nvert = 0
    For ns = 1 To nsurf
        Local surf = GetSurface(mesh,ns)
        nvert = nvert + CountVertices(surf)
    Next
        vbank = CreateBank(nvert*4*3)
    nv = 0
    For ns = 1 To nsurf
        surf = GetSurface(mesh,ns)
        nvv = CountVertices(surf)
        For nvc = 0 To nvv - 1
            PokeFloat vbank,nv*12+0,VertexX(surf,nvc)*MeshWidth(mesh)
            PokeFloat vbank,nv*12+4,VertexY(surf,nvc)*MeshHeight(mesh)
            PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)*MeshDepth(mesh)
            nv = nv+1
        Next
    Next
    Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
    FreeBank vbank
    Return bbb
End Function

на теории - логично, в деле - ATMTA.
что-то тут не так, что именно никак не могу понять. возможно, координаты самого интити.

Knightmare 16.07.2010 20:51

Ответ: фиксим BodyCreateHull
 
Цитата:

PokeFloat vbank,nv*12+0,VertexX(surf,nvc)*MeshWidth(mesh)
PokeFloat vbank,nv*12+4,VertexY(surf,nvc)*MeshHeight(mesh)
PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)*MeshDepth(mesh)
\me упал под стол.
Кто-то так говорил, что он может реализовать всякие крутые фишки легко, да?

ABTOMAT 16.07.2010 23:10

Ответ: фиксим BodyCreateHull
 
Вылаживался же вроде рабочий фикс, нет?
MeshWidth и иже с ними возвращают абсолютные габариты меша, а нам нужно узнать его скейл. Такая возможность в Б3Д не предусмотрена, можно вытащить их при помощи либы B3D+, либо был способ сделать без либ, получив значения ентити, но на память не скажу, как. Было всё на форуме, ищите.
/thread

Randomize 17.07.2010 07:19

Ответ: фиксим BodyCreateHull
 
GetMatElement( entity, row, column )
Вы про это чтоли?

PHP код:

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 


Цитата:

Сообщение от Arles (Сообщение 155096)
Мне вот интересно, а модераторы, вобще, видят эти сообщения?!
Knightmare, я, конечно, понимаю что тебя многие достали и у многих, знания до твоих не дотягивают, но это не дает тебе права так перегибать палку! И если тебе противно читать темы с подобными вопросами, в которых ты потом собираешься оскорблять топикстартера, то лучше просто не отписывайся, потому что: 1. Вопрос не был задан конкретно тебе. 2. От твоего ответа лучше не стало.

Как всегда играем в "хороший, плохой [s]полицейский[/s] форумчанин."
Knightmare часто перегибает паку. Но чтоб человек начал думать ему нужно и подсказки давать и подзатыльники.

Arles 17.07.2010 08:32

Ответ: фиксим BodyCreateHull
 
Да, но только у Knightmare подзатыльники слишком тяжелые, а подсказки слишком поверхностные..

DeeJex 17.07.2010 11:11

Ответ: фиксим BodyCreateHull
 
спс, работает
Код:

Function BodyCreateHull%(mesh%, mass#)

    Local nsurf = CountSurfaces(mesh)
    Local nvert = 0
    For ns = 1 To nsurf
        Local surf = GetSurface(mesh,ns)
        nvert = nvert + CountVertices(surf)
    Next
        vbank = CreateBank(nvert*4*3)
    nv = 0
    For ns = 1 To nsurf
        surf = GetSurface(mesh,ns)
        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
    Next
    Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
    FreeBank vbank
    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



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

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