Я не собираюсь публиковать какой-либо код для этого вопроса, потому что для этого потребуется слишком много контекста, но я объясню концептуально, что я делаю.
Я создаю простой трассировщик лучей, который использует аффинные преобразования. Я имею в виду, что я пересекаю все лучи из координат камеры с общими формами. Все формы имеют связанные аффинные преобразования, и лучи сначала умножаются на обратные значения этих преобразований, прежде чем пересекаются с объектами сцены.
Так, например, скажем, я хотел сферу радиуса 3, расположенную в (10,10,10). Я создаю сферу и даю ей матрицу преобразования, представляющую это преобразование.
Я создаю луч в координатах камеры. Я умножаю луч на обратную матрицу преобразования сферы и пересекаю его с общей сферой (r = 1 в (0,0,0)). Я беру расстояние вдоль этого общего луча в точке пересечения и, используя его, нахожу общий нормаль и точку вдоль исходного луча и сохраняю их в объект Преобразования (вместе с расстоянием (t) и фактическое преобразование).
Когда приходит время выяснить цвет этой точки пересечения, я беру обратное преобразование преобразования преобразования и умножаю его на обобщенную нормаль , чтобы найти нормаль. Точка пересечения - это просто точка вдоль исходного нетрансформированного луча, если я использую значение t от пересечения обратного трансформированного луча.
Проблема в том, что когда я делаю так, преобразования имеют странные эффекты. Основным эффектом является то, что трансформации, кажется, тянут огни сцены вместе с ними. Если я создаю кучу изображений и применяю немного большее вращение к сфере с каждым кадром, это, кажется, тянет огни в сцене вокруг нее. Вот пример
Я, честно говоря, не могу понять, что я делаю здесь неправильно, но я вырываю волосы. Я не могу придумать какой-либо веской причины, чтобы это произошло. Любая помощь будет принята с благодарностью.