Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何制作单图像skybox?_Opengl_Skybox - Fatal编程技术网

Opengl 如何制作单图像skybox?

Opengl 如何制作单图像skybox?,opengl,skybox,Opengl,Skybox,我已经让skybox开始工作了,只是它可以接收六个文件。我想了解如何使用1个文件而不是6个文件。我在互联网上找遍了,找不到任何有用的东西。以下是loadCubeMap函数,用于将图像放入cubemap: public int loadCubeMap(String[] textureFiles){ int texID = GL11.glGenTextures(); GL13.glActiveTexture(GL13.GL_TEXTURE0); GL11.glBindText

我已经让skybox开始工作了,只是它可以接收六个文件。我想了解如何使用1个文件而不是6个文件。我在互联网上找遍了,找不到任何有用的东西。以下是loadCubeMap函数,用于将图像放入cubemap:

public int loadCubeMap(String[] textureFiles){
    int texID = GL11.glGenTextures();
    GL13.glActiveTexture(GL13.GL_TEXTURE0);
    GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, texID);

    for(int i=0;i<textureFiles.length;i++){
        TextureData data = decodeTextureFile("res/" + textureFiles[i] + ".png");
        GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL11.GL_RGBA, data.getWidth(), data.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, data.getBuffer());
    }
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
    textures.add(texID);
    return texID;
}
public int loadCubeMap(字符串[]纹理文件){
int texID=GL11.glGenTextures();
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL13.GL_纹理_立方体_贴图,texID);

对于(int i=0;i,您可以按任何方式将skybox的6个边组合成一个纹理。您只需将skybox每边的纹理坐标设置为图像的相应部分。如果您将skybox图像设置为一行中的TopBottomLeftRightFrontBack(6:1纵横比)然后,只需将顶面设置为

{0.0,0.0}{0.1666,0.0}{0.1666,1.0}{0.0,1.0}

还有你的下半身

{0.1666,0.0}{0.3332,0.0}{0.3332,1.0}{0.1666,1.0}


其他面也是如此。

什么图像?你知道布局吗?是关于如何从
纹理数据中提取图像部分的问题。
?请更具体。@keltar从代码中我看到他当前的立方体贴图是6张png图像。我相信他想要一张file@ratchetfreak我明白,但它可能意味着不同的瘦压缩6个PNG是一个文件;使用多曲面文件格式是一个文件;将所有图像合并到单个2D也是一个文件。如果使用最后一个选项,图像可能包含不同的布局(将所有6个设置为一行或其他任何内容),加载器必须意识到这一点。抱歉,我的问题没有具体说明,图像格式如下:使用明确指定的布局,您可以为每个立方体贴图边计算矩形,例如,第一边是开的(0,h/3,w/4,h/3*2)。然后您需要为较小的图像分配内存缓冲区(立方体贴图的一侧),将
纹理数据中的像素复制到其中(逐行),并将生成的缓冲区传递到
glTexImage2D
。重复所有6个方面。我对java的经验不存在,但对任何语言都是一样的。顺便说一句,给定的布局不是很好-几乎一半的像素是未使用的空间,这需要内存和解码时间(但仅在加载期间)。