gpt4 book ai didi

math - 实现光线拾取

转载 作者:行者123 更新时间:2023-12-02 16:06:33 25 4
gpt4 key购买 nike

我有一个使用 directx 和 openGL 的渲染器,以及一个 3d 场景。视口(viewport)和窗口的尺寸相同。

如何以独立于平台的方式实现拾取给定的鼠标坐标 x 和 y?

最佳答案

如果可以的话,通过计算从眼睛穿过鼠标指针的光线并将其与模型相交来在 CPU 上进行拾取。

如果这不是一个选项,我会选择某种类型的 ID 渲染。为每个要选择的对象指定唯一的颜色,用这些颜色渲染对象,最后从鼠标指针下的帧缓冲区中读出颜色。

编辑:如果问题是如何从鼠标坐标构建射线,您需要以下内容:投影矩阵P和相机变换C 。如果鼠标指针的坐标为(x, y)并且视口(viewport)的大小为(宽度,高度),则沿射线的剪辑空间中的一个位置为:

mouse_clip = [
float(x) * 2 / float(width) - 1,
1 - float(y) * 2 / float(height),
0,
1]

(请注意,我翻转了 y 轴,因为鼠标坐标的原点通常位于左上角)

以下情况也是正确的:

mouse_clip = P * C * mouse_worldspace

这给出:

mouse_worldspace = inverse(C) * inverse(P) * mouse_clip

我们现在有:

p = C.position(); //origin of camera in worldspace
n = normalize(mouse_worldspace - p); //unit vector from p through mouse pos in worldspace

关于math - 实现光线拾取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2093096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com