Jeff Molofee - NeHe's OpenGL Tutorials

Здесь есть возможность читать онлайн «Jeff Molofee - NeHe's OpenGL Tutorials» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на английском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

NeHe's OpenGL Tutorials: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «NeHe's OpenGL Tutorials»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

NeHe's OpenGL Tutorials — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «NeHe's OpenGL Tutorials», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

glTranslatef(0.0f,0.0f,z);

glRotatef(xrot,1.0f,0.0f,0.0f);

glRotatef(yrot,0.0f,1.0f,0.0f);

// Transform The Lightposition Into Object Coordinates:

l[0]=LightPosition[0];

l[1]=LightPosition[1];

l[2]=LightPosition[2];

l[3]=1.0f; // Homogenous Coordinate

VMatMult(Minv,l);

First Pass:

• No Blending

• No Lighting

Set up the texture-combiner 0 to

• Use bump-texture

• Use not-offset texture-coordinates

• Texture-Operation GL_REPLACE, resulting in texture just being drawn

Set up the texture-combiner 1 to

• Offset texture-coordinates

• Texture-Operation GL_ADD, which is the multitexture-equivalent to ONE, ONE– blending.

This will render a cube consisting out of the grey-scale erode map.

// TEXTURE-UNIT #0

glActiveTextureARB(GL_TEXTURE0_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, bump[filter]);

glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);

glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);

// TEXTURE-UNIT #1

glActiveTextureARB(GL_TEXTURE1_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, invbump[filter]);

glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);

glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);

// General Switches

glDisable(GL_BLEND);

glDisable(GL_LIGHTING);

Now just render the faces one by one, as already seen in doMesh1TexelUnits(). Only new thing: Uses glMultiTexCoor2fARB() instead of just glTexCoord2f(). Note that you must specify which texture-unit you mean by the first parameter, which must be GL_TEXTUREi_ARB with i in [0..31]. (What hardware has 32 texture-units? And what for?)

glBegin(GL_QUADS);

// Front Face

n[0]=0.0f;

n[1]=0.0f;

n[2]=1.0f;

s[0]=1.0f;

s[1]=0.0f;

s[2]=0.0f;

t[0]=0.0f;

t[1]=1.0f;

t[2]=0.0f;

for (i=0; i<4; i++) {

c[0]=data[5*i+2];

c[1]=data[5*i+3];

c[2]=data[5*i+4];

SetUpBumps(n,c,l,s,t);

glMultiTexCoord2fARB(GL_TEXTURE0_ARB, data[5*i], data[5*i+1]);

glMultiTexCoord2fARB(GL_TEXTURE1_ARB, data[5*i]+c[0], data[5*i+1]+c[1]);

glVertex3f(data[5*i+2], data[5*i+3], data[5*i+4]);

}

// Back Face

n[0]=0.0f;

n[1]=0.0f;

n[2]=-1.0f;

s[0]=-1.0f;

s[1]=0.0f;

s[2]=0.0f;

t[0]=0.0f;

t[1]=1.0f;

t[2]=0.0f;

for (i=4; i<8; i++) {

c[0]=data[5*i+2];

c[1]=data[5*i+3];

c[2]=data[5*i+4];

SetUpBumps(n,c,l,s,t);

glMultiTexCoord2fARB(GL_TEXTURE0_ARB, data[5*i], data[5*i+1]);

glMultiTexCoord2fARB(GL_TEXTURE1_ARB, data[5*i]+c[0], data[5*i+1]+c[1]);

glVertex3f(data[5*i+2], data[5*i+3], data[5*i+4]);

}

// Top Face

n[0]=0.0f;

n[1]=1.0f;

n[2]=0.0f;

s[0]=1.0f;

s[1]=0.0f;

s[2]=0.0f;

t[0]=0.0f;

t[1]=0.0f;

t[2]=-1.0f;

for (i=8; i<12; i++) {

c[0]=data[5*i+2];

c[1]=data[5*i+3];

c[2]=data[5*i+4];

SetUpBumps(n,c,l,s,t);

glMultiTexCoord2fARB(GL_TEXTURE0_ARB, data[5*i], data[5*i+1]);

glMultiTexCoord2fARB(GL_TEXTURE1_ARB, data[5*i]+c[0], data[5*i+1]+c[1]);

glVertex3f(data[5*i+2], data[5*i+3], data[5*i+4]);

}

