2017-02-09 2 views
-1

Я пытаюсь взять сетку OpenGL, которая у меня есть, и дать ей случайную позицию внутри комнаты. В настоящее время у меня есть эта строка кода:Как создать случайные позиции для сеток?

positions[i] = glm::vec3(rand() % 10 - 1, rand() % 10 - 1, rand() % 10 - 1); 

Который только генерирует случайное положение (x, y и z). Однако я не совсем уверен, что делает «% 10 - 1», так как этот фрагмент кода использовался онлайн. Я могу изменить числа и движения сетки в сцене, но я не совсем уверен, как эти цифры влияют на нее.

Как отредактировать линию, чтобы сетки были не слишком близко друг к другу и все вписывались в комнату (я знаю, что вы не знаете размеры комнаты/положение, поэтому просто объяснение будет очень полезно).

+0

случайные позиции в сетке arent, отличные от любых других случайных чисел. На это вы найдете множество вопросов/ответов. Попробуйте искать '', так как 'rand()' isnt the best rng – user463035818

ответ

2

Эта часть rand()% 10 - 1: rand() - генератор случайных чисел. % - операция по модулю. Таким образом, в основном rand()% 10 генерирует все числа в диапазоне [0,9]. Теперь rand()% 10 - 1 изменит диапазон на [-1,8].

Как отредактировать линию так, чтобы сетки были не слишком близко друг к другу и все вписывались в комнату (я знаю, что вы не знаете размеры/положение комнаты, поэтому просто объяснение будет очень полезно).

Просто измените 10 на максимальное значение размеров.

+0

Идеально, просто объяснение, в котором я нуждался, спасибо. Есть ли хороший способ обеспечить, чтобы сетки не были расположены слишком близко друг к другу? У моих сеток есть столбики для физики, поэтому я хочу избежать совпадений. –

+0

Вы можете использовать HashMap или что-то, чтобы сохранить координату. Поэтому всякий раз, когда вы получаете ту же самую координату, которую вы видели, вы уже просто генерируете значения, пока не получите новую координату. Ну, вы не можете гарантировать, что сетки не заданы, потому что это генератор случайных чисел. – vk3105

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