从着色器中的 DataTextures 读取不正确
Incorrect reading from DataTextures in shader
当我的 POT DataTextures 的纹素尺寸为 1:1(宽度:高度)时,我有一个程序运行良好,但是当它们的纹素尺寸为 2:1 或 1:2 时似乎纹素被错误地读取和应用。我正在使用连续索引 (1,2,3,4,5...) 使用以下两个函数访问纹素。
我想知道我访问纹素数据的方式是否有问题,或者我对整数索引使用 Float32Array 是否需要切换为 Uint8Array 或其他?提前致谢!
此函数为在我的可视化中每个粒子云有一个纹素的纹理找到 uv:
float texelSizeX = 1.0 / uPerCloudBufferWidth;
float texelSizeY = 1.0 / uPerCloudBufferHeight;
vec2 perMotifUV = vec2(
mod(cellIndex, uPerCloudBufferWidth)*texelSizeX,
floor(cellIndex / uPerCloudBufferHeight)*texelSizeY );
perCloudUV += vec2(0.5*texelSizeX, 0.5*texelSizeY);
此函数查找包含所有云中包含的每个粒子的一个纹素的纹理的 uv:
float pTexelSizeX = 1.0 / uPerParticleBufferWidth;
float pTexelSizeY = 1.0 / uPerParticleBufferHeight;
vec2 perParticleUV = vec2(
mod(aParticleIndex, uPerParticleBufferWidth)*pTexelSizeX,
floor(aParticleIndex / uPerParticleBufferHeight)*pTexelSizeY );
perParticleUV += vec2(0.5*pTexelSizeX, 0.5*pTexelSizeY);
不应该这样
vec2 perMotifUV = vec2(
mod(cellIndex, uPerCloudBufferWidth)*texelSizeX,
floor(cellIndex / uPerCloudBufferHeight)*texelSizeY );
是这个吗?
vec2 perMotifUV = vec2(
mod(cellIndex, uPerCloudBufferWidth)*texelSizeX,
floor(cellIndex / uPerCloudBufferWidth)*texelSizeY ); // <=- use width
另一个也一样吗?除以宽度而不是高度
当我的 POT DataTextures 的纹素尺寸为 1:1(宽度:高度)时,我有一个程序运行良好,但是当它们的纹素尺寸为 2:1 或 1:2 时似乎纹素被错误地读取和应用。我正在使用连续索引 (1,2,3,4,5...) 使用以下两个函数访问纹素。
我想知道我访问纹素数据的方式是否有问题,或者我对整数索引使用 Float32Array 是否需要切换为 Uint8Array 或其他?提前致谢!
此函数为在我的可视化中每个粒子云有一个纹素的纹理找到 uv:
float texelSizeX = 1.0 / uPerCloudBufferWidth;
float texelSizeY = 1.0 / uPerCloudBufferHeight;
vec2 perMotifUV = vec2(
mod(cellIndex, uPerCloudBufferWidth)*texelSizeX,
floor(cellIndex / uPerCloudBufferHeight)*texelSizeY );
perCloudUV += vec2(0.5*texelSizeX, 0.5*texelSizeY);
此函数查找包含所有云中包含的每个粒子的一个纹素的纹理的 uv:
float pTexelSizeX = 1.0 / uPerParticleBufferWidth;
float pTexelSizeY = 1.0 / uPerParticleBufferHeight;
vec2 perParticleUV = vec2(
mod(aParticleIndex, uPerParticleBufferWidth)*pTexelSizeX,
floor(aParticleIndex / uPerParticleBufferHeight)*pTexelSizeY );
perParticleUV += vec2(0.5*pTexelSizeX, 0.5*pTexelSizeY);
不应该这样
vec2 perMotifUV = vec2(
mod(cellIndex, uPerCloudBufferWidth)*texelSizeX,
floor(cellIndex / uPerCloudBufferHeight)*texelSizeY );
是这个吗?
vec2 perMotifUV = vec2(
mod(cellIndex, uPerCloudBufferWidth)*texelSizeX,
floor(cellIndex / uPerCloudBufferWidth)*texelSizeY ); // <=- use width
另一个也一样吗?除以宽度而不是高度