Nie dawno zacząłem bawić się teksturami.
Teksturowałem sobie przykład z kursu o tak:
glBegin( GL_LINES );
glTexCoord3f(1,1,1);
glVertex3f( 1.0, 1.0, 1.0 );
glTexCoord3f(1,-1,1);
glVertex3f( 1.0, - 1.0, 1.0 );
////
glTexCoord3f(1,-1,1);
glVertex3f( 1.0, - 1.0, 1.0 );
glTexCoord3f(1,-1,-1);
glVertex3f( 1.0, - 1.0, - 1.0 );
////
glTexCoord3f(1,-1,-1);
glVertex3f( 1.0, - 1.0, - 1.0 );
glTexCoord3f(1,1,-1);
glVertex3f( 1.0, 1.0, - 1.0 );
////
glTexCoord3f(1,1,-1);
glVertex3f( 1.0, 1.0, - 1.0 );
glTexCoord3f(1,1,1);
glVertex3f( 1.0, 1.0, 1.0 );
////
glTexCoord3f(-1,1,-1);
glVertex3f( - 1.0, 1.0, 1.0 );
glTexCoord3f(-1,-1,1);
glVertex3f( - 1.0, - 1.0, 1.0 );
////
glTexCoord3f(-1,-1,1);
glVertex3f( - 1.0, - 1.0, 1.0 );
glTexCoord3f(-1,-1,-1);
glVertex3f( - 1.0, - 1.0, - 1.0 );
////
glTexCoord3f(-1,-1,-1);
glVertex3f( - 1.0, - 1.0, - 1.0 );
glTexCoord3f(-1,1,-1);
glVertex3f( - 1.0, 1.0, - 1.0 );
////
glTexCoord3f(-1,1,-1);
glVertex3f( - 1.0, 1.0, - 1.0 );
glTexCoord3f(-1,1,1);
glVertex3f( - 1.0, 1.0, 1.0 );
////
glTexCoord3f(1,1,-1);
glVertex3f( 1.0, 1.0, 1.0 );
glTexCoord3f(-1,1,-1);
glVertex3f( - 1.0, 1.0, 1.0 );
////
glTexCoord3f(1,-1,1);
glVertex3f( 1.0, - 1.0, 1.0 );
glTexCoord3f(-1,-1,1);
glVertex3f( - 1.0, - 1.0, 1.0 );
////
glTexCoord3f(1,-1,-1);
glVertex3f( 1.0, - 1.0, - 1.0 );
glTexCoord3f(-1,-1,-1);
glVertex3f( - 1.0, - 1.0, - 1.0 );
////
glTexCoord3f(1,1,-1);
glVertex3f( 1.0, 1.0, - 1.0 );
glTexCoord3f(-1,1,-1);
glVertex3f( - 1.0, 1.0, - 1.0 );
glEnd();
Tą teksturą:
void tekstura()
{
// tablica z danymi dla tekstury o wymiarach 8x8 punktów;
// obraz składa się z czterech kwadratów, których
// kolory podawane są jako składowe RGB, czyli:
// - czerwony: {250, 0,250}
// - biały: {230,230,230}
// - zielony: { 0,250, 0}
// - niebieski: { 0, 0,250}
GLubyte tekstura[8][8][3]=
{
{
{250, 0, 0},{250, 0, 0},{250, 0, 0},{250, 0, 0},
{230,230,230},{230,230,230},{230,230,230},{230,230,230}
},
{
{250, 0, 0},{250, 0, 0},{250, 0, 0},{250, 0, 0},
{230,230,230},{230,230,230},{230,230,230},{230,230,230}
},
{
{250, 0, 0},{250, 0, 0},{250, 0, 0},{250, 0, 0},
{230,230,230},{230,230,230},{230,230,230},{230,230,230}
},
{
{250, 0, 0},{250, 0, 0},{250, 0, 0},{250, 0, 0},
{230,230,230},{230,230,230},{230,230,230},{230,230,230}
},
{
{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},
{ 0, 0,250},{ 0, 0,250},{ 0, 0,250},{ 0, 0,250}
},
{
{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},
{ 0, 0,250},{ 0, 0,250},{ 0, 0,250},{ 0, 0,250}
},
{
{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},
{ 0, 0,250},{ 0, 0,250},{ 0, 0,250},{ 0, 0,250}
},
{
{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},{ 0,250, 0},
{ 0, 0,250},{ 0, 0,250},{ 0, 0,250},{ 0, 0,250}
}
};
// definicja tekstury
glTexImage2D(GL_TEXTURE_2D,0,3,8,8,0,GL_RGB,GL_UNSIGNED_BYTE,tekstura);
// ustalenie parametrów tekstury
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
// ustalenie trybu teksturowania
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
// włączenie teksturowania
glDisable(GL_TEXTURE_1D);
glEnable(GL_TEXTURE_2D);
}
Jednak efekt jest taki:
Co zrobić aby teksturowane były ściany boczne a nie krawędzie tego graniastosłupa?