我已阅读有关它的所有帖子,但无法完成它。 我在webgl中有一个3d场景,需要知道画布上的2d是否有3d点。
我有这个矩阵:
Perspective = M4x4.makePerspective( fovy, aspect, znear, zfar );
CameraView = M4x4.makeLookAt ( eye, center, up );
ViewPerspectiv = M4x4.mul( Perspective , CameraView );
该模型有:
this.ModelMatrix = M4x4.I;
this.ModelMatrix = M4x4.makeTranslate3( this.pos_x, this.pos_y, this.pos_z );
我已经尝试了所有的帖子 - 它总是使用:view和Perspective and point ..有时是转置......
有人可以使用我的可变名称,只是发布我的行? PLS !! 这是我尝试过的......但它不起作用:
var point = get2dPoint( point, this.ModelMatrix, ViewPerspectiv , canvas.clientWidth, canvas.clientHeight ) ;
...
function get2dPointV2( point3D, viewMatrix, projectionMatrix, width, height)
{
var tmp1 = multiMat4ByVec3( viewMatrix , point3D );
var clip = multiMat4ByVec3( projectionMatrix , tmp1 );
var ndcSpace = new Array ( clip[0] / clip[3] , clip[1] / clip[3] , clip[2] / clip[3] );
ndcSpace[0] = ((ndcSpace[0] + 1.0) / 2.0) * width ;
ndcSpace[1] = ((ndcSpace[1] + 1.0) / 2.0) * height ;
return ndcSpace;
}
现在这已经让我失去了12小时......
Thanx给任何试图帮助的人。
铜
我发现基本的approche很好,但我使用的矩阵需要调换,这就是所有的缺失! 无论如何,还是谢谢!
答案 0 :(得分:0)
你的第一句话听起来像你要投影3D - > 2D。这就是Perspective-Matrix的作用。
您的代码正试图反转Perspective-Matrix,从2D投影 - > 3D。这用于例如当试图找出你用鼠标点击的位置时。
你想做什么?如果你真的想要投影2D - > 3D我可能会在明天找到解释/发布一些代码的时间。