首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Skybox不显示纹理

Skybox不显示纹理
EN

Stack Overflow用户
提问于 2020-04-09 04:50:04
回答 1查看 52关注 0票数 0

将显示我的skybox,但不显示我从图像中加载的纹理。相反,它显示的是黑色。

我正在使用a render with MultisampledFbo support

我的纹理加载代码如下所示:

代码语言:javascript
复制
private int loadSkyboxTextures(){
        int texID = glGenTextures();
        glBindTexture(GL_TEXTURE_CUBE_MAP, texID);
        for(int i = 0; i < TEXTURE_FILES.length; i++){
            InputStream file = getClass().getResourceAsStream(TEXTURE_FILES[i]);
            byte[] pixelData = new byte[0];
            try {
                pixelData = new byte[file.available()];
                file.read(pixelData);
            } catch (IOException e) {
                e.printStackTrace();
            }
            ByteBuffer byteBuffer = ByteBuffer.wrap(pixelData);
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, 512, 512, 0,
                    GL_RGB, GL_UNSIGNED_BYTE, byteBuffer);
        }

        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

        return texID;
    }

多维数据集呈现代码:

代码语言:javascript
复制
    private void drawSkybox(){
        glEnable(GL_TEXTURE_CUBE_MAP);
        glDepthMask(false);
        glGenBuffers(vbo);
        glBindBuffer (GL_ARRAY_BUFFER, vbo[0]);
        glBufferData(GL_ARRAY_BUFFER, POINTS, GL_STATIC_DRAW);
        glGenVertexArrays(vao);
        glBindVertexArray(vao[0]);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * Float.BYTES, NULL);
        glEnableVertexAttribArray(0);
        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_CUBE_MAP, texId);
        glDrawArrays(GL_TRIANGLES, 0, 36);
        glDisableVertexAttribArray(0);
        glBindVertexArray(0);
        glDepthMask(true);
        glBindBuffer (GL_ARRAY_BUFFER,0);
        glDisable(GL_TEXTURE_CUBE_MAP);
    }

主渲染函数中的立方体渲染调用:

代码语言:javascript
复制
                glMatrixMode(GL_PROJECTION);
                glOrtho(-max, max, -1, 1, 10, -10);
                glRotated(cameraX, 1f, 0f, 0);
                glRotated(cameraY, 0f, 1f, 0);
                glGetFloatv(GL_PROJECTION_MATRIX, pm);

                glMatrixMode(GL_MODELVIEW);
                glLoadIdentity();
                drawSkybox();
                glLoadIdentity();
                ...
                //render other objects
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 05:00:29

必须启用遗留OpenGL的纹理。若要执行立方体贴图纹理,必须启用GL_TEXTURE_CUBE_MAP (请参见glEnable):

代码语言:javascript
复制
glEnable(GL_TEXTURE_CUBE_MAP);

请注意,对于立方体贴图纹理,纹理坐标是三维的,并被视为立方体贴图中心的向量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61109787

复制
相关文章

相似问题

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