晚上好晚上
我试图让我的OpenGL程序使用1个纹理(纹理Atlas)。它是256 x 256.我将它加载为普通纹理。
如果纹理从0,0到1,1那么我相信每个正方形的大小为0.2。
问题只是第1和第3个纹理工作。第二个是奇数,第四个似乎是第二个+第三个纹理,第五个是第二个,第三个和第四个放在一起
所以我构建了一个简单的函数来返回纹理坐标
int yy = textureId / 5;
int xx = textureId % 5;
float size = 1.0f / 5;
float[] textureCoordinateDataMap = createTexture(size * xx,size * yy ,size, size );
public float[]createTexture(float x, float y, float xx, float yy)
{
float[] textureCoordinateDataMap =
{
// Front face
x, y,
x, yy,
xx, y,
x, yy,
xx, yy,
xx, y,
// Right face
x, y,
x, yy,
xx, y,
x, yy,
xx, yy,
xx, y,
// Back face
x, y,
x, yy,
xx, y,
x, yy,
xx, yy,
xx, y,
// Left face
x, y,
x, yy,
xx, y,
x, yy,
xx, yy,
xx, y,
// Top face
x, y,
x, yy,
xx, y,
x, yy,
xx, yy,
xx, y,
// Bottom face
x, y,
x, yy,
xx, y,
x, yy,
xx, yy,
xx, y,
};
return textureCoordinateDataMap;
}
我试图对值进行硬编码,唯一有效的值 0,0 0.4,0 0,0.4 0.4,0.4
答案 0 :(得分:1)
如果要将此数组中的值用作纹理坐标,则需要将大小添加到左/下坐标以获得右/顶坐标。现在你使用尺寸本身作为右/顶坐标。一种方法是在函数调用中添加大小:
float[] textureCoordinateDataMap = createTexture(
size * xx, size * yy , size (xx + 1), size * (yy + 1));