2011-12-14 15 views
2
var fNearZ = -100.0; 
var farZ = 100.0; 
var fZoom = 10.0; 
var iR  = this.iWidth/fZoom; 
var iL  = (this.iWidth/fZoom)*(-1); 
var iT  = this.iHeight/fZoom; 
var iB  = (this.iHeight/fZoom)*(-1); 

var pMatrix  = new mat4.ortho(iL, iR, iB, iT, fNearZ, farZ); 
var mvMatrix = new mat4.create(); 

mat4.identity(mvMatrix); 
zI.debug(mat4.str(mvMatrix),{'grp':'mv_before','style':'color:#060;'}); 

mat4.translate(mvMatrix, [0.0, 0.0, -50.0]); 
mat4.scale(mvMatrix, [3, 3, 3]); 

zI.debug(vec3.unproject([ 
     parseFloat(this.pLastMouse.x-this.iLeft), 
     parseFloat(this.pLastMouse.y-this.iTop), 
     0 
    ], 
    mvMatrix, 
    pMatrix, 
    [ 
     0, 
     0, 
     this.iWidth, 
     this.iHeight 
    ]),{'grp':'dest____','style':'color:#00F;'}); 

this.setMatrices(pMatrix, mvMatrix); 
//After this line, buffers will be set 

Screen of 16x16 Planes with 0.1 offset between SCREENのURL:私はvec3.unprojectを提供し、GL-行列の新しいバージョンで私のマウスの衝突を実現しようとしたhttp://i.stack.imgur.com/au2ac.pngvec3.unproject()マウスの衝突問題

今日。私が望むのは、マウス位置のzワールド座標を取得することです。スクリーンショットで見てきたように、x座標とy座標はOKですが、カーソルがどこにあるかにかかわらず、z座標は常に50です。

各プレーンは1.0x1.0で、間隔は0.1です。

私はY軸に回転または平行移動を追加すると、私は間違った(?)x座標とy座標をunprojectから受け取ります。私はmvMatrixとpMatrixを扱う方法が間違っていると思います。誰でも助けてくれますか?

EDIT私は、これらの機能を適用すると、.translate()と.scale()私はまだ座標が正しいかどうかわからない、今zNearとzFarの正しい値を取得していた機能を使用しない モデルビュー行列に追加します。依然として欠けているのは交差計算です。

私のソースへのリンク:​​

+1

glMatrixのunproject関数は非常に新しく、複数のシナリオで厳密なテストをまだ受けていません。私は何かをしたことが完全に可能です。私はそれをチェックすることができますので、あなたのソースをどこかに投稿することは可能でしょうか? – Toji

+0

http://jsfiddle.net/matthoz/vucAq/ < - 私を笑ってはいけません;) - テクスチャはjsfiddleでは機能しません。しかし、私はあなたのコードは正常に動作することを伝えることができます。 – mat

答えて

2

問題は、それが座標ていない「マウス位置のz世界座標」ということですが、それらの無限の量(から撮影仮想線マウスのx、yの位置)。私は50を推測しています。それはmvMatrixにある任意の値または50.0です。

zFarとzNearを使用して2つのプロジェクトを呼び出すと、作業を開始できる有限の四角形が表示されます。

+0

お返事ありがとうございます。私はunprojectのための2番目のデバッグコールを追加し、最初の呼び出しでvec [2]にzNearを、2番目の呼び出しでzFarにzFarを与えました。 zの結果は6716.666 ...(zNear)、zFarの場合は-6616.666 ... S – mat

+0

Hmmm、平面のZ値で呼び出すとどうなりますか? –

+1

http://myweb.lmu.edu/dondi/share/cg/unproject-explained.pdf ここでは、unProjectの仕組みに関する多くの理論があります。まず、zNear = 0とzFar = 1を試してみてください。最初の呼び出し(zNear)の場合は –