directx щель между треугольниками
А если ABC тоже заменить на пару треугольников ABE и AEC, то нормально будет?
Да. Но это не подходит.
Если теперь нарисовать ABC BDE и EDC, где E - середина BC, то по отрезку BC будет щель, из которой будет видно несколько пикселей.Мне немного лень разбираться. Вопрос такой: все ли треугольники рисуются одинаково левосторонне или правосторонне? (По умолчанию, если ты ничего не менял, то система координат в DirectX вроде бы правосторонняя.)
Еще в первом посте я соврал - если использовать треугольник "затычку" BCE без света, то все рисуется нормально.
Гарантировать большее действительно было бы трудновато. Например, само свойство, что два отрезка лежат строго на одной прямой, хрен сформулируешь, с учётом того что все координаты заданы с конечной точностью. А даже если сформулировать - кто сказал, что GPU обязан работать с такой же точностью?
Рисуется по два примитива на каждый треугольник - верхняя и нижняя грани.Я не знаю, где у треугольника верхняя и нижняя грани. Я хотел сказать, что при некоторых обстоятельствах примитивы надо рисовать одинаково, грубо говоря, по или против часовой стрелки.
Вообще, чтобы между треугольниками не было разрывов, надо использовать стрипы (D3DPT_TRIANGLESTRIP). Тогда DirectX сам их правильно нарисует.
Стрипы не помогают. У треугольника в пространсве две грани - верхняя и нижняя. Если рисовать ABC нарисуется одна, если ACB - другая.
Потому что все эти подпрограммы рисования треугольников гарантируют только, что если рёбра в точности совпадают (начало и конец то потерянных пикселей и перекрытия между ними не будет.Видимо так и есть. Жаль.
Т.е. по-твоему между двумя треугольниками с общим ребром возможен зазор, если вершины обходятся не в том порядке? С позиции здравого смысла порядок обхода должен влиять только на ориентацию грани (лицевая или нет). Если ты прав, у этого эффекта должны быть какие-то весьма тонкие причины. Какие?
по-твоему между двумя треугольниками с общим ребром возможен зазор, если вершины обходятся не в том порядке?Может, у них могут возникать проблемы, например, с depth buffer. Вообще от этого так же зависит, кака сторона отрисовывается - лицевая или обратная. Это тоже может привести к дефектам, особенно если используешь окрашенные треугольники.
верхняя и нижняяБлин, я пол часа втыкал. Они называются - лицевая и обратная. Font face и back face. Почему стрипы не помогают? При использовании triangle strip у тебя тоже дырки? Тогда можно попробовать обновить драйверы видеокарты.
Если ты прав, у этого эффекта должны быть какие-то весьма тонкие причины. Какие?Кстати, каким алгоритмом строится прямая между двумя точками? Ведь DirectX координаты задают именно точку, а не пиксель. Точка вроде бы попадает в центр пикселя. Поэтому в DirectX есть правила растеризации, при попадании грани (edge) треугольника в центр пикселя точка может появиться, а может и не появиться.
http://msdn.microsoft.com/en-us/library/bb147314(VS.85).aspx
Стрипы не помогают. У треугольника в пространсве две грани - верхняя и нижняя. Если рисовать ABC нарисуется одна, если ACB - другая.Если рисуешь в основном треугольники, а не многокранные объекты, можешь отключить CULL_FACE (напрямую с DirectX не работал, не знаю как там это называется и делается)
http://www.geuz.org/gmsh/ для просветления
на курсах по машграфу учат так не делать. В любом случае стороны не должны проходить мимо точек. Если ты разбил одно ребра на два точкой, то через эту точку нужно провести все рёбра. Почитай исходники Если ты разбил одно ребра на два точкой, то через эту точку нужно провести все рёбра.блин, вот реально, че-то я туплю, до этого не допер.
грубо говоря, ты должен получить множество точек поверхности, тем гуще, чем больше деталей видно при текущей матрице проекции. А потом соединить их рёбрами, и получишь годную сетку. Конкретные алгоритмы разнятся, но гуглятся лекго
Оставить комментарий
Devid
Пусть есть два треугольника ABC и BDC. Рисуются они хорошо.Если теперь нарисовать ABC BDE и EDC, где E - середина BC, то по отрезку BC будет щель, из которой будет видно несколько пикселей.
Если же еще вставить треугольник BCE, то вместо белых пикселей будут черные. И с освещением и без.
В чем проблема?