2010-05-11 2 views
1

У меня есть вопрос о том, как объявить точки для текстуры на кубеположения для текстуры в OpenGL

быть именно я имею в виду:

glTexCoord2f(x.f, y.f); 

для лицевой стороны, мои декларации работ :

glBegin(GL_POLYGON); //Vorderseite 
     glNormal3f(0.0f, 0.0f, 1.0f);//normale für vorderseite 

    glTexCoord2f(0.0f, -1.f); 
    glVertex3f(-fSeitenL/2.0f,-fSeitenL/2.0f,+fSeitenL/2.0f); 

    glTexCoord2f(1.f, -1.f); 
    glVertex3f(+fSeitenL/2.0f,-fSeitenL/2.0f,+fSeitenL/2.0f); 

    glTexCoord2f(1.f, 0.0f); 
    glVertex3f(+fSeitenL/2.0f,+fSeitenL/2.0f,+fSeitenL/2.0f); 

    glTexCoord2f(0.0f, 0.0f); 
    glVertex3f(-fSeitenL/2.0f,+fSeitenL/2.0f,+fSeitenL/2.0f); 
    glEnd(); 

, но с правой стороны, она не работает, я предлагаю мне нужны другие параметры, для glTexCoord2f, но я не знаю ведьму один.

glBegin(GL_POLYGON); //Rechte Seite 

    glNormal3f(1.0f, 0.0f, 0.0f); //normale für rechte seite 

    glTexCoord2f(0.0f, -1.f); 
    glVertex3f(+fSeitenL/2.0f,-fSeitenL/2.0f,+fSeitenL/2.0f); 

    glTexCoord2f(1.0f, -1.f); 
    glVertex3f(+fSeitenL/2.0f,-fSeitenL/2.0f,-fSeitenL/0.0f); 

    glTexCoord2f(1.0f, 0.0f); 
    glVertex3f(+fSeitenL/2.0f,+fSeitenL/2.0f,-fSeitenL/0.0f); 

    glTexCoord2f(0.0f, 0.0f); 
    glVertex3f(+fSeitenL/2.0f,+fSeitenL/2.0f,+fSeitenL/0.0f); 
    glEnd(); 

после того, как все я закрыть "текстуры декларацию с"

glDisable(GL_TEXTURE_2D); 

заранее спасибо

редактировать:

фронтсайда показано с изображением, с другой стороны ISN 't показан, даже «кубический». На данный момент я просто использую изображение, которое является черным с некоторыми случайными пробелами, поэтому точное положение не так важно, несмотря на то, что я очень заинтересован в том, как правильно установить glTexCoord2f.

ответ

0

Поскольку вы используете отрицательные координаты текстуры (или действительно что-либо за пределами диапазона 0..1), вам необходимо убедиться, что режим обертывания текстуры установлен на повторение.

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

Если те, которые установлены в GL_CLAMP вместо этого, то любое значение меньше 0 будет установлен в 0 и любое значение больше 1 будет установлен в 1. Но так как вы говорите, первую часть вашей модели текстуры правильно , это, вероятно, не ваша проблема.

Следующий, скорее всего, проблема есть освещение. Если вы выключите освещение с помощью glDisable(GL_LIGHTING);, появится ли вся модель? Если это так, то вам нужно убедиться, что у вас есть свет, стоящий перед проблемной частью вашей модели, или добавьте окружающий компонент к вашему свету.

+0

с glDisable (GL_LIGHTING); показана только одна сторона – Tyzak

0

Как именно он не работает?

Если текстура не отображается или используется неправильная текстура, это означает, что вы должны установить другую текстуру с помощью glBindTexture().

Если текстура выровнена неправильно, вы должны убедиться, что вершины, которые разделены между двумя гранями, имеют одинаковую координату текстуры.

+0

изображена лицевая сторона с текстурой, другая сторона не показана, даже «земля» или «кубическая» – Tyzak

Смежные вопросы