Нанесение текстуры на шестиугольник - PullRequest
1 голос
/ 06 июня 2011

Я пытаюсь наложить текстуру на шестиугольник, но не могу определить координаты текстуры.

These are my vertices:
private float vertices[] = {     0.0f,   0.0f, 0.0f,    //center
                                 0.0f,   1.0f, 0.0f,    // top
                                -1.0f,   0.5f, 0.0f,    // left top
                                -1.0f,  -0.5f, 0.0f,    // left bottom
                                 0.0f,  -1.0f, 0.0f,    // bottom
                                 1.0f,  -0.5f, 0.0f,    // right bottom
                                 1.0f,  0.5f,  0.0f};   // right top

"Основа" шестиугольника вертикальная.(Главным образом потому, что я не мог понять, как вращать эту чертову штуку XD) Теперь дело в том, что я понятия не имею, как выяснить координаты текстуры.Я просмотрел всю сеть, но все еще не смог.

Я был бы очень признателен, если бы кто-нибудь объяснил мне, как вычислять координаты текстуры, потому что кроме текстурирования простого квадрата я просто не могуЯ боюсь, это нужно понять.

Примечание: это "квадратный" шестиугольник, поэтому он не основан на круге.РЕДАКТИРОВАТЬ: шестиугольник рисуется с помощью LG_TRIANGLE_STRIP.

ПРОБЛЕМА РЕШЕНА.Теперь я понимаю, как выяснить эти координаты.Вот те, которые работали для меня:

private float texture[] = {     0.5f, 0.5f,
                                0.5f, 0.0f,
                                0.0f, 0.25f,
                                0.0f, 0.75f,
                                0.5f, 1.0f,
                                1.0f, 0.75f,
                                1.0f, 0.25f };

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Координаты текстуры работают почти как проценты от 0,0 до 1,0, где (0,0, 0,0) слева внизу.Если ваше текстурное изображение имеет размер 128 x 128 пикселей, то точка (0,25, 0,25) будет 32 пикселя слева и снизу.Работая с тем, что у вас было, если вы пытались вписать шестиугольник точно в квадратную текстуру, ваши координаты должны выглядеть примерно так:

private float textureCoords = { 0.5f, 0.5f,
                                0.5f, 0.0f,
                                0.0f, 0.25f,
                                0.0f, 0.75f,
                                0.5f, 0.0f,
                                1.0f, 0.75f,
                                1.0f, 0.25f };

Если я правильно помню, вам также нужно изображениеперевернутый вертикально.

0 голосов
/ 11 апреля 2013

Я боролся с этой же проблемой уже несколько дней, и я думаю, что уже почти сошел с ума.Если вы представляете точки на своем шестиугольнике как A (и DGJ) в центре, B в 12 часов и CEFHIK, то другие точки вращаются против часовой стрелки вокруг центра.

Ваши вершины должныбыть перечислены в порядке - ABC DEF GHI J

A, D, G и J - все одинаковые координаты (ваша центральная точка)

Ваша текстура должна быть сшита в следующем порядке - AEF DCB GIH JK

A, D, G и J снова являются вашей центральной точкой.K должно быть таким же, как и E, поэтому текстура выравнивается сама с собой.

edit: Глядя на это обратно, я думаю, что может иметь больше смысла только менять каждую вторую и третью координаты и вычитать каждую координату y из1.0f.

edit 2: Да, у меня было время проверить.Кажется, просто установить для каждой координаты текстуры Y значение «- (высота вершин / многоугольника)».Вам не нужно даже менять каждую вторую и третью точку.Вам все еще нужно добавить дополнительную точку в конец массива координат текстуры;устанавливается так же, как вторая точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...