Да, вы можете получить доступ к другим вершинам, в зависимости от того, как вы выполняете рисование.Если вы делаете индексированное рисование, то связь между идентификаторами вершин и треугольниками регулируется вашим индексным буфером.Проблема, однако, в том, что вы не знаете, какой индекс используется для данного вызова вершинного шейдера (и он может быть вызван один раз для нескольких индексов, если все эти индексы ссылаются на одну и ту же вершину).
Таким образом, вам следует избегать индексированного рисования.
В этом случае, да, vertices[vid - 1]
и vertices[vid + 1]
- это предыдущие и следующие вершины.
Однако обратите внимание, что с треугольникомполоса, каждая вершина является членом нескольких треугольников.Таким образом, для каждой вершины нет одного уникального треугольника, от центра которого вы можете переместить эту вершину, чтобы расширить ее.Я ожидаю, что вы захотите, чтобы две вершины, которые являются соседями вдоль того же края полосы, что и обрабатываемая вами, используют их для вычисления нормали для сегмента, содержащего текущую вершину, и перемещаете вершину вдоль нее.
Поскольку вы анимируете и, следовательно, собираетесь делать это неоднократно, вы можете заранее рассчитать эти нормали и передать их как данные для каждой вершины.Вы можете использовать вычислительный шейдер для этих вычислений, хотя выполнение этого на процессоре может быть достаточно быстрым.Если вы предварительно вычислите нормали таким образом, вершинному шейдеру не нужно будет ссылаться на соседние вершины.