[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00508] Re: 視点を移動した時のマウスに対応するVU空間の座標



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                ソフトウェア業界専門求人・求職情報                ┃
┃                    http://www.aun-soft.co.jp/                    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

つきやまです。
遠藤さん、アドバイスありがとうございます。

ENDO Yasuyuki wrote:

> 詳しく調べていませんが、イメージプレートの情報がz方向の移動時に
> 更新されていないような印象を持ちました。

そうなんです。
ここが問題かもしれないと考えているのですが、
視点を移動したことをどのようにフィードバックするかがわからないのです。

> com.sun.j3d.utils.behaviors.picking.PickObject.java の generatePickRay() では、
> getPixcelInImagePlate() と getImagePlateToVworld() の前に、
>
> > 216      canvas.getCenterEyeInImagePlate(eyePosn);
>
> を実行しているようですが、もしやってみていないようでしたらお試しください。

generatePickRay()では、

public PickShape generatePickRay(int xpos, int ypos)
    {

      Transform3D motion=new Transform3D();
      Point3d eyePosn = new Point3d();
      Point3d mousePosn = new Point3d();
      Vector3d mouseVec=new Vector3d();

      canvas.getCenterEyeInImagePlate(eyePosn);
      canvas.getPixelLocationInImagePlate(xpos,ypos,mousePosn);
      canvas.getImagePlateToVworld(motion);

      motion.transform(eyePosn);
      motion.transform(mousePosn);
      mouseVec.sub(mousePosn, eyePosn);
      mouseVec.normalize();

      pickRay.set(eyePosn, mouseVec);

      return (PickShape) pickRay;

    }

と、視点情報も取得して、同じく ImagePlateからVirtualWorldへの変換をし、
視点とマウスポイントの座標からRayを生成していると思います。
(マウスポイントをmotionで変換した座標はVW空間でのZ = 0.0を指している
 ということになるのですよね?)
この仕組み自体を十分に理解していないのが原因です。

ここで、Rayとなる直線のZ=0.0のX,Y座標を取ると良いのかとも思いますが、
どうでしょうか。

また、getPixelLocationInImagePlate() や getImagePlateToVworld() に視点
移動の情報をフィードバックすればうまくいくのではないかと思うのですが、
方法がわかりません。

アドバイスを頂けると助かります。
よろしくお願いいたします。

Mitsuru Tsukiyama