首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不显示在屏幕上的纹理Opengl

不显示在屏幕上的纹理Opengl
EN

Stack Overflow用户
提问于 2018-03-11 23:55:19
回答 1查看 64关注 0票数 2

我想在背景上加载一个图像,我已经编写了下面的代码,通过纹理矩形加载纹理作为背景。我的图像为2 (512x512)。我不明白为什么它没有在屏幕上显示任何东西,

请帮我这个忙。我正在粘贴我的代码,以加载纹理和绘制直放。

此外,我还通过使用SOIL_last_result()检查了图像是否正确加载,并使用glGetError()检查了OpenGL中是否有任何错误

使用土壤将图像加载为纹理的代码。

代码语言:javascript
运行
AI代码解释
复制
void loadTexture(GLuint* texture, char* path){
    *texture = SOIL_load_OGL_texture(path,
                                     SOIL_LOAD_AUTO,
                                     SOIL_CREATE_NEW_ID,
                                     SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_MULTIPLY_ALPHA
                                    );


    cout<<*texture<<endl;
    if(*texture == NULL){
        printf("Failed to load %s", path);
    }

}

下面的代码是绘制纹理和矩形,

代码语言:javascript
运行
AI代码解释
复制
void drawRect(int x, int y, int w, int h, GLuint texture){
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glDepthMask(GL_FALSE);
    glDisable(GL_DEPTH_TEST);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glPushMatrix();
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_POLYGON);

        glTexCoord2i(0,0);
        glVertex2i(x,y);
        glTexCoord2i(1,0);
        glVertex2i(x+w,y);
        glTexCoord2i(0,1);
        glVertex2i(x,y+h);
        glTexCoord2i(1,1);
        glVertex2i(x+w,y+h);

    glEnd();
    glPopMatrix();
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);
    glDisable(GL_BLEND);
}

我把它叫做init mehod,

代码语言:javascript
运行
AI代码解释
复制
void initGL(void)
{
    glClearDepth(1.0);
        glClearColor(0,0,0, 1.0f);
        glColor3f(0.0, 0.0, 0.0);
        glLineWidth(1);
        glDepthFunc(GL_LESS);

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        GLuint texture;
        loadTexture(&texture, "image.png");
        drawRect(0,0,screen_width-100,screen_height-100,texture);
        glfwSwapBuffers(window);
}

请帮助我,如果你需要更多的信息,请告诉我。提前谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-12 00:08:24

投影矩阵描述从场景的三维点到视口的2D点的映射。它从眼空间转换到剪辑空间,通过与剪辑坐标的w分量除法,将剪辑空间中的坐标转换为归一化设备坐标。NDC在(-1,-1,-1)到(1,1,1)之间。

所有的几何,是从剪贴画空间被剪裁。

因为你没有建立一个投影矩阵,你的投影矩阵就是单位矩阵。这意味着你只能“看到”几何图形,它的坐标在-1到1之间。

我建议建立一个正交投影矩阵(glOrtho)。在正交投影时,眼睛空间中的坐标线性映射到归一化装置坐标,剪辑边角坐标等于归一化装置坐标。

以这样的方式设置投影:

代码语言:javascript
运行
AI代码解释
复制
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, screen_width, 0, screen_height, -1, 1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49230443

复制
相关文章

相似问题

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