gpt4 book ai didi

opengl - 如何在OpenGL中归一化纹理空间的图像坐标?

转载 作者:行者123 更新时间:2023-12-03 23:19:28 26 4
gpt4 key购买 nike

假设我有一个大小为 的图像320x240 .现在,从 sampler2D 采样具有整数图像坐标 ux, uy我必须标准化范围内的纹理坐标 [0, 大小] (大小可以是宽度或高度)。

现在,我想知道我是否应该像这样正常化

texture(image, vec2(ux/320.0, uy/240.0))

或者像这样
texture(image, vec2(ux/319.0, uy/239.0))

因为 ux = 0 ... 319 uy = 0 ... 239 .后者实际上将覆盖 的整个范围。 [0, 1] 正确的?这意味着 0 对应于例如最左边的像素和 1 对应最右边的像素,对吗?

我也想保持过滤,所以我不想使用 texelFetch .

任何人都可以谈谈这件事吗?谢谢。

最佳答案

无论有多少像素,纹理坐标(和像素坐标)在像素的边缘从 0 到 1。

一个 4 像素宽的纹理

   0          0.5          1    <- texture coordinate
| | |
V V v
+-----+-----+-----+-----+
| | | | |
| | | | | <- texels
+-----+-----+-----+-----+

一个 5 像素宽的纹理
   0             0.5             1    <- texture coordinate
| | |
V V v
+-----+-----+-----+-----+-----+
| | | | | |
| | | | | | <- texels
+-----+-----+-----+-----+-----+

一个 6 像素宽的纹理
   0                0.5                1    <- texture coordinate
| | |
V V V
+-----+-----+-----+-----+-----+-----+
| | | | | | |
| | | | | | | <- texels
+-----+-----+-----+-----+-----+-----+

一个 1 像素宽的纹理
   0 0.5 1   <- texture coordinate 
| | |
V V V
+-----+
| |
| | <- texels
+-----+

如果您使用 u = integerTextureCoordinate / width对于每个纹理坐标,你会得到这些坐标
   0    0.25  0.5   0.75       <- u = intU / width;
| | | |
V V V V
+-----+-----+-----+-----+
| | | | |
| | | | | <- texels
+-----+-----+-----+-----+

这些坐标直接指向纹素之间。

但是,如果你想处理特定的纹素,你想要的纹理坐标是这样的
     0.125 0.375 0.625 0.875   
| | | |
V V V V
+-----+-----+-----+-----+
| | | | |
| | | | | <- texels
+-----+-----+-----+-----+

你从哪个
   u = (integerTextureCoord + .5) / width

关于opengl - 如何在OpenGL中归一化纹理空间的图像坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40574677/

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