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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите, пожалуйста, с альфа тестом, как сделать фон текстуры прозрачным? 
:(
    Опции темы
vs94
Дата 4.5.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня есть текстура с изображением черной стрелки на белом фоне...мне нужно булый фон сделать прозрачным.....помогите пожалуйста разобраться......меня интересует как это будет выглядеть в программном коде.....вот так я загружаю текстуру
Код

data = read_bmp("all//2.bmp", &width, &height, &components);    // читаем данные из файла
if (data) {                                                // если получилось...
        glGenTextures(1, &id7);// генерируем идентификатор для текстуры
        glBindTexture(GL_TEXTURE_2D, id7);      // ставим этот идентификатор текущим     

                                заносим данные для текстуры в видеопамять, теперь можно текстурой пользоваться
gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);
        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        free_bmp(data);  // данные из системной памяти можно удалить
    }
вот так я рисую стрелку...она у меня еще крутиться
glBindTexture(GL_TEXTURE_2D,id7);

//секундная стрелка
glRotatef(-6*s,0,0,1);
glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex3f(-0.05,0,-0.64);
    glTexCoord2f(1,0); glVertex3f(0.05,0,-0.64);
    glTexCoord2f(1,1); glVertex3f(0.05,0.9,-0.64);
    glTexCoord2f(0,1); glVertex3f(-0.05,0.9,-0.64);
glEnd();
glRotatef(6*s,0,0,1);

Заранее спасибо!!
вот сама текстура

Это сообщение отредактировал(а) Rickert - 5.5.2011, 04:35

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  2.jpg 1,12 Kb
PM MAIL   Вверх
Vetos
Дата 4.5.2011, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 4



Во первых код нужно помечать тегом "Код". Желательно еще бы указать тип переменной data, я точно неуверен, такой метод загрузки текстур не юзал, попробуй так:

Код

data = read_bmp("all//2.bmp", &width, &height, &components);    // читаем данные из файла
if (data) {                                                // если получилось...
        glGenTextures(1, &id7);// генерируем идентификатор для текстуры
        glBindTexture(GL_TEXTURE_2D, id7);      // ставим этот идентификатор текущим     
        //задаешь новый массив с альфа каналом(4ре компоненты)
        GLubyte * alphadata;
        alphadata = new GLubyte[width*height*4];
        
        //далее в цикле ты перебиваешь цвет, плюс вычисляешь значение альфа канала, примерно так:
        GLubyte R,G,B,A;
        for(int i=0; i<width; i++)
             for(int j=0; j<height; j++)
             {
                     B = data[(i*width+j)*3];
                     G = data[(i*width+j)*3+1];
                     R = data[(i*width+j)*3+2];
                     if((B+G+R)>0)A=0;else A=255;//или 254, да скорее 254;тут зависит какой цвет у тебя невидимый
                     alphadata[(i*width+j)*4] = B;
                     alphadata[(i*width+j)*4+1] = G;
                     alphadata[(i*width+j)*4+2] = R;
                     alphadata[(i*width+j)*4+3] = A;

             };


                                заносим данные для текстуры в видеопамять, теперь можно текстурой пользоваться
gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, alphadata);
//тут фиг его знает, возможно нужно поменять значение components на 4(скорее обязательно), на какое точно смотри в справке по
//gluBuild2DMipmaps;

        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        free_bmp(data);  // данные из системной памяти можно удалить
        delete[] alphadata;
    }
вот так я рисую стрелку...она у меня еще крутиться
glBindTexture(GL_TEXTURE_2D,id7);

//секундная стрелка
glRotatef(-6*s,0,0,1);
glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex3f(-0.05,0,-0.64);
    glTexCoord2f(1,0); glVertex3f(0.05,0,-0.64);
    glTexCoord2f(1,1); glVertex3f(0.05,0.9,-0.64);
    glTexCoord2f(0,1); glVertex3f(-0.05,0.9,-0.64);
glEnd();
glRotatef(6*s,0,0,1);

А вообще лучше грузить из tga, там ты в редакторе можешь задать альфаканал, такой как тебе нужно.
Пиши если что невыходит.


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Rickert
Дата 5.5.2011, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Модератор: Пользуйтесь тэгом "код".


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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