Итак, в моем приложении есть ситуация, когда я хочу нарисовать полный экран в виде я sh треугольников. Я делаю это с тем, что вы ожидаете. Буфер вершин и индексный буфер, который проходит по этим вершинам.
Когда я отлаживал, я хотел увидеть края этого себя sh, чтобы помочь мне визуально понять, что происходит. Это было, когда я обнаружил это изображение здесь. Это было нарисовано с использованием [encoder setTriangleFillMode:MTLTriangleFillModeLines];
с конвейером, у которого фрагментный шейдер выводит зеленый цвет. Вы можете видеть, что здесь есть диагонали в каждом ряду по любой причине.
Мой вопрос по существу таков. Похоже ли это на случай, когда my me sh просто неверен (возможно, буфер индекса) или MTLTriangleFillModeLines не очень хорошо справляется с вырожденными треугольниками?
Некоторые дополнительные важные детали:
- Рисование выполняется с помощью
drawIndexedPrimitives
с MTLPrimitiveTypeTriangleStrip
- Я использую
uint32_t
в качестве типа индекса - Индексы определяются на основе старого бита примера кода из здесь , поскольку они также разбили экран на меня sh.
Вот копия кода с Github
unsigned int index = 0;
for (int i=0; i<poolHeight-1; i++)
{
for (int j=0; j<poolWidth; j++)
{
if (i%2 == 0)
{
// emit extra index to create degenerate triangle
if (j == 0)
{
rippleIndicies[index] = i*poolWidth+j;
index++;
}
rippleIndicies[index] = i*poolWidth+j;
index++;
rippleIndicies[index] = (i+1)*poolWidth+j;
index++;
// emit extra index to create degenerate triangle
if (j == (poolWidth-1))
{
rippleIndicies[index] = (i+1)*poolWidth+j;
index++;
}
}
else
{
// emit extra index to create degenerate triangle
if (j == 0)
{
rippleIndicies[index] = (i+1)*poolWidth+j;
index++;
}
rippleIndicies[index] = (i+1)*poolWidth+j;
index++;
rippleIndicies[index] = i*poolWidth+j;
index++;
// emit extra index to create degenerate triangle
if (j == (poolWidth-1))
{
rippleIndicies[index] = i*poolWidth+j;
index++;
}
}
}
}