gpt4 book ai didi

opengl - 如何在OpenGL中更改纹理的位置?

转载 作者:行者123 更新时间:2023-12-03 11:45:03 32 4
gpt4 key购买 nike

我有一个具有以下纹理坐标的纹理

    vec![
x,
y,
0.0, 0.0, // u,v
layer,
x + w,
y,
1.0, 0.0,
layer,
x + w,
y + h,
1.0, 1.0,
layer,
x,
y + h,
0.0, 1.0,
layer,
]
enter image description here
如何将纹理下移10个像素。
enter image description here
但是我想使我的纹理与屏幕像素对齐,我需要做些什么计算才能实现?

最佳答案

有两种方法可以完成此操作,这在很大程度上取决于您呈现文本的方式。从您共享的代码看来,您正在渲染一个四边形,该四边形用作字符的轴对齐边界框。在这种情况下,您需要找出标准化空间中像素的尺寸。
处理纹理坐标(即归一化空间为[0,1])
快速提醒一下标准化坐标的工作方式。令sw,sh表示窗口/ Canvas /绘图区域的宽度和高度(以像素为单位)。令nw,nh为四边形的归一化坐标(即0到1)。那么您的四边形的屏幕坐标仅仅是:w' = nw * swh = nh * sh单个像素的宽度仅为1/sw,高度仅为1/sh,因此将四边形精确向下移动10个像素等效于将矢量(1/sw, -1/sh) * 10添加到4个角上。或者,您可以转换为屏幕空间,添加(0,-10),然后通过将每个坐标除以相应的屏幕长度来进行规范化。
对于第二个选项,数学保持不变,但是不是在屏幕顶点上进行运算,而是使用uvs进行,但这与想要在不修改几何体的情况下偏移纹理采样的情况更相关,我添加了它为了完整性。
处理屏幕坐标(即标准化空间为[-1,1])
在这种情况下,将一维的长度标准化为2的长度(因为1-(-1)= 2),而不是像上面的情况那样将长度标准化为1。换句话说,在这种情况下,标准化坐标为(x', y') = [(x,y) * 2 - (w, h)] / (w, h)您可以验证上面的公式(0,0)映射到(-1,-1),并且(w,h)映射到(1,1)。
这意味着相对偏移量的公式只是(ox', oy') = 2 * (ox, oy) / (w, h),因为常数项(w,h)/(w,h)将被抵消。

关于opengl - 如何在OpenGL中更改纹理的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63252452/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com