纹理 和 顶点 在OpenGL 里面的值

本文介绍了如何使用OpenGL进行2D文本渲染的技术细节。通过计算字符在纹理中的位置,并将屏幕坐标转换为OpenGL所需的[-1,1][-1,1]区间内的坐标,实现高效且精确的文本绘制。

以下是 纹理的大小 
(落于 [0.0 - 1.0]区间内
和 
顶点的大小(
[-1..1][-1..1]


char character = text[i];
    float uv_x = (character%16)/16.0f;
    float uv_y = (character/16)/16.0f;

OpenGL3.0教程 第十一课:2D文本 摘录


这样做是可行的(基本可行,详见下文),因为A的ASCII值为65。
65%16 = 1,因此A位于第1列(列号从0开始)。

65/16 = 4,因此A位于第4行(这是整数除法,所以结果不是想象中的4.0625)

两者都除以16.0以使之落于[0.0 - 1.0]区间内,这正是OpenGL纹理所需的


------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void main()
{
    // Output position of the vertex, in clip space
    // map [0..800][0..600] to [-1..1][-1..1]
    vec2 vertexPosition_homoneneousspace = vertexPosition_screenspace - vec2(400,300); // [0..800][0..600] -> [-400..400][-300..300]
    vertexPosition_homoneneousspace /= vec2(400,300);
    gl_Position =  vec4(vertexPosition_homoneneousspace,0,1);

    // UV of the vertex. No special space for this one.
    UV = vertexUV;
}
注意非常重要的一点:这些坐标位于[0,800][0,600]范围内。也就是说,这里 不需要 矩阵。vertex shader只需简单换算就可以把这些坐标转换到[-1,1][-1,1]范围内(也可以在C++代码中完成这一步)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值