PMG

Форумы по созданию игр
Текущее время: 25 апр 2024 22:49

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Мультитекстурирование
СообщениеДобавлено: 23 авг 2007 04:08 
Не в сети
Новичок

Зарегистрирован: 23 авг 2007 03:52
Сообщения: 2
Пишу мультитекстурирование на расширениях. Функции вызываются по порядку.
Код примерно такой

Код:
Void init()
{
   glActiveTextureARB ( GL_TEXTURE0_ARB );
   ... загрузка / генерация текстуры
   glEnable(GL_TEXTURE_2D);
   glTexEnvi(.....)

   glActiveTextureARB ( GL_TEXTURE1_ARB );
   //код аналогичный
}


Void render()
{
   For(int i(0); i<количество_объектов)
   glBindTexture(GL_TEXTURE_2D, текстура_0уровня[i]);
   glBindTexture(GL_TEXTURE_2D, текстура_1уровня[i]);
   glBindTexture(GL_TEXTURE_2D, текстура_2уровня[i]);

   glBegin(GL_TRIANGLES);   
   glActiveTextureARB(GL_TEXTURE0_ARB);
   glDisable(GL_TEXTURE_2D);
   glMultiTexCoord2f( GL_TEXTURE0_ARB, … , … );

   glActiveTextureARB(GL_TEXTURE1_ARB);
   glDisable(GL_TEXTURE_2D);
   glMultiTexCoord2f( GL_TEXTURE1_ARB, … , … );

   glActiveTextureARB(GL_TEXTURE2_ARB);
   glDisable(GL_TEXTURE_2D);
   glMultiTexCoord2f( GL_TEXTURE2_ARB, … , … );

   glNormal3f(...)
   glVertex3f(...)
   
   ///
   glActiveTextureARB(GL_TEXTURE0_ARB);
….. дальше тоже самое но с другими координатами

   glEnd();   
}


Получается на объекты натягиваются не те текстуры, которые должны быть, а третий уровень не отображается, примера нигде не нашел, везде только один объект и 2 слоя текстур.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007 08:43 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Ты проверял, сколько у тебя на видюхе можно отобразить одновременно текстур?

И зачем ты делаешь glDisable(GL_TEXTURE_2D);???

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007 21:08 
Не в сети
Новичок

Зарегистрирован: 23 авг 2007 03:52
Сообщения: 2
Делаю на расширениях, если использовать один объект то можно наложить хоть 10 текстур, я проверял. Бока появляются если объектов больше.

glDisable(...) пишу потому-то подсказали "вродебы" знающие люди.
сейчас попробую более точно описать:

//есть такие массивы, размер у обоих одинаковый
int массив_текстурных_ид_0[...];
int массив_текстурных_ид_1[...];
int массив_текстурных_ид_2[...];

string массив_имен_текстур_0[...];
string массив_имен_текстур_1[...];
string массив_имен_текстур_2[...];

класс_объектов объект[...];
//у объекта есть ссылки на используемые текстуры и соответственно идентефикаторы
// далее буду писать гдето так массив_текстурных_ид_0[ объект.номер ]

//--------------------------другой модуль---------------------------
.....
//далее идет инициализация
for(int i(0); i<размер_массива; ++i)
{

glActiveTextureARB ( GL_TEXTURE0_ARB );
glGenTextures(1, &массив_текстурных_ид_0[i]);
//генерация текстуры упрощенная)
glBindTexture(GL_TEXTURE_2D, массив_текстурных_ид_0[i])
glEnable(GL_TEXTURE_2D);
glTexEnvi(.....);

glActiveTextureARB ( GL_TEXTURE1_ARB );
glGenTextures(1, &массив_текстурных_ид_1[i]);
glBindTexture(GL_TEXTURE_2D, массив_текстурных_ид_1[i])
glEnable(GL_TEXTURE_2D);
glTexEnvi(.....);

glActiveTextureARB ( GL_TEXTURE2_ARB );
glGenTextures(1, &массив_текстурных_ид_2[i]);
glBindTexture(GL_TEXTURE_2D, массив_текстурных_ид_2[i])
glEnable(GL_TEXTURE_2D);
glTexEnvi(.....);
}
......

//--------------------------другой модуль---------------------------
.....
//после инициализации идет рендер
for(int i(0); i<количество_объектов; ++i)
{
glBindTexture(GL_TEXTURE_2D, массив_текстурных_ид_2 [ объект[i].номер ])
glBindTexture(GL_TEXTURE_2D, массив_текстурных_ид_1 [ объект[i].номер ])
glBindTexture(GL_TEXTURE_2D, массив_текстурных_ид_0 [ объект[i].номер ])

glBegin(GL_TRIANGLES);

glActiveTextureARB(GL_TEXTURE0_ARB);
glDisable(GL_TEXTURE_2D);
glMultiTexCoord2f( GL_TEXTURE0_ARB, объект[i].ТекстурнаяКоординатаХ, объект[i].ТекстурнаяКоординатаY );
glNormal3f(....);
glVertex3f(....);


glActiveTextureARB(GL_TEXTURE1_ARB);
glDisable(GL_TEXTURE_2D);
glMultiTexCoord2f( GL_TEXTURE1_ARB, объект[i].ТекстурнаяКоординатаХ, объект[i].ТекстурнаяКоординатаY );
glNormal3f(....);
glVertex3f(....);

glActiveTextureARB(GL_TEXTURE2_ARB);
glDisable(GL_TEXTURE_2D);
//текстурные координаты у меня вобщемто разные)
glMultiTexCoord2f( GL_TEXTURE2_ARB, объект[i].ТекстурнаяКоординатаХ, объект[i].ТекстурнаяКоординатаY );
glNormal3f(....);
glVertex3f(....);

glEnd();

}
.....

Вот чего-то типо такого написано, а еще я нашел такой код

glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture1);

glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture2);



glBegin(GL_TRIANGLES);
glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, @TextureVertex[i, TextureFace[i, j].V1]);
glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, @LMTextureVertex[i, LMTextureFace[i, j].V1]);
glVertex3fv(@Vertex[i, face[i, j].V1]);

glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, @TextureVertex[i, TextureFace[i, j].V2]);
glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, @LMTextureVertex[i, LMTextureFace[i, j].V2]);
glVertex3fv(@Vertex[i, face[i, j].V2]);

glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, @TextureVertex[i, TextureFace[i, j].V3]);
glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, @LMTextureVertex[i, LMTextureFace[i, j].V3]);
glVertex3fv(@Vertex[i, face[i, j].V3]);
glEnd();

glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTextureARB(GL_TEXTURE0_ARB);

я так понял чтобы наложить 3 текстуры нужно 3 захода делать?
Просьба написать все тонкости мультитекстурирования, т.к. я уже говорил примера с кучей объектов я не нашел


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007 09:37 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Если отключить glDisable(GL_TEXTURE_2D), то какой тогда тип текстурирования будет?

Примера с кучей объект я не знаю. Можно посмотреть 22 урок и BOGL - примеры из книги Beginning OpenGL Game Programming. Там есть пример мультитекстурирования.

Несколько проходов используются, когда за один раз нельзя наложить все нужные текстуры.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB