我正在开始学习opengl,并且正在尝试制作3d 国际象棋,但我无法弄清楚,我怎么知道我在“表格”中点击了哪里来制作正确的动画,有什么建议吗?
2 回答
这称为“3D 拾取”。您必须将屏幕坐标转换为世界坐标。从那里,做一个射线/碰撞对象(边界框?)相交测试。如果它们相交,那就是用户点击的地方。
您必须做更多的事情来解决深度顺序问题,例如找到每个对象第一次相交的时间,然后选择具有最低(正)时间的那个。
如果你在谷歌上搜索“3D Picking”,你可能会找到你要找的东西。
这是一个教程: http ://nehe.gamedev.net/data/lessons/lesson.asp?lesson=32
请注意,这并不特定于任何形状的边界对象,无论是边界框、多边形、曲线等。您只需要计算出您想要支持的每种对象类型的相交测试的数学运算即可。
编辑:
在链接之前我没有阅读该教程,我只是认为 NEHE 是所有酷孩子学习 OpenGL 的地方(诚然,十年前......)。
以下是关于选择的 OpenGL 常见问题解答:
waldecir,寻找 raypick 函数。这是从场景的相机中心通过您单击的像素发送光线的名称(实际上,通过该像素在相机平面上的平移位置,表示 3D 世界中的“屏幕的玻璃表面”)并返回最前面的多边形射线与一些信息一起命中。通常是多边形表面轴内的坐标,例如 UV 或纹理坐标。通过检查坐标,您可以确定用户点击了哪个方格。
光线可以从任何位置和任何方向发送,因此您可能必须获取相机位置及其平面中心,但文档应该能够帮助您。