我目前正在用opengl制作一个3d国际象棋游戏。我仍然在为选择不同的数字而挣扎。我遵循了thinmatrix的教程,并走到了这一步:https://imgur.com/gallery/oLv5ReI。
现在,我希望用户能够通过点击图形来选择它们。我有相机的位置,鼠标指向的射线方向和图形的位置。当射线从相机的位置开始时,我如何检测射线是否击中图形(可能使用矩形点击框)?
我目前的代码:
public void update(Vector3f mouseRay, Camera camera, Figure figure){
Vector3f start = camera.getPosition();
Vector3f figurePos = figure.getPosition();
if(intersect()){
selectFigure();
}
}
编辑:我试过了:Ray-Sphere intersection,但不知何故,它不起作用。球体相交似乎也非常低效的方面,射线盒相交。
1条答案
按热度按时间gfttwv5a1#
您必须遵循以下步骤(我假设您了解渲染管道和OpenGL/WebGL)
1.获取所有对象的列表。
1.为每个对象分配一个唯一的颜色。下面是根据列表中对象的索引来分配唯一颜色的简单方法。
1.创建一个帧缓冲区,并使用为其唯一指定的纯色渲染所有对象。
1.渲染完成后,现在可以从渲染的帧缓冲区纹理中读取单击位置像素颜色。
1.将颜色解码为对象的索引,如下所示。(这与我们在第2步中所做的完全相反)
1.使用此索引,您可以从所有对象的初始列表中选择对象。
1.您可以在http://www.opengl-tutorial.org/miscellaneous/clicking-on-objects/picking-with-an-opengl-hack/阅读有关此技术的更多信息