我正在尝试根据tile输入应用一个带有数字的随机纹理。到目前为止,我的努力导致模式出现在所选的数字中。
我的方法是将每个tile值乘以一个随机标量,然后将它们相乘或相加。将我所做的操作称为每个瓷砖“盐”。
示例:
float seed = fract(fract((tile.x+23.42f)*189.28148f) + (tile.y*92001.302+1.235801f));
当我将两个“盐渍”瓷砖值加在一起时,会出现一个模式。对角线的数字是相同的。
当我将两个“盐渍”瓦片值相乘时,数字沿对角线镜像。
我希望从这些平铺值中获得更多随机性,有人在数学方面有所帮助吗?
着色器代码段:
vec2 tile = vec2(floor(texCoord_vs.x), floor(texCoord_vs.y));
float seed = fract(fract((tile.x+23.42f)*189.28148f) + (tile.y*92001.302+1.235801f));
vec2 offset = offset_vs;
offset.x += floor(seed*7.0f)*TYPE_UNIT_SIZE;
vec3 diffuseColor = materialDiffuseColor * texture(
typesheet, vec2((texCoord_vs.x - tile.x)*TYPE_UNIT_SIZE,
(texCoord_vs.y - tile.y)*TYPE_UNIT_SIZE) + offset);
答案 0 :(得分:0)
您可以使用this question for hashing 2D vectors中描述的技术,而后者又来自Optimized Spatial Hashing for Collision Detection of Deformable Objects:
index = (x p1 xor y p2) mod n
p1,& p2是大素数(它们使用73856093,& 83492791),n是哈希表大小,或者在这种情况下是你想要生成的最大随机索引。