gpt4 book ai didi

c++ - 使对象可单击(如果鼠标在对象区域中则单击)

转载 作者:太空狗 更新时间:2023-10-29 23:18:18 26 4
gpt4 key购买 nike

我的窗口上有一个矩形,我试图通过定义矩形的面积来使该矩形可点击。

如果鼠标点击在此区域内,则为点击,否则不是。

例如:在窗口上,我们假设矩形的顶点是:
x = 40, y = 50; width = 200, height = 100;
因此,
时将被计为一次点击 (mouseXPos > getX()) && (mousxPos < (getX()+width)) && (mouseYPos > getY()) && (mouseYPos > getY()+height)

现在,我正在通过继承一个具有 lookAt 的类来对对象进行 lookAt 转换。职能。此外,我正在使用相机检查物体的不同面(相机旋转)。因此,当物体沿各个轴旋转并在使用相机时显示不同的面孔。

然而,当物体移动时,我本以为矩形的顶点会发生变化。矩形的顶点也应该在做 gluLookAt 时发生变化。功能,但看起来它们没有,虽然对象不存在,但我的点击区域始终在这些点保持静止。我该如何解决这个问题?如何使我的对象可点击并在其上添加一些鼠标事件?

最佳答案

如果您尝试点击 3D 形状,并且正在移动相机,我不会在屏幕坐标中检查它。

相反,您可以将用户点击的点投影到 3D 空间中的一条线上,然后将其与可以点击的对象相交。

GL 有一个函数:gluUnproject()

如果您为该函数提供 View 的详细信息以及被点击的屏幕点,它可以告诉您用户点击了 3D 空间中的哪个位置。如果您在近平面和远平面上检查一个点,则可以根据您的对象检查这些点之间的线。

另一种选择是某种 ID 缓冲区,您可以在屏幕外渲染场景,但不是输出阴影像素,而是输出每个对象的 ID 值。然后, HitTest 只是从该缓冲区读取一个像素的问题。

关于c++ - 使对象可单击(如果鼠标在对象区域中则单击),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14090906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com