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

[Java3Djp:00016] Re: DepthComponentFloat クラスについて



鈴村@広島市立大です。

お世話になっております。

あの後、アドバイスを参考にプログラムを作成、試行してみたんですが、

>(1) [原点]→[farクリップ面上の特定ピクセル(に相当する点の)座標] の距離
>(2) [原点]→[nearクリップ面上の特定ピクセル(に相当する点の)座標] の距離
> 
>を計算し、係数(0.0〜1.0にクリッピングされた値)を乗算

というのは、「((1) - (2)) * 係数」という意味ととったんですが、
そうですよね?
やはり可視領域内の距離((1)-(2))と係数の関係が線形ではないため、
乗算しただけでは正確な値がでませんでした。

で、iforさんが言われた void Canvas3D.getImagePlateToVworld(Transform3D)
を用いる方を検討してみたんですが、
私が作成したプログラムでは得られる変換行列が単位行列になってしまっています。
下にプログラムの簡単な流れを書きます。

View view_ = new View();
Canvas3D cnavas_ = new Canvas3D(...); //Canvas3Dは拡張していてRaster情報なども含みます。
Transform3D trans_= new Transform3D();	

Point3d eyePos = new Point3d();   //画像プレートからの相対的な目の座標
Point3d platePos = new Point3d(); //画像プレート上の画素位置
Transform3D motion = new Transform3D();

view_addCanvas3D(canvas_);

view_.setCompatibilityModeEnable(true);
trans_.frustum(-x, x, -y, y, nearClipDistance, farClipDistance);
view_.setLeftProjection(trans_);

/* ↓のmotionに入る、画像プレートから仮想世界座標への
   変換行列を表示させると単位行列になっている         */
canvas_.getImagePlateToVworld(motion);
canvas_.getLeftEyeInImagePlate(eyePos);
motion.transform(eyePos);
motion.transform(platePos);
   ・
   ・
   ・

どこか間違っている箇所がありましたらご指摘お願いします。
もしくはこの場合、単位行列が出ることが正解なのでしょうか?
よろしければご教授お願いします。