gpt4 book ai didi

c++ - 如何在 OpenGL 中检测鼠标悬停在某个对象上?

转载 作者:太空狗 更新时间:2023-10-29 21:46:32 24 4
gpt4 key购买 nike

我正在制作简单的 3D 游戏。在 3D 场景中检测鼠标悬停在对象上的最佳方法是什么?

最佳答案

实际上,我会避免使用这些挑选方法,而只是用数学方法来做。从鼠标光标位置创建一条直入场景的直线,并将其与场景中每个对象的边界球体相交。对于它相交的每个边界球体,只需检查哪个顶点最接近眼睛位置。

可以使用此算法将 z 分别设置为 0 和 1 来创建直线。

math::Vec3f windowToObjectf(const math::Vec3f& windowCoord) {
math::Matrix4f modelViewMatrix;
math::Matrix4f projectionMatrix;
std::array <GLint, 4> viewport;
glGetFloatv( GL_MODELVIEW_MATRIX, modelViewMatrix.data() );
glGetFloatv( GL_PROJECTION_MATRIX, projectionMatrix.data() );
glGetIntegerv( GL_VIEWPORT, &viewport.front() );
math::Vec3f ret(0, 0, 0);
auto succes = gluUnProject( windowCoord.x , windowCoord.y, windowCoord.z, modelViewMatrix.data(), projectionMatrix.data(), &viewport.front(), &ret.x, &ret.y, &ret.z );
RASSERT(succes == GL_TRUE);
GL_RASSERT();
return ret;
}

关于c++ - 如何在 OpenGL 中检测鼠标悬停在某个对象上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953178/

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