| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Проблема с наложением текстур. |
| Автор: KaraKum 22.6.2008, 10:28 | ||
| Доброе время суток. Такой обычный кусок кода:
Но вот текстура накладывается не только на этот прямоугольник, но и на всё подряд, причём половина сцены вообще не рисуется. Пробовал закомментировать функцию glEnable(GL_TEXTURE_2D); и в инициализации и в этой части кода (то есть везде) - всё равно текстура накладывается! (и также везде). Подскажите, пожалуйста, в чём проблема? |
| Автор: FIaR 24.6.2008, 00:13 |
| Насколько я еще помню, glEnable(GL_TEXTURE_2D); нужно вставлять перед glBegin(GL_.....);, а не внутри. Т.е. Если хочеш затекстуировать прямоугольник, то он должен быть отдельным мэшем. |
| Автор: KaraKum 24.6.2008, 00:40 |
| Помогло. Молодец, ты. Такую мелочь запомнил - репутация +1. Полигон, на который накладывается текстура, окрашивается в чёрный цвет, а сама текстура рисуется только цветом, который выбран для заполнения полигона. В чём дело? |
| Автор: FIaR 24.6.2008, 07:41 |
| Может проблема с текстурными координатами, но лучше бы было посмотреть на код отрисовки |
| Автор: KaraKum 24.6.2008, 09:42 | ||||
Код инициализации DevIL и загрузки текстуры:
Код прорисовки полигона:
|
| Автор: FIaR 24.6.2008, 15:50 | ||
Попробуй так:
*.bmp формат - это GL_BGR, поэтому для универсальности кода, лучше пользоваться ilGetInteger(IL_IMAGE_FORMAT) |
| Автор: KaraKum 24.6.2008, 16:10 |
| Да, точно. Но от этого только цвета инвертируются, но текстура так и рисуется только одним цветом (цветом полигона, на который она "наклеивается"). |
| Автор: FIaR 24.6.2008, 16:54 |
| Я не совсем понимаю, зачем тут нужен unTexture[0] = ilutGLBindTexImage(); А если загрузить текстуру из JPG или TGA - тот же результат?? |
| Автор: KaraKum 24.6.2008, 17:13 | ||||
Так было в статье, по которой я писал этот код. Удалил эту строку и всё также работает.
Да, результат тот же (текстура рисуется только чёрным цветом и цветом, которым закрашен полигон, на который она наложена). |
| Автор: KaraKum 27.6.2008, 10:33 |
| Решил вопрос. Чтобы текстура рисовалась только своим цветом и не смешивалась с цветом полигона, на который она накладывается (что не по умолчанию), нужно вызвать функцию glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); Вопрос решён |
| Автор: sgi1981 31.7.2008, 19:46 | ||
| А вот у меня вопрос следующий. Есть возможность написать свой собственный шейдер фрагментов и загрузить его на выполнение в графическую карту. Допустим, на входе у шейдера атрибуты фрагментов такие fragment.color fragment.texcoord[0] texture[0] Пример части шейдера
Но ведь на фрагмент может быть не наложена никакая текстура. Тогда нужно это как-то определить. Допустим, что на вход шейдера поступает фрагмент примитива без текстуры. Тогда что будет содержаться в texture[0] ? Как пропустить наложение цвета текселя. Дело в том, что я уже испытывал свой шейдер фрагментов для генерации тумана, и те примитивы, что задавались без текстуры - рисовались цветом одного из текселей текстуры, которая была наложена на другое тело. |