Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Эффект Bump в OpenGL


Автор: Graf_h 31.10.2007, 10:45
Здраствуйте! Как сделать ефект bump в OpenGl?

Автор: arilou 31.10.2007, 11:53
1) http://www.paulsprojects.net/tutorials/simplebump/simplebump.html
2) http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=22
3) http://vcg.isti.cnr.it/activities/geometryegraphics/bumpmapping.html

http://www.google.com/search?hl=en&q=opengl%2C+bump+mapping&btnG=Google+Search

Автор: Graf_h 31.10.2007, 12:20
Спасибо arilou, я это видел!!С английским не очень!!! Нада переводить, а времени нету!!!Может по руски? 

Автор: ShellRaiser 31.10.2007, 13:37
трымай;)
http://www.gamedev.ru/faq/?id=21

Автор: Graf_h 31.10.2007, 13:59
Цитата(ShellRaiser @  31.10.2007,  13:37 Найти цитируемый пост)
трымай;)

Огромное спасибо!!! Как раз т о что мне нужно!!!! smile 

Автор: Graf_h 1.11.2007, 10:24
Здраствуйте!!! Вчера поднимал етот вопрос, мне надавали кучу ссилок!!! Посмотрел почитал, думал что все сделаю!!! Начал делать зашел в тупик!! Такая ситуация: есть две текстури - одна основная, другая черно - белая (карта высот)! Надо сделать ефект Bump. Счего начать? Как ето сделать? вичислять каждый раз при повороте обьекта или загрузить две текстуры, просчитать и наложить!!! Вообщем буду рад всем советам и примерам!! Помогите  smile !!!Завтра надо сдавать,я все сделал кроме етого ефекта!!!! 

Автор: Rickert 2.11.2007, 06:52
Тебе нужна карта нормалей, а не карта высот.

Автор: Graf_h 2.11.2007, 10:33
Cпасибо всем,кто помогал!!! Все сегодня здаю задание, тему закрываю!!! smile 

Автор: Rickert 2.11.2007, 10:40
Так в чём маза-то была?

Автор: Graf_h 2.11.2007, 13:11
Как реализовать самый простой DOT3 bumpmapping? 
Самый простой вариант это при помощи двух текстур (diffuse и normal map's) 

Первое. Нужно эти текстуры заготовить. Можно воспользоваться утилитой TGAtoDOT3 из RadeonSDK: 
Далее зарузив текстуры нужно настроить их вывод 
(нам также потребуется расширение GL_ARB_multitexture - его поддерживают все карты начиная с RIVA TNT и 
ещё ARB_texture_env_combine, которе поддерживают карты начиная с GeForce 256): 


  
Код

  glPushAttrib(GL_TEXTURE_BIT); // запомним состояние текстурных настроек
    glActiveTextureARB(GL_TEXTURE0_ARB); // сделаем активной первую текстуру
    glEnable(GL_TEXTURE_2D); // включим режим наложения для первой текстуры
    glBindTexture(GL_TEXTURE_2D, normalObj);// "наложим текстуру"

    // нормаль будет умножена на вектор источника света
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_DOT3_RGB_ARB);

    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR_ARB);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);

    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);

    glActiveTextureARB(GL_TEXTURE1_ARB);// сделаем активной вторую текстуру
    glEnable(GL_TEXTURE_2D);// включим режим наложения для второй текстуры
    glBindTexture(GL_TEXTURE_2D, tank2_tex);// "наложим текстуру"

    // диффузная текстура будет умножена на предыдущий результат
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);

    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);

    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);


    //здесь следует просто наложить две текстуры на полигон используя мощь расширения GL_ARB_multitexture ;-)
    //например так
    glBegin(GL_TRIANGLES);
    glNormal3fv(@SmoothNormals[Face[0]]);
          glMultiTexCoord2fARB(GL_TEXTURE0_ARB, TexVertex.x,TexVertex.y);
          glMultiTexCoord2fARB(GL_TEXTURE1_ARB, TexVertex.x,TexVertex.y);
    glVertex3fv(@Vertices[Face[0]]);

    glNormal3fv(@SmoothNormals[Face[1]]);
          glMultiTexCoord2fARB(GL_TEXTURE0_ARB, TexVertex.x,TexVertex.y);
          glMultiTexCoord2fARB(GL_TEXTURE1_ARB, TexVertex.x,TexVertex.y);
    glVertex3fv(@Vertices[Face[1]]);

    glNormal3fv(@SmoothNormals[Face[2]]);
          glMultiTexCoord2fARB(GL_TEXTURE0_ARB, TexVertex.x,TexVertex.y);
          glMultiTexCoord2fARB(GL_TEXTURE1_ARB, TexVertex.x,TexVertex.y);

    glVertex3fv(@Vertices[Face[2]]);

    glEnd;


    glActiveTextureARB(GL_TEXTURE0_ARB);//деактивируем первую текстуру
    glBindTexture(GL_TEXTURE_2D, 0);// отключим "наложение" первой текстуры
    glActiveTextureARB(GL_TEXTURE1_ARB);//деактивируем вторую текстуру
    glBindTexture(GL_TEXTURE_2D, 0); //отключим "наложение" второй текстуры
    glPopAttrib();// восстановим состояние текстурных настроек

 

Вот в кратце так реализуется DOT3 %-) 


M
arilou
в следующий раз воспользуйтесь тэгом code

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)