Как вы можете получить расстояние между лучом и плоскостью в Python 3? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть класс Plane с методом intersects. Метод принимает луч, который имеет начало (Vector3) и направление (Vector3), и мне нужно получить расстояние между пересечением луча и плоскости или, если его нет, вернуть -1. Класс Plane имеет расстояние от источника мира (Float) и нормали (Vector3).

Мой текущий код не работает, потому что плоскость покрывает каждый объект, даже если он должен быть дальше. Освещение также не работает, что означает, что расстояние является неточным.

Это мой код:

class Plane:
    def __init__(self, distance, normal, color, ambient, diffuse, specular):
        self.distance = distance
        self.normal = normal

        self.color = color
        self.ambient = ambient
        self.diffuse = diffuse
        self.specular = specular

    def intersects(self, ray):
        a = ray.direction.dot_product(self.normal)

        if (a != 1):
            b = self.normal.dot_product(ray.origin + (self.normal * self.distance).negative())

            if (b > 0):
                return b

        return -1

    def normal_at(self, hit_point):
        return self.normal
...