текстура треугольника вращается и переворачивается горизонтально - PullRequest
0 голосов
/ 04 апреля 2019

пишу трассировщик лучей для класса, и у меня возникает странная проблема, которую я, похоже, не могу определить источник. У меня есть моя текстура и по какой-то причине она вращается на 90 по часовой стрелке, а затем переворачивается горизонтально. Я использую барицентрические координаты для навигации по моим координатам в ультрафиолетовом пространстве.

Я уже пытался поиграть с тем, как я генерирую u, v, w. но, похоже, это приводит к той же проблеме.

В выпуске программы видно моя фактическая текстура теста

//how i'm generating my barycentric coordinates:
Ph = Pe + Npe*Th; //Ph is the point in space that is being tested, I'm generating u,v,w while testing inside/outside triangle (Pe = Point of eye, Npe = vector from eye to point on triangle, Th = time hit)

        A = glm::cross(P1 - P0, P2 - P0);
        //glm::vec3 A0 = glm::cross(Ph - P1, Ph - P2);
        //glm::vec3 A1 = glm::cross(Ph - P2, Ph - P0);
        //glm::vec3 A2 = glm::cross(Ph - P0, Ph - P1);
        glm::vec3 A0 = glm::cross(P1-Ph, P2-Ph);
        glm::vec3 A1 = glm::cross(P2-Ph, P0-Ph);
        glm::vec3 A2 = glm::cross(P0-Ph, P1-Ph);

        if (glm::dot(n0, glm::normalize(A0)) < 0 || glm::dot(n0, glm::normalize(A1)) < 0 || glm::dot(n0, glm::normalize(A2)) < 0)
        {
            //point is outside triangle
            return -1;
        }


        //normalize and chec k dot products to detrmine if they are facing the right way.

        u = glm::length(A0) / glm::length(A);
        v = glm::length(A1) / glm::length(A);
        w = 1 - u - v;

И вот часть, которая использует ее для вычисления координат текстуры.

//portion of code calculating texture coordinates
//calculate new location of texture coordinate, assume z position is 0
        glm::vec3 textureCo = P0TexCo*this->u + P1TexCo*this->v + P2TexCo*this->w;
        u = textureCo[0];
        v = textureCo[1];

1 Ответ

0 голосов
/ 18 апреля 2019

Нашел проблему, это было связано с тем, как opengl интерпретирует координаты и в каком углу он начинает отображать пиксели из массива.решение состоит в том, чтобы инвертировать изображение после его загрузки.

...