首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带深度缓冲器的射线拾取:可怕的不准确?

带深度缓冲器的射线拾取:可怕的不准确?
EN

Stack Overflow用户
提问于 2013-12-03 19:34:43
回答 1查看 1.4K关注 0票数 2

我正在尝试实现射线拾取算法,用于绘制和选择块(因此,我需要相当数量的准确性)。最初,我使用了一个光线投射实现,但我觉得它不够准确(尽管故障可能与我的交叉测试有关)。无论如何,我决定尝试使用深度缓冲区来选择,并将鼠标坐标转换为世界坐标。执行情况如下:

代码语言:javascript
复制
glm::vec3 Renderer::getMouseLocation(glm::vec2 coordinates) {
    float depth = deferredFBO->getDepth(coordinates);

    // Calculate the width and height of the deferredFBO
    float viewPortWidth = deferredArea.z - deferredArea.x;
    float viewPortHeight = deferredArea.w - deferredArea.y;

    // Calculate homogenous coordinates for mouse x and y
    float windowX = (2.0f * coordinates.x) / viewPortWidth - 1.0f;
    float windowY = 1.0f - (2.0f * coordinates.y) / viewPortHeight;

    // cameraToClip = projection matrix
    glm::vec4 cameraCoordinates = glm::inverse(cameraToClipMatrix) 
                                * glm::vec4(windowX, windowY, depth, 1.0f);

    // Normalize
    cameraCoordinates /= cameraCoordinates.w;

    glm::vec4 worldCoordinates = glm::inverse(worldToCameraMatrix) 
                               * cameraCoordinates;

    return glm::vec3(worldCoordinates);
}

问题是,这些值很容易是±3个单位(块宽为1个单位),只有在非常接近裁剪平面时才能得到足够的精度。

不准确的原因是使用单精度浮标,还是在我的计算中采取了一些步骤?如果我使用双精度值,并且OpenGL甚至支持深度缓冲区,这会有帮助吗?

最后,如果这个方法不起作用,我是否最好使用颜色if来准确地识别哪个多边形?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 20:32:46

颜色是要走的路,深度缓冲器的精度取决于平面距离,FBO纹理的分辨率,也取决于surface.The的法线或斜率,同样的精度问题发生在标准阴影过程中。(使用颜色比较容易,因为用深度相交测试一个物体有更多的“颜色”、深度值。如果一个物体有一种颜色,它会更准确。)

此外,也许只有我,但我喜欢避免相当复杂的矩阵计算,如果它们是不必要的。这就足够让可怜的CPU做其他的事情了。

对于双精度值,这可能会严重降低性能。我遇到过这样的性能下降,--我使用双倍比浮动慢了大约3倍

我的文章:GLSL performance - function return value/type和一篇关于这个的文章:https://superuser.com/questions/386456/why-does-a-geforce-card-perform-4x-slower-in-double-precision-than-a-tesla-card

因此,您可以使用64位浮点数(double):fp64.txt64bit.txt,但您不应该使用。

总之,我喜欢彩色聚乳酸,我喜欢颜色.

编辑:更多关于双精度深度:boards/showthread.php/173450-Double-Precision,这是一个很好的讨论

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20360051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档