未返信記事の表示 | 活発なトピックの表示 現在時刻 - 2010年9月08日(水) 14:41



新しいトピックを投稿する トピックへ返信する  [ 3 件の記事 ] 
 マウスドラッグ操作について分からない処理 
作成者 メッセージ

登録日時: 2009年12月19日(土) 18:19
記事: 2
投稿記事 マウスドラッグ操作について分からない処理
環境:WinXp CS5 Papervision3D_2.1.932 jiglibflash fp10 r128

はじめまして。今回、jiglibflashにてドラッグ操作を試みているのですが、処理内容が分からず困ってす。ほとんどPVのことだと思いますがよろしくお願いします。

*jiglibでのオブジェクト作成については省きます。


ドラッグ操作の一連はダウンロードしたサンプルファイルの一部です。

private var onDraging:Boolean = false;
private var currDragBody:RigidBody;
private var dragConstraint:JConstraintWorldPoint;
private var startMousePos:Vector3D;
private var planeToDragOn:Plane3D;
private var physics:Papervision3DPhysics;

コンストラクタ内

Mouse3D.enabled = true;
mouse3D = viewport.interactiveSceneManager.mouse3D;


*マウスをプレスしたとき
private function handleMousePress(event:InteractiveScene3DEvent):void{
onDraging = true;
startMousePos = new Vector3D(mouse3D.x, mouse3D.y, mouse3D.z);
currDragBody = PhysicsSystem.getInstance().bodys[findSkinBody(event.displayObject3D)];
planeToDragOn = new Plane3D(new Number3D(0, 0, -1), new Number3D(0, 0, -startMousePos.z));

var bodyPoint:Vector3D = startMousePos.subtract(currDragBody.currentState.position);
dragConstraint = new JConstraintWorldPoint(currDragBody, bodyPoint, startMousePos);
}

*マウスを移動してるとき
private function handleMouseMove(event:MouseEvent):void{
if (onDraging){
var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
ray = Number3D.add(ray, new Number3D(camera.x, camera.y, camera.z));

var cameraVertex3D:Vertex3D = new Vertex3D(camera.x, camera.y, camera.z);
var rayVertex3D:Vertex3D = new Vertex3D(ray.x, ray.y, ray.z);
var intersectPoint:Vertex3D = planeToDragOn.getIntersectionLine(cameraVertex3D, rayVertex3D);

dragConstraint.worldPosition = new Vector3D(intersectPoint.x, intersectPoint.y, intersectPoint.z);
}
}

*マウスを離したとき
private function handleMouseRelease(event:MouseEvent):void{
if (onDraging){
onDraging = false;
dragConstraint.disableConstraint();
currDragBody.setActive();
}
}

上記の一連の流れの中でhandleMouseMoveのイベント処理内容が何をしているのか分かりません。
camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
の部分に関してはマウスの座標にも思えるんですが・・・camera.unprojectの取得する値はなんでしょうか?

またその後のNumber3D.addで加えている値の処理内容??
カメラの座標とどのような意味合いが・・

その後、Vertex3Dでカメラの座標を取得しているようですが、この処理がマウスの処理とどう関係しているのか?

planeToDragOn.getIntersectionLine(cameraVertex3D, rayVertex3D);
の「getIntersectionLine」の意味とは??

さっぱりの為、質問内容がちぐはぐしていますが要するに「まずマウスの座標を取得してその後カメラとの位置を合わせるためget~のメソッドを使用してカメラの座標を取得する・・」
というようなマウスムーブの処理の過程が分からないのです。


ものすごくざっくりで申し訳ないのですが、どなたか処理の内容を詳しく説明していただけますでしょうか


2010年6月27日(日) 21:42
プロフィール

登録日時: 2010年4月20日(火) 17:33
記事: 5
投稿記事 Re: マウスドラッグ操作について分からない処理
こんにちは。

ソースから想像出来る範囲での回答になってしまいますが、マウスムーブのイベントハンドラーでは、「2D→3D」の座標変換の計算をおこっていると思います。2Dのマウスを、3D空間のカメラの座標のプロジェクト変換の逆を適用して…云々といった処理です。

ダウンロードできるサンプルとありましたが、どちらからダウンロードされましたか?実際に動くサンプルを見ないと、想像による当てずっぽう回答になってしまいかねず。


2010年6月29日(火) 00:15
プロフィール

登録日時: 2009年12月19日(土) 18:19
記事: 2
投稿記事 Re: マウスドラッグ操作について分からない処理
ご返信ありがとうございます。

確かに情報が不足で申し訳ありません。
サンプルに関しては、jiglibの公式サイトでコードをダウンロードしたものです。
サーバーにアップしてみました。

サンプル動作
http://the-zombis.sakura.ne.jp/sample/F ... hysics.swf

コード
http://the-zombis.sakura.ne.jp/sample/Flash3DPhysics.as


2010年6月29日(火) 04:15
プロフィール
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 3 件の記事 ] 


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by Vjacheslav Trushkin for Free Forums/DivisionCore.
Japanese translation principally by ocean