OpenGL-ES 纹理图集。 t 轴反转
我正在将纹理从纹理图集映射到立方体上的正方形。由于某种原因,t 轴反转,0 位于顶部,1 位于底部。有什么想法为什么会发生这种情况吗?
另外,我必须按顺时针顺序而不是逆时针顺序指定纹理坐标。我使用的是逆时针缠绕。我使用的顶点、索引和纹理坐标如下。
float vertices[] = {
// Front face
-width, -height, depth, // 0
width, -height, depth, // 1
width, height, depth, // 2
-width, height, depth, // 3
// Back Face
width, -height, -depth, // 4
-width, -height, -depth, // 5
-width, height, -depth, // 6
width, height, -depth, // 7
// Left face
-width, -height, -depth, // 8
-width, -height, depth, // 9
-width, height, depth, // 10
-width, height, -depth, // 11
// Right face
width, -height, depth, // 12
width, -height, -depth, // 13
width, height, -depth, // 14
width, height, depth, // 15
// Top face
-width, height, depth, // 16
width, height, depth, // 17
width, height, -depth, // 18
-width, height, -depth, // 19
// Bottom face
-width, -height, -depth, // 20
width, -height, -depth, // 21
width, -height, depth, // 22
-width, -height, depth, // 23
};
short indices[] = {
// Front // Back
0,1,2, 0,2,3, 4,5,6, 4,6,7,
// Left // Right
8,9,10, 8,10,11, 12,13,14, 12,14,15,
// Top // Bottom
16,17,18, 16,18,19, 20,21,22, 20,22,23,
};
float textures[] = {
// Front
0.0f, 0.0f, 0.25f, 0.0f, 0.25f, 0.25f, 0.0f, 0.25f,
// Back
0.25f, 0.0f, 0.50f, 0.0f, 0.50f, 0.25f, 0.25f, 0.25f,
// Left
0.50f, 0.0f, 0.75f, 0.0f, 0.75f, 0.25f, 0.50f, 0.25f,
// Right
0.75f, 0.0f, 1f, 0.0f, 1f, 0.25f, 0.75f, 0.25f,
// Top
0.0f, 0.25f, 0.25f, 0.25f, 0.25f, 0.50f, 0.0f, 0.50f,
// Bottom
0.25f, 0.25f, 0.50f, 0.25f, 0.50f, 0.50f, 0.25f, 0.50f,
};
我的纹理 - 在 mspaint 中创建的 256x256 .png 文件。
I'm mapping a texture from my texture atlas to a square on a cube. For some reason, the t axis is inverted with 0 being at the top and 1 being at the bottom. Any ideas why this is happening?
Also, I have to specify the texture coordinates in clockwise order rather than counter-clockwise. I am using counter-clockwise windings. The vertices, indices and texture coordinates I'm using are below.
float vertices[] = {
// Front face
-width, -height, depth, // 0
width, -height, depth, // 1
width, height, depth, // 2
-width, height, depth, // 3
// Back Face
width, -height, -depth, // 4
-width, -height, -depth, // 5
-width, height, -depth, // 6
width, height, -depth, // 7
// Left face
-width, -height, -depth, // 8
-width, -height, depth, // 9
-width, height, depth, // 10
-width, height, -depth, // 11
// Right face
width, -height, depth, // 12
width, -height, -depth, // 13
width, height, -depth, // 14
width, height, depth, // 15
// Top face
-width, height, depth, // 16
width, height, depth, // 17
width, height, -depth, // 18
-width, height, -depth, // 19
// Bottom face
-width, -height, -depth, // 20
width, -height, -depth, // 21
width, -height, depth, // 22
-width, -height, depth, // 23
};
short indices[] = {
// Front // Back
0,1,2, 0,2,3, 4,5,6, 4,6,7,
// Left // Right
8,9,10, 8,10,11, 12,13,14, 12,14,15,
// Top // Bottom
16,17,18, 16,18,19, 20,21,22, 20,22,23,
};
float textures[] = {
// Front
0.0f, 0.0f, 0.25f, 0.0f, 0.25f, 0.25f, 0.0f, 0.25f,
// Back
0.25f, 0.0f, 0.50f, 0.0f, 0.50f, 0.25f, 0.25f, 0.25f,
// Left
0.50f, 0.0f, 0.75f, 0.0f, 0.75f, 0.25f, 0.50f, 0.25f,
// Right
0.75f, 0.0f, 1f, 0.0f, 1f, 0.25f, 0.75f, 0.25f,
// Top
0.0f, 0.25f, 0.25f, 0.25f, 0.25f, 0.50f, 0.0f, 0.50f,
// Bottom
0.25f, 0.25f, 0.50f, 0.25f, 0.50f, 0.50f, 0.25f, 0.50f,
};
My texture - a 256x256 .png file created in mspaint.
alt text http://www.freeimagehosting.net/uploads/9a87120b99.png
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因此,在网上进行更多搜索后,OpenGL 似乎假设图像从底部扫描线开始,这意味着您需要反转 y/t 坐标。或者在查看原始图像时使用左上角原点。
So after yet more searching on the web, it seems that OpenGL assumes an image starts at the bottom scanline, meaning that you need to invert your y/t coordinates. Or use an upper left hand origin when looking at your original image.