воскресенье, 10 февраля 2013 г.

текстурные координаты opengl delphi

QVector<GLfloat> vecTextures; // вектор текстурных координат

QVector<GLfloat> vecVertices; // вектор вершин

const GLfloat step=pi/np; // шаг изменения углов

const GLuint np=36; // число частей, на которое делится полуокружность

const GLfloat pi=3.141593, k=pi/180;

// глобальные переменные

Вот возможный вариант, как процедурно определить массивы вершин, текстурных координат и индексов вершин для рассматриваемой задачи:

Ответ в обоих случаях: создать дополнительные вершины в местах сшивания поверхности фигуры. Таким образом, некоторые вершины будут совпадать по пространственным координатам, но отличаться текстурными координатами. Теперь вершин, соответствующих полюсам, станет значительно больше, но у каждой из них будет своя текстурная координата свой пиксель в самой верхней или самой нижней полоске пикселей. Количество вершин на границе сшивания сферы увеличится в два раза; текстурные координаты одной части вершин будут лежать на правой границе текстуры, другой части на левой. Т.е. как бы вершины продублируются и обеспечат стыковку текстуры на правой и левой границах. Посмотрите на иллюстрирующий рисунок:

2) Как замкнуть текстуру между её правой и левой границами? Ведь одна вершина может иметь только одну текстурную координату.

1) Какие текстурные координаты дать полюсам: северному и южному? Ведь, вообще говоря, вся полоска верхних пикселей текстуры относится к одной вершине: северному полюсу. Та же самая ситуация и с южным полюсом.

Но сразу же возникают два важных вопроса:

x=phi/(2*pi); // x=s, pi=3.141593

Немного поразмыслив, мы определяем, что текстурные координаты равны:

Текстура размером 512x256 позаимствована из CD, распространяющегося вместе с книгой: Евченко А.И. «OpenGL и DirectX. Программирование графики. Для профессионалов», и преобразована в формат .png. Прежде всего, нужно разобраться с геометрией фигуры и проекцией текстуры. В данном случае свяжем текстурную координату x с координатой вершины «фи» (угол фи), а текстурную координату y с координатой вершины «тэта» (угол тэта). Углы тэта и фи есть просто вторая и третья координаты в сферической системе координат; а первая координата для всех вершин одинакова и равна радиусу сферы (шара) R. Посмотрите на рисунки, на которых показано, как связать между собой текстурные координаты и координаты вершин в пространстве.

Вот отличный пример: наложение текстуры на шар. Поверхность шара это классический пример искривлённой поверхности. Нарисованная текстура тоже должна учитывать искривление так, чтобы можно было без особых затруднений вычислить текстурные координаты. К тому же поверхность шара замкнутая, поэтому нужно уточнить, как замыкать текстуру на такой поверхности. Сейчас разберём, как наложить текстуру поверхности Земли на шар.

Пример: наложение текстуры на шар

OpenGL на Qt 4. Это просто! (часть 2) (4 стр.)

/ / / OpenGL на Qt 4. Это просто! (часть 2) (4 стр.)

Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум

OpenGL на Qt 4. Это просто! (часть 2) (4 стр.) / Статьи / Программирование игр / GameDev.ru Разработка игр

Комментариев нет:

Отправить комментарий