我正在尝试使用射线球相交在 OpenGL 中执行鼠标拾取。我在网上找了几个公式,最后一个是 Stack Exchange 上的一个用户推荐的:
根据我对这个答案的理解,我正在检查二次方程是否有正根。我真的不在乎交点在哪里发生,只要光线与球体相交。我的代码如下,但似乎不起作用。
bool Mesh::useObject(vec3 camera, vec3 direction) {
// a = (xB-xA)²+(yB-yA)²+(zB-zA)²
float a = ((direction.v[0] - camera.v[0])*(direction.v[0] - camera.v[0])
+ (direction.v[1] - camera.v[1])*(direction.v[1] - camera.v[1])
+ (direction.v[2] - camera.v[2])*(direction.v[2] - camera.v[2]));
// b = 2*((xB-xA)(xA-xC)+(yB-yA)(yA-yC)+(zB-zA)(zA-zC))
float b = 2 * ((direction.v[0] - camera.v[0])*(camera.v[0] - mOrigin.v[0])
+ (direction.v[1] - camera.v[1])*(camera.v[1] - mOrigin.v[1])
+ (direction.v[2] - camera.v[2])*(camera.v[2] - mOrigin.v[2]));
// c = (xA-xC)²+(yA-yC)²+(zA-zC)²-r²
float c = ((camera.v[0] - mOrigin.v[0])*(camera.v[0] - mOrigin.v[0])
+ (camera.v[1] - mOrigin.v[1])*(camera.v[1] …Run Code Online (Sandbox Code Playgroud)