首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不加土的OpenGL纹理

不加土的OpenGL纹理
EN

Stack Overflow用户
提问于 2015-12-28 00:11:00
回答 1查看 234关注 0票数 0

嘿,我不能显示我的纹理,我也不知道出了什么问题。教程帮不上忙。这是我的密码:

代码语言:javascript
复制
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

这是我得到的输出:输出窗口

如你所见,黑色三角形显示得很好,但没有纹理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-28 00:17:52

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

您还将颜色设置为黑色,并设置如下一行:

代码语言:javascript
复制
glColor3f(0, 0, 0);

别干那事。使用白色(或更改TEXTURE_ENV_MODE,但这似乎没有必要)。

代码语言:javascript
复制
glColor3f(1, 1, 1);

颜色乘以纹理颜色。您最好将它移到glBegin() glEnd()块之外:

代码语言:javascript
复制
glColor(1, 1, 1);
glBegin(...);
    ...
glEnd();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34486226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档