Вычисление текстурных координат
Доброго времени суток.
Возникла потребность в создании генератора текстурных координат. Предположим, существует набор вершин произвольного трёхмерного объекта, сложной формы. Так при загрузке или создании подобного объекта, а быть может прямо во время его отрисовки, было бы здорово рассчитать текстурные координаты. Основной проблемой является определение коэффициента масштабирования.
[spoiler]
У меня есть некоторые идеи на это счёт:
Собственно причём тут координаты вершин. Так вот, предположим, что текстурные координаты - это особенным образом трансформированные мировые координаты вершин. И чтобы связать их с мировыми координатами, я сначала связываю их с локальными координатами объекта, а потом, используя афинные преобразования, привожу тк к мировым.
Пример объекта, масштабированного после поворота, с текстурой наложенной приведённым способом, но без масштабирующего коэффициента:
Рисуем:
Есть ли какой - нибудь алгоритм вычисления масштабирующего коэффициента?
И быть может кто-нибудь пыталсь реализовать или реализовал эту задачу?
Буду благодарен за внимание.
</cut>
Возникла потребность в создании генератора текстурных координат. Предположим, существует набор вершин произвольного трёхмерного объекта, сложной формы. Так при загрузке или создании подобного объекта, а быть может прямо во время его отрисовки, было бы здорово рассчитать текстурные координаты. Основной проблемой является определение коэффициента масштабирования.
[spoiler]
У меня есть некоторые идеи на это счёт:
|
Собственно причём тут координаты вершин. Так вот, предположим, что текстурные координаты - это особенным образом трансформированные мировые координаты вершин. И чтобы связать их с мировыми координатами, я сначала связываю их с локальными координатами объекта, а потом, используя афинные преобразования, привожу тк к мировым.
Пример объекта, масштабированного после поворота, с текстурой наложенной приведённым способом, но без масштабирующего коэффициента:
Рисуем:
|
Есть ли какой - нибудь алгоритм вычисления масштабирующего коэффициента?
И быть может кто-нибудь пыталсь реализовать или реализовал эту задачу?
Буду благодарен за внимание.
</cut>
Gl.glMatrixMode(Gl.GL_TEXTURE);
Gl.glLoadIdentity();
Gl.glScalef(0.5f, 0.5f, 0.5f);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Но опять тот же вопрос, как вычислить параметры для glScalef(d)? Они не соответствуют параметрам, которые я применяю для масштабирования самого объекта.
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
Возможно, я не так понял вопрос…
Например для параллепипеда очень просто можно сохранять пропорции текстуры — домножить текстурные координаты на половину длины данной грани. Но это не работает в том случае, который на скриншоте(1), когда после поворота, осуществляется масштабирование объекта. Вопрос как сохранить пропорции текстуры для объекта? Как добиться того, чтобы например на цилиндре всегда были кирпичи одинакового размера?
простите за ошибки))
я вобще не знаю получится ли, хотя вроде должно
эт я так прочитал и сразу такой вот выход придумал
Или вот ещё идея пришла: Когда ты scale делаешь, то всё происходит в modelviev, а если после этого открыть матрицу текстуры и изменить scale на предыдущий размер? Но это бредово, но можно попробовать…
как ты узнаешь как у тебя изменился полигон?? вот ты его отскалил а получится что текстурка такаяя же осталось
кстати я тут подумал, не надо хранить скал каждого полигона
ы что их менять будешь?? или всю модель??
если трансформируешь модель то как я писал выше, если полигон то считай уже только относительно полигона, хотя я думаю что это не надо так как там должно быть и так нормально
для всех объектов сохранял масштабирующие коэффициенты, которые я просто накапливал в процессе трансформации, а затем
Gl.glMatrixMode(Gl.GL_TEXTURE);
Gl.glLoadIdentity();
Gl.glScalef(object.scaleX, object.scaleY, object.scaleZ);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
(Как мне предлагал amid в 1 комментарие)
Плюс использовал бесшовные текстуры, хорошего разрешения. Сделал их покрупнее, поделив текстурные координаты на некоторую величину.
Мне этого оказалось вполне достаточно для приличного отображения объектов на сцене))