directx щель между треугольниками
А если ABC тоже заменить на пару треугольников ABE и AEC, то нормально будет?
Да. Но это не подходит.
Если теперь нарисовать ABC BDE и EDC, где E - середина BC, то по отрезку BC будет щель, из которой будет видно несколько пикселей.Мне немного лень разбираться. Вопрос такой: все ли треугольники рисуются одинаково левосторонне или правосторонне? (По умолчанию, если ты ничего не менял, то система координат в DirectX вроде бы правосторонняя.)
Рисуется по два примитива на каждый треугольник - верхняя и нижняя грани.
Еще в первом посте я соврал - если использовать треугольник "затычку" BCE без света, то все рисуется нормально.
Еще в первом посте я соврал - если использовать треугольник "затычку" BCE без света, то все рисуется нормально.
Потому что все эти подпрограммы рисования треугольников гарантируют только, что если рёбра в точности совпадают (начало и конец то потерянных пикселей и перекрытия между ними не будет.
Гарантировать большее действительно было бы трудновато. Например, само свойство, что два отрезка лежат строго на одной прямой, хрен сформулируешь, с учётом того что все координаты заданы с конечной точностью. А даже если сформулировать - кто сказал, что GPU обязан работать с такой же точностью?
Гарантировать большее действительно было бы трудновато. Например, само свойство, что два отрезка лежат строго на одной прямой, хрен сформулируешь, с учётом того что все координаты заданы с конечной точностью. А даже если сформулировать - кто сказал, что 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, то вместо белых пикселей будут черные. И с освещением и без.
В чем проблема?