【发布时间】:2012-01-20 02:59:27
【问题描述】:
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
屏幕网址:http://i.stack.imgur.com/au2ac.png
今天我尝试用新版本的gl-matrix实现我的鼠标碰撞,提供vec3.unproject。我想要的是获得鼠标位置的 z 世界坐标。正如您在屏幕截图中看到的那样,x 和 y 坐标都可以,但无论光标在哪里,z 坐标始终为 50。
每个平面都是 1.0x1.0,之间有 0.1 间距。
当我在 Y 轴上添加旋转或平移时,我从 unproject 接收到错误的 (?) x 和 y 坐标。我认为我处理 mvMatrix 和 pMatrix 的方式是错误的。谁能帮帮我?
编辑 不使用 .translate() 和 .scale() 函数我现在得到正确的 zNear 和 zFar 值,当我将这些函数应用于模型视图矩阵时,仍然不知道坐标是否正确。仍然缺少的是交集计算。
链接到我的来源: http://jsfiddle.net/matthoz/vucAq/
【问题讨论】:
-
我应该提一下,glMatrix 中的 unproject 功能非常新,还没有经过多场景的大量严格测试。我完全有可能搞砸了。是否可以将您的来源发布在某个地方以便我可以交叉检查?
标签: javascript math webgl collision