2 차원지도에서 때때로 반짝임을 만드는 셰이더를 쓰고 있습니다. ("반짝임"은 단순히 밝은 색상의 픽셀 일뿐입니다.) 반짝이는 블록을 (무한한) 평면에 무작위로 균일하게 분포 시키길 원합니다.하지만 스파클링을 X 좌표와 Y 좌표를 기반으로 결정적으로 만들고 싶습니다. 좌표에서 시드를 생성하고 해당 시드에서 Java Random
을 만들려고 시도했지만 시도한 결과 인식 가능한 패턴이 나타났습니다. 이 함수는 자주 (수 백만 번) 호출되기 때문에 성능이 중요합니다.X/Y 좌표에서 의사 결정 패턴을 생성하려면 어떻게해야합니까?
처음으로 충돌을 피하기 위해 소수 승수를 사용하는 hashCode()
구현을 모방하려고했습니다. 이로 인해 일련의 점이 동일한 시드를 공유하는지도에서 눈에 띄는 상흔이 생겼습니다.
long seed = ((long) x << 32) | (long) y;
Random rand = new Random(seed);
이 패턴이 명백 아니지만,뿐만 아니라 패턴 데이터가 나타날 것으로 보인다. 선택한 좌표는 선상에 나타나고, 균등하게 분포하지는 않습니다.
MD5 나 다른 암호화 해싱 알고리즘은 성능에 영향을 줄 수 있으므로 사용하지 마십시오.
1cm에서 많은 수의 의사 난수를 생성하고 2 차원 사각형에 플로팅하는 경우 강력한 생성기를 사용하지 않는 한 인식 가능한 '패턴'을 잘 볼 수 있습니다. k- 비행기를 찾으십시오. probbaly는 비선형 합동 의사 난수 생성기를 사용하려고합니다. –