Я пытаюсь реализовать текстуры для сфер в моем лучом. Мне удалось что-то сделать, но я не уверен в его правильности. Ниже приведен код для получения координат текстуры. На данный момент текстура является случайной и генерируется во время выполнения.Реализация текстуры трассировки лучей для сфер
virtual void GetTextureCoord(Vect hitPoint, int hres, int vres, int& x, int& y) {
float theta = acos(hitPoint.getVectY());
float phi = atan2(hitPoint.getVectX(), hitPoint.getVectZ());
if (phi < 0.0) {
phi += TWO_PI;
}
float u = phi * INV_TWO_PI;
float v = 1 - theta * INV_PI;
y = (int) ((hres - 1) * u);
x = (int) ((vres - 1) * v);
}
Это как сферы теперь посмотрите:
Я должен был нормализовать координаты точки попадания, чтобы получить сферы, чтобы выглядеть. В противном случае они будут выглядеть следующим образом:
Был нормализацию точки попадания координат правильного подхода, или еще что-то нарушается в моем коде? Спасибо!
Вместо нормализации хитпоинта, я пытался переводить ее на мировом происхождение (если сфера центр был там), и был получен следующий результат:
Я использую разрешение 256x256 текстура кстати.
Является ли 'hitPoint' всегда вычисляемым, как если бы сфера была в начале координат (а затем преобразована в другое место), или вы напрямую поддерживаете сферы, не связанные с началом координат, в вашем тесте пересечения? Вычисление phi и theta с использованием косинуса и касательной дает вам значения, соответствующие шаре, центрированному в начале координат, поэтому, если на самом деле сферы нет, отображение координаты текстуры не будет тем, что вы, вероятно, запланировали. – Wyzard
BTW, 'u' и' v' - это координаты текстуры, и функция для вычисления координат текстур обычно просто возвращает их. Сопоставление их с целыми индексами texel не относится к сферам и должно выполняться в другом месте. – Wyzard
У меня была аналогичная проблема, когда я генерировал текстуры во время выполнения для алгоритма штриховки в реальном времени. Моя ошибка заключалась в том, чтобы вычислить координаты текстуры в мировом пространстве, в то время как их нужно рассматривать в локальном пространстве. hitPoint находится в мире/в представлении или в локальном пространстве? – codingadventures