如何在WebGL中检测碰撞,而不使用像three.js这样的库?
如何在WebGL中检测碰撞
不可以。WebGL和OpenGL只用于绘制图形,它们不管理场景,也没有“物体”或诸如碰撞这样的高级概念。它们只处理点、线、三角形和着色器。
与场景管理或碰撞相关的任何内容都超出了WebGL(和OpenGL)的范围。
我会推荐以下网页(很遗憾只提供德文)http://www.peter-strohm.de/webgl/webgltutorial8.php
我们能够实现碰撞检测并且甚至可以使用ID映射在服务器上执行API调用(例如,在场景中为某个特定对象显示工具提示的附加信息)。
希望这有些帮助。
从周日开始,我一直在尝试解决同样的问题。虽然在互联网上有很多信息,但我无法让它在我的示例程序中正常工作。一旦我解决了它,我会在这里发布我的示例。
我最后的尝试是使用glu-unProject端口用于webGL。这需要以下参数:
function(winX, winY, winZ, model, proj, view, objPos)
为了测试目的,我尝试直接从我的场景绘制函数调用此函数。
var pMatrix = new mat4.ortho(iL, iR, iB, iT, fNearZ, farZ);
var mvMatrix = new mat4.create();
mat4.identity(mvMatrix);
mat4.translate(mvMatrix,[0,0,-40]);
var oMouseMatrix = mat4.create();
mat4.identity(oMouseMatrix);
//Rotate eye :-S
mat4.rotate(oMouseMatrix,((this.fAnimationXAngle/10) * Math.PI) / 360.0,[0,1,0]);
mat4.rotate(oMouseMatrix,((this.fAnimationYAngle/10) * Math.PI) / 360.0,[1,0,0]);
mat4.multiply(oMouseMatrix, mvMatrix, mvMatrix);
//Rotate model
mat4.rotateX(mvMatrix,this.fRotX * Math.PI / 180.0);
mat4.rotateY(mvMatrix,this.fRotY * Math.PI / 180.0);
mat4.rotateZ(mvMatrix,this.fRotZ * Math.PI / 180.0);
var aTest = this.unProject(
this.pLastMouse.x,
this.pLastMouse.y,
0,
mvMatrix,
pMatrix,
[0,0,this.iWidth,this.iHeight]
);
this.iWidth和this.iHeight是画布和视口的宽度/高度 - this.pLastMouse.x和.y是画布内鼠标坐标
zI.debug(aTest);
但结果非常糟糕。我猜我的代码里有几个错误。我上周五才开始尝试WebGL。我不想这么早就放弃,但自那以后我已经解决了很多问题,但这个问题让我发疯。
在OpenGL中对我来说要容易得多。