c# - 在 OpenGL 中使用纹理图集计算单个图 block 的纹理坐标

标签 c# opengl textures

我正在尝试在使用 C#/OpenGl 和 OpenTK 库编写的游戏程序中使用纹理图集。

我在 OpenGL 中将我的纹理图集作为纹理加载(尺寸为 256x256),每个图 block 为 32x32。

为了显示 map 集的第一个图 block ,我使用了以下代码:

GL.Begin(BeginMode.Quads);
GL.TexCoord2(0, 0); GL.Vertex2(0, 0);
GL.TexCoord2(0.125f, 0); GL.Vertex2((32 * zoom), 0);
GL.TexCoord2(0.125f, 0.125f); GL.Vertex2((32 * zoom), (32 * zoom));
GL.TexCoord2(0, 0.125f); GL.Vertex2(0, (32 * zoom));
GL.End();

0.125 是通过除以 1/8 计算得出的,8 是行/列中的图 block 数。

我不知道如何以这种方式计算第二个图 block 的坐标! 我尝试分别使用 0.125 和 0.25 代替 0 和 0.125,但这什么也没有呈现。我猜您不允许为 (EDIT) 第一个 (0) 纹理坐标使用大于零的值?

如果有人可以提供帮助或提供更好的方法,我们将不胜感激!

最佳答案

试一试:

int col = 0;
int row = 0;
float tex_w = 256;
float tex_h = 256;
float tile_w = 32;
float tile_h = 32;
float w_factor = tile_w / tex_w;
float h_factor = tile_h / tex_h;

float x_tex_beg = w_factor*(col+0);
float x_tex_end = w_factor*(col+1);
float y_tex_beg = h_factor*(row+0);
float y_tex_end = h_factor*(row+1);

关于c# - 在 OpenGL 中使用纹理图集计算单个图 block 的纹理坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413103/

相关文章:

javascript - 使用 ASP.net Identity 在基于角色的授权上禁用 MVC View 中的输入字段

c# - WCF REST 消息记录、POST 请求问题

javascript - 在 C# 中清除响应后回发后执行 Javascript

perl - 如何将 2 个或更多纹理贴图应用于 gluSphere OpenGL 对象?

c++ - 如何解决Blinn/Loop分辨率独立曲线渲染中的渲染伪影?

c# - 异步方法中的警告消息说它缺少等待运算符

C++ OpenGL 从 2D 切换到 3D

c++ - 使用 DevIL 在 DDS 文件中加载立方体贴图

android - 在Android OpenGL ES 1.1 中,如何在三角形的两边绘制纹理?

c++ - 如何从 OpenGL 4.5 中的单个立方体贴图纹理创建立方体贴图阵列纹理?