С воскресенья я пытаюсь решить ту же проблему. Хотя в интернете много информации, я не смог заставить ее работать над моей программой-примером. Как только я это решу, я опубликую свой пример здесь.
Моя последняя попытка состояла в том, чтобы использовать порт glu-unProject для webGL. Для этого нужны следующие параметры:
функция (winX, winY, winZ, модель, proj, просмотр, 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 мне было намного проще.