2016-11-29 12 views
0

Я делаю процессуальное создание местности. В настоящий момент я получил ландшафт, созданный шумом Перлина. Теперь я хочу реализовать процессуальное поколение травы, но с некоторыми ограничениями.Spawn объектов на верхней сетке

Я только хочу генерировать траву, если она находится в радиусе центра мира и на вершине земли. Я могу легко порождать траву в радиусе центра мира. Проблема в том, что я не знаю, как узнать высоту земли для этой заданной координаты.

Это моя попытка реализовать это, но не работает, и у меня нет идеи, как это сделать. Мне нужен совет.

var group = new THREE.Group(); 

noise.seed(23); 
var worldWidth = 256, worldDepth = 256; 
var data = generateNoise(worldWidth, worldDepth); 
var geometry = new THREE.PlaneBufferGeometry(7500, 7500, worldWidth - 1, worldDepth - 1); 
geometry.rotateX(- Math.PI/2); 
geometry.computeBoundingBox(); 

var vertices = geometry.attributes.position.array; 

var positions = [] 

for (var i = 0, j = 0, l = vertices.length; i < l; i ++, j += 3) { 
    vertices [ j + 1 ] = data[ i ] * 10; 

    //check if this coordinate is inside the radius we want to know if can spawn a grass 
    // if is inside spawn a plant knowing the height of this position 

} 

var grass = new THREEx.createGrassTufts(positions) 
group.add(grass); 

var texture = assets.textures.grass.val; 

var material = new THREE.MeshPhongMaterial({ map: texture, shading: THREE.SmoothShading }); 

var ground = new THREE.Mesh(geometry, material); 
ground.receiveShadow = true; 
ground.castShadow = true; 

group.add(ground); 
+0

_but doesn Я работаю, и у меня нет идеи, как это сделать. Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы * без четкой постановки задачи не полезны другим читателям *. См.: Как создать [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). – Marcs

+0

Не является ли высота земли той же величиной, которую вы назначаете из шума Perlin? Если вы ищете среднюю высоту или высоту с самой низкой точки, вам нужно либо получить эту информацию из вашего набора шумов, либо рассчитать средние/низкие точки во время прохождения манипуляций с вершинами, затем выполнить вторую перейдите для вычисления истинной высоты. – TheJim01

ответ

0

Перлин шум создается для массива ячеек:

  • найти обратно клетки из координат cx= x/cell_size_x и cy = ...
  • получить значения высоты от матрицы шума ячейки: height = cell[cx][cy]

Примечания : это псевдокод

 Смежные вопросы

  • Нет связанных вопросов^_^