Наиболее значимые биты int в GLSL - PullRequest
0 голосов
/ 30 ноября 2011

Я использую glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, n, 100) для создания 100 цилиндров в OpenGL.Теперь я хочу поместить их в простую сетку в пространстве.Таким образом, каждый цилиндр будет на 10 единиц дальше от следующего.Обратите внимание, что изменятся только координаты x и z.

example cylinder positions:
1 = (0,0,0)
2 = (0,0,10)
3 = (10,0,0)
4 = (10,0,10)

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

Итак, мой вопрос, как я могу извлечь MSB / LSB из идентификатора?

1 Ответ

3 голосов
/ 30 ноября 2011

Почему вы вообще хотите извлечь из него биты?Если у вас есть 100 цилиндров, общая схема размещения их в сетке будет работать с кратными 10. Первые 10 идут в первом ряду, вторые 10 во втором ряду и т. Д.

В GLSL вы бы использовали / и %.Экземпляр / 10 был бы числом Z, а экземпляр % 10 - количеством X.

Так что, если экземпляр равен 3, 3 / 10 равен 0. 3 % 103. Таким образом, это будет 3 X и 0 Z.Для числа 94 94 / 10 равно 9, а 94 % 10 равно 4. Таким образом, 4 X и 9 Z.

Вы можете масштабировать значения X и Z, которые хотите получить, если хотите установить некоторое расстояние междуобъекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...