// Bottom Face

n[0]=0.0f;

n[1]=-1.0f;

n[2]=0.0f;

s[0]=-1.0f;

s[1]=0.0f;

s[2]=0.0f;

t[0]=0.0f;

t[1]=0.0f;

t[2]=-1.0f;

for (i=12; i<16; i++) {

c[0]=data[5*i+2];

c[1]=data[5*i+3];

c[2]=data[5*i+4];

SetUpBumps(n,c,l,s,t);

glMultiTexCoord2fARB(GL_TEXTURE0_ARB, data[5*i], data[5*i+1]);

glMultiTexCoord2fARB(GL_TEXTURE1_ARB, data[5*i]+c[0], data[5*i+1]+c[1]);

glVertex3f(data[5*i+2], data[5*i+3], data[5*i+4]);

}

// Right Face

n[0]=1.0f;

n[1]=0.0f;

n[2]=0.0f;

s[0]=0.0f;

s[1]=0.0f;

s[2]=-1.0f;

t[0]=0.0f;

t[1]=1.0f;

t[2]=0.0f;

for (i=16; i<20; i++) {

c[0]=data[5*i+2];

c[1]=data[5*i+3];

c[2]=data[5*i+4];

SetUpBumps(n,c,l,s,t);

glMultiTexCoord2fARB(GL_TEXTURE0_ARB, data[5*i], data[5*i+1]);

glMultiTexCoord2fARB(GL_TEXTURE1_ARB, data[5*i]+c[0], data[5*i+1]+c[1]);

glVertex3f(data[5*i+2], data[5*i+3], data[5*i+4]);

}

// Left Face

n[0]=-1.0f;

n[1]=0.0f;

n[2]=0.0f;

s[0]=0.0f;

s[1]=0.0f;

s[2]=1.0f;

t[0]=0.0f;

t[1]=1.0f;

t[2]=0.0f;

for (i=20; i<24; i++) {

c[0]=data[5*i+2];

c[1]=data[5*i+3];

c[2]=data[5*i+4];

SetUpBumps(n,c,l,s,t);

glMultiTexCoord2fARB(GL_TEXTURE0_ARB, data[5*i], data[5*i+1]);

glMultiTexCoord2fARB(GL_TEXTURE1_ARB, data[5*i]+c[0], data[5*i+1]+c[1]);

glVertex3f(data[5*i+2], data[5*i+3], data[5*i+4]);

}

glEnd();

Second Pass

• Use the base-texture

• Enable Lighting

• No offset texturre-coordinates → reset GL_TEXTURE-matrix

• Reset texture environment to GL_MODULATE in order to do OpenGLLighting (doesn't work otherwise!)

This will render our complete bump-mapped cube.

glActiveTextureARB(GL_TEXTURE1_ARB);

glDisable(GL_TEXTURE_2D);

glActiveTextureARB(GL_TEXTURE0_ARB);

if (!emboss) {

glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBindTexture(GL_TEXTURE_2D,texture[filter]);

glBlendFunc(GL_DST_COLOR,GL_SRC_COLOR);

glEnable(GL_BLEND);

glEnable(GL_LIGHTING);

doCube();

}

Last Pass

• Update Geometry (esp. rotations)

• Do The Logos

xrot+=xspeed;

yrot+=yspeed;

if (xrot>360.0f) xrot-=360.0f;

if (xrot<0.0f) xrot+=360.0f;

if (yrot>360.0f) yrot-=360.0f;

if (yrot<0.0f) yrot+=360.0f;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «NeHe's OpenGL Tutorials»

Представляем Вашему вниманию похожие книги на «NeHe's OpenGL Tutorials» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Jeff Jacobson - Sleep Tight
Jeff Jacobson
Jeff Salyards - Veil of the Deserters
Jeff Salyards
Jeff LaSala - The Darkwood Mask
Jeff LaSala
Jeff Lindsay - Dexter's Final Cut
Jeff Lindsay
libcat.ru: книга без обложки
Неизвестный Автор
libcat.ru: книга без обложки
Неизвестный Автор
libcat.ru: книга без обложки
Неизвестный Автор
libcat.ru: книга без обложки
Неизвестный Автор
Отзывы о книге «NeHe's OpenGL Tutorials»

Обсуждение, отзывы о книге «NeHe's OpenGL Tutorials» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x