Вы используете четырехточечное значение, чтобы нарисовать прямоугольник с TRIANGLE_STRIP
.TRIANGLE_STRIP
будет использовать каждое трехточечное значение для создания треугольника: [ABCD]
, webgl нарисует треугольник: ABC и BCD.
в вашем коде:
initialVertices = [
0, 0,
0, 20,
20, 0,
20, 20,
];
Когда я введу RIGHT
это создаст новые вершины, подобные этой (например, плюс 10px):
[
10, 0,
10, 20,
30, 0,
30, 20,
]
, и ваш код будет помещать в буфер данные, чтобы добавить новые данные вершин в буфер, поэтому все данные вершин в буфереis:
[
0, 0,
0, 20,
20, 0,
20, 20,
10, 0,
10, 20,
30, 0,
30, 20,
];
это означает, что данные вершин теперь [ABCDEFGH]
.
TRIANGLE_STRIP
тип будет использовать каждые три точки для рисования треугольника, так что 6 треугольников будут нарисованы не4: ABC BCD CDE DEF EFG FGH
, я думаю, что вы просто хотите получить: ABC BCD EFG FGH
треугольники.
разрешение:
использовать вырожденный треугольник.
Не используйте [ABCD]
данные вершин напрямую, вы можете использовать [AABCDD]
, данные 6 точек, чтобы сделать прямоугольник.
[AABCDD] -> AAB ABC BCD CDD , AAB and CDD
- вырожденный треугольник, webgl не будет рисоватьЭто.поэтому, когда вы добавляете новые данные точек прямоугольника, как это: [EEFGHH]
в буфере, все данные равны [AABCDDEEFGHH]
, webgl сделает их в треугольники:
AAB ABC BCD CDD DDE DEE EFG FGH GHH
,
youAAB CDD DDE DEE GHH
не будет нарисован, поэтому вы можете получить два отдельных прямоугольника: ABC BCD EFG FGH
Надеюсь, вы понимаете мой превосходный английский