2011-12-14 32 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网址:http://i.stack.imgur.com/au2ac.pngvec3.unproject()鼠标冲突问题

今天我试着去实现我的鼠标碰撞GL-矩阵的新版本,提供vec3.unproject。我想要的是获得鼠标位置的z世界坐标。正如你在屏幕截图上看到的那样,x和y坐标是可以的,但无论光标位于何处,z坐标始终为50。

每个平面都是1.0x1.0,其间有0.1个间隔。

当我在Y轴上添加旋转或平移时,我收到来自未投影的错误(?)x和y坐标。我认为我处理mvMatrix和pMatrix的方式是错误的。谁能帮帮我吗?

编辑 不使用.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创建两个未投射电话,您将获得一个有限的矩阵,您可以开始处理。

+0

谢谢你的回复。我为unproject添加了第二个调试调用,并且在第一次调用中给znear [vec] [2],并在第二次调用中给zFar vec [2]。 z的结果是6716.666 ...(zNear)和-6616.666 ... zFar:S – mat

+0

嗯,如果用Z值对飞机进行呼叫会发生什么? –

+1

http://myweb.lmu.edu/dondi/share/cg/unproject-explained.pdf 下面是关于unProject如何工作的很多理论,首先尝试zNear = 0和zFar = 1并让我们知道结果 –