【发布时间】:2010-10-12 17:56:23
【问题描述】:
所以我正在为 html5 中的 canvas 元素编写一个小型的伪 3d 引擎。在下面的代码中,我绘制了一堆具有不同位置和旋转的正方形(围绕 z 轴旋转,所以没有变形)
现在我想知道用户点击了哪个方块。在对象数组中,项目由 z 位置支持,从距离相机最远的正方形开始(以便它们正确绘制)。所以给定一个相对于画布左上角的 3d 点,我如何判断点击了哪个方块?
//Draw objects
for (var i = 0; i < objects.length; i++) {
var object = objects[i];
var cz = object.position.z - camera.position.z;
if (cz > 0) {
cz = 1 / ((cz - 1) * 0.75 + 1);
context.save();
context.translate(halfWidth, halfHeight); //viewport transform
context.scale(1, -1); //invert y axis
context.scale(cz, cz); //perspective
context.translate(-camera.position.x, -camera.position.y); //camera transform
context.translate(object.position.x, object.position.y); //world transform
context.rotate(object.rotation);
context.fillStyle = object.color;
context.fillRect(-40, -40, 80, 80);
context.restore();
}
}
附:如果我在做任何奇怪或倒退的事情,并且您知道改进的方法,我很想听听建议
【问题讨论】: