Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OpenGL] Текстурирование GL_TRIANGLES 
V
    Опции темы
kefir01
Дата 24.4.2011, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Доброй ночи!

Такой вопрос:

Создаю прямоугольную область с помощью GL_TRIANGLES (нужно для создания развевающегося флага)
Вопрос кажется простым как на такой прямоугольник натянуть прямоугольную текстуру.

Делаю так, но ничего дельного не получаю...
Код

    glBegin(GL_TRIANGLES);
        glTexCoord2f(0,0);glVertex3f(pos.x(), pos.y(), pos.z());
        glTexCoord2f(1,0);glVertex3f(pos.x()+width, pos.y(), pos.z());
        glTexCoord2f(1,-1);glVertex3f(pos.x(), pos.y()-height, pos.z());

        glVertex3f(pos.x(), pos.y()-height, pos.z());
        glVertex3f(pos.x()+width, pos.y(), pos.z());
        glTexCoord2f(0,-1);glVertex3f(pos.x()+width, pos.y()-height, pos.z());
    glEnd();


Буду рад любой помощи
PM MAIL   Вверх
kefir01
Дата 24.4.2011, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Имело место моя ошибка. Правильно так сделать...
Код

        glTexCoord2f(0,0);glVertex3f(pos.x(), pos.y(), pos.z());
        glTexCoord2f(1,0);glVertex3f(pos.x()+width, pos.y(), pos.z());
        glTexCoord2f(0,-1);glVertex3f(pos.x(), pos.y()-height, pos.z());

        glTexCoord2f(0,-1);glVertex3f(pos.x(), pos.y()-height, pos.z());
        glTexCoord2f(1,0);glVertex3f(pos.x()+width, pos.y(), pos.z());
        glTexCoord2f(1,-1);glVertex3f(pos.x()+width, pos.y()-height, pos.z());


Но как быть еслиу меня прямоугольник из 4, 9, 16 треугольников?

Делить 1 в glTexCoord2f на 4/9/16...?

PM MAIL   Вверх
kefir01
Дата 24.4.2011, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



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

Код

    glBegin(GL_TRIANGLES);

    float d = (float)1/(width/2);

    for(int x=0;x<width/2;x++)
    {
        for(int y=0;y<width/2;y++)
        {
            float tx1[2] = {x*d,-y*d};
            float tx2[2] = {(d + x*d),(-y*d)};
            float tx3[2] = {x*d,-(y*d + d)};
            float tx4[2] = {(d + x*d),-(y*d + d)};
            
            float pos1[3] = {pos.x()+width*d*x, pos.y()-height*d*y, pos.z()};
            float pos2[3] = {(pos.x() + width*d*x + width*d), pos.y()-height*d*y, pos.z()};
            float pos3[3] = {pos.x()+width*d*x, (pos.y() - (height*d*y + height*d)), pos.z()};
            float pos4[3] = {(pos.x() + width*d*x + width*d), (pos.y() - (height*d*y + height*d)), pos.z()};

            glTexCoord2fv(tx1);glVertex3fv(pos1);
            glTexCoord2fv(tx2);glVertex3fv(pos2);
            glTexCoord2fv(tx3);glVertex3fv(pos3);

            glTexCoord2fv(tx3);glVertex3fv(pos3);
            glTexCoord2fv(tx2);glVertex3fv(pos2);
            glTexCoord2fv(tx4);glVertex3fv(pos4);
        }
    }
    glEnd();


Есть подозрение, что можно умнее. Очень хотелось бы получить какую-нибудь информацию по сабжу.

Это сообщение отредактировал(а) kefir01 - 24.4.2011, 04:43
PM MAIL   Вверх
kefir01
Дата 25.4.2011, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Злые вы )

Код

    lineNodes = 1 + width/2;
    totalNodes = pow(lineNodes, 2);

    for(int x=0;x<lineNodes;x++)
    {
        for(int y=0;y<lineNodes;y++)
        {
            QVector3D nPos = pos + QVector3D((float)x*((float)width/(lineNodes-1)), (float)y*((float)height/(lineNodes-1)), 0);
            QVector2D nTex((float)x/lineNodes, (float)y/lineNodes);

            nodes.append(QKFlagNode(nPos, nTex));
        }
    }


Это сообщение отредактировал(а) kefir01 - 25.4.2011, 07:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.