2015-05-14 1 views
1

Попытка заполнить базовую текстуру на поверхности с использованием OpenGL и SOIL, но я ничего не генерирую.Отображение текстуры с помощью OpenGL с использованием SOIL

GLuint textureID[5]; 

glutInitWindowPosition(0, 50); 
windowID[0] = glutCreateWindow("orthogonal projection, cubes"); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-400, 400, -400, 400, -500, 500); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glutKeyboardFunc(Keyboard); 
glutDisplayFunc(DrawWindowOne); 

textureID[0] = SOIL_load_OGL_texture("assets/faceA.png", 
       SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y); 

void DrawWindowOne() 
{ 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glViewport(0, 0, 250, 250); 

    glMatrixMode(GL_MODELVIEW); 

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

    glEnable(GL_TEXTURE_2D); 

    glBindTexture(GL_TEXTURE_2D, textureID[0]); 

    glBegin(GL_QUADS); 
    glNormal3f(0.0, 0.0, 1.0); // front face 
    glTexCoord2f(0.0, 0.0);  glVertex3f(-a,-a, a); 
    glTexCoord2f(0.0, 1.0);  glVertex3f(-a, a, a); 
    glTexCoord2f(1.0, 1.0);  glVertex3f(a, a, a); 
    glTexCoord2f(1.0, 0.0);  glVertex3f(a,-a, a); 
    glEnd(); 

    glDisable(GL_TEXTURE_2D); 
} 

Лицо рисует синим цветом, однако я не получаю текстуры. У меня есть второе окно, где помимо позиции только Differance является то, что я использую усеченной в отличие от ортогональной

windowID[1] = glutCreateWindow("Perspective projection using glFrustum"); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(-60, 60, -60, 60, 60, 200); 
gluLookAt(0, 0, 120, 0, 0, 0, 0, 1, 0); 

и текстура рисует хорошо.

+0

Предположительно, текстурная нагрузка и многоугольная ничья находятся в разных местах кода. Где происходит первое? I.e., после того, как вы создаете контекст? Говорит ли 'glGetError' что-нибудь? – imallett

+0

У меня есть инициализация окна, а затем я получаю текстуру непосредственно после этого, остальное является последовательным в функции рисования. Я собираюсь установить код окна, как когда я включу свое второе окно, текстура отображает (то есть, я вижу, что он вызывает ту же функцию в окне 2, но мне нужно ее отображать в окне 1) – Gnemlock

+0

Хмммм, в возможно, это может быть [SSCCE] (http://sscce.org/) в качестве ссылки pastebin? Я не использую SOIL или GLUT, но из того, что я помню, это выглядит правильно. Имейте +1 для усилий. – imallett

ответ

0

Проблема заключалась в том, что я загружал текстуры сразу, где, по-видимому, их нужно загружать после того, как каждое окно инициализируется, чтобы быть доступным для этого кода рисования окон.

#pragma region Initialise Window One 
glutInitWindowPosition(0, 50); 
windowID[1] = glutCreateWindow("orthogonal projection, cubes"); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-400, 400, -400, 400, -500, 500); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glutKeyboardFunc(Keyboard); 
glutDisplayFunc(DrawWindowOne); 
LoadTextures(); 
#pragma endregion 

#pragma region Initialise Window Two 
glutInitWindowPosition(0, 450); 
windowID[1] = glutCreateWindow("Perspective projection using glFrustum, ellipsoids"); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(-60, 60, -60, 60, 60, 200); 
gluLookAt(0, 0, 120, 0, 0, 0, 0, 1, 0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glutKeyboardFunc(Keyboard); 
glutDisplayFunc(DrawWindowTwo); 
LoadTextures(); 
#pragma endregion