sách gpt4 ai đã đi

Kiểm tra giao điểm đường thẳng-tam giác trả về giao điểm sai

In lại 作者:行者123 更新时间:2023-12-02 12:22:41 32 4
mua khóa gpt4 Nike

我正在为带有三角对象的 3D 场景编写一个非常基本的光线转换器,一切都工作正常,直到我决定尝试从场景原点 (0/0/0) 以外的点转换光线。

但是,当我将光线原点更改为 (0/1/0) 时,相交测试突然返回其中一个三角形的错误相交点。

我故意将光线“射向”三角形中心的方向,所以显然这应该是交点。我只是不知道到底是什么导致了我的代码中的错误结果。

(我目前没有使用 Möller-Trumbore,因为我想从更简单、更基本的方法开始,但在优化代码时我会切换到 Möller-Trumbore。)

这些是上述三角形的三个顶点的坐标:

-2.0/2.0/0.0 | 0.0/3.0/2.0 | 2.0/2.0/0.0

这是三角形的中心:

0.0/2.3333333333333335/0.6666666666666666

这是我的射线(原点 + t * 方向):

原点:0.0/1.0/0.0

方向(标准化):0.0/0.894427190999916/0.4472135954999579

这是我的程序计算出的明显错误的交点(在检查并发现该点不在三角形上之前:

0.0/5.0/1.9999999999999996

所以,是的,不难看出(即使没有计算器)光线应该在大约 t = 1.5 时击中三角形的中心。然而,我的代码返回 t 的值 4.472135954999579。

这是我的交叉点检查代码:

    public Vector intersectsWithTriangle(Ray ray, Triangle triangle) {
boolean intersects = false;

Vector triangleNormal = triangle.getNormalVector();
double normalDotRayDirection = triangleNormal.dotProduct(ray.getDirection());

if(Math.abs(normalDotRayDirection) == 0) {
// parallel
trả về giá trị null;
}


double d = triangleNormal.dotProduct(triangle.getV1AsVector());
double t = (triangleNormal.dotProduct(ray.getOrigin()) + d) / normalDotRayDirection;

// Check if triangle is behind ray
if (t < 0) return null;

// Get point of intersection between ray and triangle
Vector intersectionPoint = ray.getPosAt(t);

// Check if point is inside the triangle
if(isPointInTriangle(intersectionPoint, triangle, triangleNormal)) {
intersects = true;
return intersectionPoint;
}


trả về giá trị null;
}

你知道计算 t 的行有什么问题吗?

1 Câu trả lời

如果光线由 o + t*v 给出,并且三角形平面由法 vector N 和点 P 定义,则我们正在寻找t s.t。 n*(o + t*v) = n*p 给出 t = (n*p - n*o)/(n*v)。所以你似乎有一个符号错误,t 的正确计算应该是:

double t = (d - triangleNormal.dotProduct(ray.getOrigin())) / normalDotRayDirection;

只要光线原点是(0,0,0),错误的符号并不重要。

关于java - 线-三角形交点检查返回错误的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662439/

32 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com