2015-12-28 10 views
0

Эй, я не могу получить свою текстуру, и я не знаю, что случилось. Учебники не помогли. Вот мой код:Текстуры OpenGL не загружаются с помощью SOIL

Player p(); 


//The glutDisplayFunc(); 
void display() { 

glPushMatrix(); 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glEnable(GL_TEXTURE_2D); 
glEnable(GL_DEPTH_TEST); 

//Load png with SOIL 
playerTex = loadTex("Data/Sprites/player.png"); 
p.draw(); 

glFlush(); 
glPopMatrix(); } 


//Load texture 
GLuint loadTex(const char* c) { 
GLuint temp = SOIL_load_OGL_texture(
    c, 
    SOIL_LOAD_AUTO, 
    SOIL_CREATE_NEW_ID, 
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT 
    ); 

if (0 == temp) 
{ 
    printf("SOIL loading error: '%s'\n", SOIL_last_result()); 
    //return 0; 
} 

glBindTexture(GL_TEXTURE_2D, temp); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

return temp; } 


//Player object's draw function 
void player::draw() { 

glEnable(GL_TEXTURE_2D); 
glBegin(GL_TRIANGLES); 
glColor3f(0, 0, 0); 
    glTexCoord2f(0.0, 0.0); 
    glVertex2f(x, y); 
    glTexCoord2f(0.0, 1.0); 
    glVertex2f(x + spriteW, y); 
    glTexCoord2f(1.0, 1.0); 
    glVertex2f(x + spriteW, y + spriteL); 
glEnd();} 

spriteX = 0, spriteY = 0, spriteW = 400, spriteL = 400, х = 0, у = 0

Это выход я получаю: Output Window

Как вы можете видеть, ЧЕРНЫЙ треугольник появляется хорошо, но без текстуры

ответ

0

Координаты текстуры должны находиться в диапазоне 0..1, они не являются тексельными координатами. Разделите по ширине и высоте текстуры, чтобы преобразовать из координат текселя в координаты текстуры.

У вас также есть набор цветов к черному с помощью следующей строки:

glColor3f(0, 0, 0); 

Не делай этого. Используйте белый (или измените TEXTURE_ENV_MODE, но это не кажется необходимым).

glColor3f(1, 1, 1); 

Цвет умножается на цвет текстуры. Вы могли бы также переместить его за пределы блока на glBegin()glEnd():

glColor(1, 1, 1); 
glBegin(...); 
    ... 
glEnd(); 
+0

Я установил, что теперь в коде, но ничего не изменилось:/ –

+0

ли вы разделить правильно (число против плавающей запятой)? –

+0

Я сделал тест, где я просто положил 0 и 1 значения, я также положил его в код выше –