【问题标题】:OpenGL textures not loading with SOILOpenGL 纹理不使用 SOIL 加载
【发布时间】:2015-12-28 00:11:00
【问题描述】:

嘿,我的纹理无法显示,我不知道出了什么问题。教程没有帮助。这是我的代码:

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, x = 0, y = 0

这是我得到的输出: Output Window

如您所见,黑色三角形显示良好,但没有纹理

【问题讨论】:

    标签: opengl freeglut soil


    【解决方案1】:

    纹理坐标应在 0..1 范围内,它们不是纹理坐标。除以纹理宽度和高度,将纹理坐标转换为纹理坐标。

    您还可以使用以下行将颜色设置为黑色:

    glColor3f(0, 0, 0);
    

    不要那样做。使用白色(或更改TEXTURE_ENV_MODE,但这似乎没有必要)。

    glColor3f(1, 1, 1);
    

    颜色乘以纹理颜色。你不妨把它移到glBegin() glEnd() 块之外:

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

    【讨论】:

    • 我现在在代码中修复了这个问题,但没有任何改变:/
    • 我做了一个测试,我只输入了 0 和 1 的值,我也把它放在了上面的代码中
    • 您已将其设置为黑色:glColor3f(0, 0, 0)。将其设置为白色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2013-07-12
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多