我知道如何根据鼠标是否被点击或释放以及鼠标处于运动状态或被点击并处于运动状态(所有使用freeglut)来实现动作。
但谷歌让我非常强调选项,我应该用哪种方式来确定点击的对象。
有人可以告诉我你能想到的最简单的方法来确定点击了什么对象,这样我就可以使用过剩函数独立移动该对象吗?
答案 0 :(得分:3)
无论您是否使用2D或3D,最简单的解决方案是为每个可拾取对象分配一种通常不常用的唯一颜色。然后,对于每个单击事件,您渲染(到后台缓冲区)具有应用于每个对象的唯一颜色的相同场景。通过禁用照明等,问题就变成了查看鼠标下的像素颜色并使用查找表查看单击了哪个对象的问题。
即使在16位色深中,仍然可以获得2 ^ 16个独特的可拾取对象,而实际上在现代应用中很少有2 ^ 24个。
答案 1 :(得分:2)
当我们处理2D对象时,如果鼠标的位置在对象内,则指向一个对象。这种内在的概念因不同的几何形状而不同。
对于矩形宽度左上角Iso
和c
,width
,该函数可能如下所示:
height
对于中心为bool isInsideRectangle(double x, double y) {
// The mouse is inside if the coordinates are 'inside' all walls
return (x > c.x &&
y > c.y &&
x < c.x + width &&
y < c.y + height);
}
且半径为c
的圆圈,它可能如下所示:
r
对于另一个形状,您必须找出另一个如何计算鼠标位置是否在内部的函数,但在许多情况下,您可以将其简化为边界矩形或球体。