Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.09.2010, 13:52
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 1  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
По умолчанию Как определить направление нормали полигона?

Приветствую Вас.
Итак есть некий 3Д объект.
Хочу при наведении мышкой на какой либо полигон определить на нём точку прикосновения (А), затем определить направление нормали этого полигона из точки А и в финале задать на каком удалении от А будет точка (B) на нормали и определить положение (x,y,z) точки B в пространстве.
Вот картинка того, чего хочу.

Кто чем может подмочь? Если будут примеры с исходниками, то это супер.
Изображения
 


Последний раз редактировалось 3Desian; 30.09.2010 в 13:56.
Старый 01.10.2010, 11:38
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 2  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
Итак у меня получилось выбирать точку на 3Д объектах.
Код AS3:
package
{
	import flash.events.Event;
 
	import org.papervision3d.core.utils.Mouse3D;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.special.*;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.layer.ViewportLayer;
	import org.papervision3d.view.layer.util.ViewportLayerSortMode;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class Mouse3DFloor extends BasicView
	{
		private var mouse3D:Mouse3D;
		private var follower:Plane;
 
 
		public function Mouse3DFloor() 
		{
			var h:headerContainer = new headerContainer();
			h.header.text = "Following mouse position on a plane";
			addChild(h);
 
			viewport.interactive = true;
			Mouse3D.enabled = true;
			mouse3D = viewport.interactiveSceneManager.mouse3D;
 
 
			var wireframeMaterial:WireframeMaterial = new WireframeMaterial(0x444444);
			var colorMaterial:ColorMaterial = new ColorMaterial(0xdddddd);
			var redColorMaterial:CompositeMaterial = new CompositeMaterial();
			redColorMaterial.addMaterial(wireframeMaterial);
			redColorMaterial.addMaterial(colorMaterial);
			//var redColorMaterial:ColorMaterial = new ColorMaterial(0xcc0000);
			redColorMaterial.interactive = true; 
			//10, 10 represent the number of segments in the plane
			//var floor:Plane = new Plane(redColorMaterial, 2000, 2000, 10, 10);		
			var floor:Cylinder = new Cylinder(redColorMaterial,400,2800,20,10);
			floor.x=-500;
			//floor.rotationX = 90;
 
			var sphere:Sphere = new Sphere(redColorMaterial, 400, 18, 18);
			sphere.z=1900;
			scene.addChild(sphere);		
 
			var greenColorMaterial:ColorMaterial = new ColorMaterial(0x00cc00);
			follower = new Plane(greenColorMaterial, 300, 300);
			follower.rotationX = 90;			
			scene.addChild(floor);			
			scene.addChild(follower);
 
			camera.y = 1000;
			camera.lookAt(sphere);
 
			var floorViewportLayer:ViewportLayer = new ViewportLayer(viewport, floor);
			var followerViewportLayer:ViewportLayer = new ViewportLayer(viewport, follower);
 
			viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;	
			floorViewportLayer.layerIndex = 0;
			followerViewportLayer.layerIndex = 1;
 
			viewport.containerSprite.addLayer(floorViewportLayer);
			viewport.containerSprite.addLayer(followerViewportLayer);
 
 
			startRendering();
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			follower.x += (mouse3D.x - follower.x) * 1;
			follower.y += (mouse3D.y - follower.y) * 1;
			follower.z += (mouse3D.z - follower.z) * 1;
 
			//follower.copyTransform(mouse3D);
 
			renderer.renderScene(scene, camera, viewport);
		}
 
	}
 
}
РЕЗУЛЬТАТ НА ПЕРВОЙ ФЛЭШКЕ Mouse3DFloor1.swf

Теперь осталось правильно ориентировать плоскость. Т.е. она должна поварачиваться в направлении нормали в точке.

Включаю: follower.copyTransform(mouse3D);
И получается какая то фигня.
РЕЗУЛЬТАТ НА ВТОРОЙ ФЛЭШКЕ Mouse3DFloor2.swf

Такое ощущение, что плоскость ориентируется относительно какой то невидимой сферы в центре.
Вложения
Тип файла: swf Mouse3DFloor1.swf (76.2 Кб, 64 просмотров)
Тип файла: swf Mouse3DFloor2.swf (76.2 Кб, 111 просмотров)

Старый 03.10.2010, 15:24
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 3  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
Что, правда никто не знает?

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.