Показать сообщение отдельно
Старый 21.08.2009, 21:21   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Создание уровней

Эта функция убивает всю трансформацию (поворот, скейл, особенно последнее). Дело в том что такие вещи как ScaleEntity (или масштабирование объекта целиком в максе [не фрагментов сетки]) не меняют реально положение вершин. Например создали дом размером 1. Отмасштабили его в 10 раз. Но вершины так и остались размером 1. И в таком виде они и передались в PhysX (или в другой движок) отсюда несоответствие трансформации видимого меша и физического.

В принципе можно это сделать и в самом блитзе, но я бы советовал заранее.

Вот функция, которая делает это (KillTransformMatrix):

Function KillTransformMatrix(mesh)
	ScaleMesh mesh, GetScaleX(mesh),GetScaleY(mesh),GetScaleZ(mesh)
	RotateMesh mesh, EntityPitch(mesh,1), EntityYaw(mesh,1), EntityRoll(mesh,1)
	PositionMesh mesh, EntityX(mesh,1), EntityY(mesh,1), EntityZ(mesh,1)	
End Function

;масштаб по X
Function GetScaleX#(Entity)
	S_Componentx# = GetMatElement(Entity, 0, 0)
	S_Componenty# = GetMatElement(Entity, 0, 1)
	S_Componentz# = GetMatElement(Entity, 0, 2) 
	Return Sqr(S_Componentx#*S_Componentx# + S_Componenty#*S_Componenty# + S_Componentz#*S_Componentz#)
End Function

;масштаб по Y
Function GetScaleY#(Entity)
	S_Componentx# = GetMatElement(Entity, 1, 0)
	S_Componenty# = GetMatElement(Entity, 1, 1)
	S_Componentz# = GetMatElement(Entity, 1, 2) 
	Return Sqr(S_Componentx#*S_Componentx# + S_Componenty#*S_Componenty# + S_Componentz#*S_Componentz#)
End Function

;масштаб по Z
Function GetScaleZ#(Entity)
	S_Componentx# = GetMatElement(Entity, 2, 0)
	S_Componenty# = GetMatElement(Entity, 2, 1)
	S_Componentz# = GetMatElement(Entity, 2, 2) 
	Return Sqr(S_Componentx#*S_Componentx# + S_Componenty#*S_Componenty# + S_Componentz#*S_Componentz#)
End Function
Спасибо H@NON'у за то что подогнал функцию получения скейла Ентити прямо в блице (я до этого использовал dll "Blitz3D+")*
*В таком виде не тестировал.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
3dr1aN (21.08.2009), fanblitz (21.08.2009), impersonalis (22.08.2009), MaxEDn2 (22.08.2009), NitE (22.08.2009), tormoz (21.08.2009)