Показать сообщение отдельно
Старый 12.03.2015, 23:42   #16
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Генерация террайнов

Сообщение от Igor Посмотреть сообщение
Мне кажется, куча обращений к массиву не имеет смысла.
Я бы предложил просто построить какую-нибудь хитрую функцию от трёх переменных.
например, при инициализации задавать параметры a и с, и пусть функция rand возвращает (a + c * (x ^ (x >> 5) ^ (y<<3-1) ^ (z >> 3 + z))) & 0xFF.
Если хочется, можно запихать в массив данные с нужным распределением (например, нормальным), и один раз читать оттуда по "рандомной" позиции.
Ну тут не только генератор белого шума, тут еще и градиентный, белый шум вот этой штукой отдается:
//выдает по координате значение из фэйкового бесконечного массива 
    
private static int rand(int xint yint z){ 
        
int x0 =(256+(x%256))%256
        
int y0 =(256+(y%256))%256
        
int z0 =(256+(z%256))%256;     
        return 
randDatax0 randDatay0 randDataz0 ] ] ];      
    } 
в х0,y0,z0 я как умею обрезаю любое число чтобы оно в 0...255 попало, защита от выхода за границы массива.
а три обращения к массиву на точку не такая уж и куча. Но я хз, я в функции не умею.
(Offline)
 
Ответить с цитированием