Показать сообщение отдельно
Старый 28.04.2009, 12:17
DRAGOnoid вне форума Посмотреть профиль Отправить личное сообщение для DRAGOnoid Посетить домашнюю страницу DRAGOnoid Найти все сообщения от DRAGOnoid
  № 45  
Ответить с цитированием
DRAGOnoid
 
Аватар для DRAGOnoid

Регистрация: Jan 2004
Адрес: Moscow
Сообщений: 389
Отправить сообщение для DRAGOnoid с помощью ICQ
СПАСИБО ЕЩЁ РАЗ ВСЕМ ОГРОМНОЕ. послушав многие советы и конкретно пошаманив, наконец добился того что так долго хотел.

наконец дошло как парвильно можно получить вектор нормали (надо было root а я трогал stage)

Код AS3:
//	вектор stage
public	function get vectorStage ():Vector3D {
	var vectorStage:Vector3D = new Vector3D();
 
	try {	
		vectorStage = this.transform.getRelativeMatrix3D(root).position;
		vectorStage.x -= stage.stageWidth / 2;
		vectorStage.y -= stage.stageHeight / 2;
		vectorStage.z += root.transform.perspectiveProjection.focalLength;
	} catch (error:Error){trace ('vector Stage - неможет быть найден');}
 
	return vectorStage;
}
а так же нормаль к плоскости

Код AS3:
//	вектор нормаль
public	function get vectorNormal ():Vector3D {
	var vectorNormal:Vector3D = new Vector3D();
 
	try {
		var matrix3D:Matrix3D = this.transform.getRelativeMatrix3D(root);
		vectorNormal.x = matrix3D.rawData[8]
		vectorNormal.y = matrix3D.rawData[9]
		vectorNormal.z = matrix3D.rawData[10]
	} catch (error:Error){trace ('vector Normal - неможет быть найден');}
 
	return vectorNormal;
}
получая угол межу этими векторами мы легко определяем какой стороной к нам плоскость, и в зависимости от этого скрываем или показываем:
Код AS3:
public	function resort ():void {
var angle:Number = Vector3D.angleBetween(this.vectorStage, this.vectorNormal);
if (angle >= Math.PI/2)
	this.visible = false;
else
	this.visible = true;
}
вроде всё работает и без глюков! круто!
__________________
Black DRAGON хочет кушать Т_Т


Последний раз редактировалось DRAGOnoid; 28.04.2009 в 14:59.