| PMG http://forum.pmg.org.ru/ |
|
| Мультитекстурирование http://forum.pmg.org.ru/viewtopic.php?f=1&t=4018 |
Страница 1 из 1 |
| Автор: | virt3791 [ 23 авг 2007 04:08 ] |
| Заголовок сообщения: | Мультитекстурирование |
Пишу мультитекстурирование на расширениях. Функции вызываются по порядку. Код примерно такой Код: 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 слоя текстур. |
|
| Автор: | MagicWolf [ 23 авг 2007 08:43 ] |
| Заголовок сообщения: | |
Ты проверял, сколько у тебя на видюхе можно отобразить одновременно текстур? И зачем ты делаешь glDisable(GL_TEXTURE_2D);??? |
|
| Автор: | virt3791 [ 23 авг 2007 21:08 ] |
| Заголовок сообщения: | |
Делаю на расширениях, если использовать один объект то можно наложить хоть 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 захода делать? Просьба написать все тонкости мультитекстурирования, т.к. я уже говорил примера с кучей объектов я не нашел |
|
| Автор: | MagicWolf [ 24 авг 2007 09:37 ] |
| Заголовок сообщения: | |
Если отключить glDisable(GL_TEXTURE_2D), то какой тогда тип текстурирования будет? Примера с кучей объект я не знаю. Можно посмотреть 22 урок и BOGL - примеры из книги Beginning OpenGL Game Programming. Там есть пример мультитекстурирования. Несколько проходов используются, когда за один раз нельзя наложить все нужные текстуры. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|