У меня есть класс 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