2017-02-09 27 views
-1

私は持っているOpenGLメッシュを取り、それを部屋の中のランダムな位置につけようとしています。私は現在、次のコード行を持っています:メッシュのランダムな位置を生成する方法は?

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

ちょうどランダムな位置(x、y、z)を生成します。しかし、このコードスニペットがオンラインで使用されて以来、私は '%10 - 1'が何をしているのかは完全にはわかりません。私はシーン内の数字とメッシュの動きを変更することができますが、数字がどのように影響しているかは完全にはわかりません。

メッシュが近すぎず、すべてが部​​屋に収まるように線を編集するにはどうすればいいですか(私はあなたが部屋の寸法や位置を知らないので、説明だけが役に立ちます)。

+0

メッシュ内のランダムな位置は、他の任意の乱数とは異なります。あなたはそれに関するたくさんの質問/答えを見つけるでしょう。 ''を探してみてください。 'rand()'は最高のrngではありません – user463035818

答えて

2

この部分のrand()%10 - 1:rand()は乱数発生器です。 %はモジュロ演算です。だから基本的には、rand()%10は[0,9]の範囲のすべての数値を生成します。これで、rand()%10-1は範囲を[-1,8]に変更します。

どのようにして、メッシュ同士が近すぎず、すべてが部​​屋内に収まるように線を編集できますか(部屋の寸法や位置がわからないことがわかりますので、説明は非常に役に立ちます)。

次元を最大値10に変更するだけです。

+0

完璧な、ちょうど私が必要な説明、ありがとう。メッシュの位置が近すぎないようにする良い方法はありますか?私のメッシュは物理学の衝突ボックスを持っているので、重なりを避けたい。 –

+0

ハッシュマップなどを使用して座標を保存できます。だから、あなたがすでに見たのと同じ座標を得るたびに、新しい座標を得るまで値を生成してください。 メッシュが乱数ジェネレータであるため、位置が指定されていないことを確認できません。 – vk3105

関連する問題