小编eih*_*ihe的帖子

OpenGL 中的射线球相交

我正在尝试使用射线球相交在 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)

c++ opengl graphics geometry mouse-picking

5
推荐指数
1
解决办法
1206
查看次数

标签 统计

c++ ×1

geometry ×1

graphics ×1

mouse-picking ×1

opengl ×1