|
3D-программирование Вопросы, касающиеся программирования 3D мира |
16.07.2010, 20:32
|
#1
|
Разработчик
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений (для 329 пользователей)
|
фиксим 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.
что-то тут не так, что именно никак не могу понять. возможно, координаты самого интити.
__________________
299 792 458
|
(Offline)
|
|
16.07.2010, 20:51
|
#2
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: фиксим 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 упал под стол.
Кто-то так говорил, что он может реализовать всякие крутые фишки легко, да?
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
16.07.2010, 23:10
|
#3
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: фиксим BodyCreateHull
Вылаживался же вроде рабочий фикс, нет?
MeshWidth и иже с ними возвращают абсолютные габариты меша, а нам нужно узнать его скейл. Такая возможность в Б3Д не предусмотрена, можно вытащить их при помощи либы B3D+, либо был способ сделать без либ, получив значения ентити, но на память не скажу, как. Было всё на форуме, ищите.
/thread
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
17.07.2010, 07:19
|
#4
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: фиксим BodyCreateHull
GetMatElement( entity, row, column )
Вы про это чтоли?
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
Мне вот интересно, а модераторы, вобще, видят эти сообщения?!
Knightmare, я, конечно, понимаю что тебя многие достали и у многих, знания до твоих не дотягивают, но это не дает тебе права так перегибать палку! И если тебе противно читать темы с подобными вопросами, в которых ты потом собираешься оскорблять топикстартера, то лучше просто не отписывайся, потому что: 1. Вопрос не был задан конкретно тебе. 2. От твоего ответа лучше не стало.
|
Как всегда играем в "хороший, плохой [s]полицейский[/s] форумчанин."
Knightmare часто перегибает паку. Но чтоб человек начал думать ему нужно и подсказки давать и подзатыльники.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2010, 08:32
|
#5
|
ПроЭктировщик
Регистрация: 24.07.2009
Сообщений: 142
Написано 52 полезных сообщений (для 103 пользователей)
|
Ответ: фиксим BodyCreateHull
Да, но только у Knightmare подзатыльники слишком тяжелые, а подсказки слишком поверхностные..
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2010, 11:11
|
#6
|
Разработчик
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений (для 329 пользователей)
|
Ответ: фиксим 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
__________________
299 792 458
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:50.
|