directx9 вопрос, возможно глупый
Как кошерно добиться нужного результата?Как кошерно не знаю.
Попробуй рендерить два раза с разным способом заливки:
SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
рисовал примитивы закрашенные одним цветом, а бордюр примитивов - другим цветом.
например:
тут не DirectX, но аналогия, надеюсь, сработает.
Спасибо, но не помогает. В результате сетка опять получается прерывистой. Кроме того она получется треугольной, а не квадратной, но это уже частности.
А как в directx рисовать примитивы с границей?
А наложить одно на другое нельзя?
А как в directx рисовать примитивы с границей?Если тебе нужна квадратная сетка, то тебе придётся руками рисовать примитивы-линии, а не примитивы-треугольники. Смотри в сторону line strip, line list и прочее. Естественно, рисовать надо после отрисовки поверхности. (Но это и приводит к твоей проблеме...)
Но это и приводит к твоей проблеме...Проблема называется Z-Fighting. Гугл подсказывает, что решить её можно с помощью projection matrix. На самом деле гугл выдаёт много результатов, но копаться в них нет времени.
Я так и делаю, рисую поверхность треугольниками, сетку - линиями (см. первый пост). И это действительно приводит к проблеме.
Z-FightingСпасибо
правда так рендериться медленнее будет.
в opengl это делается с помощью glPolygonOffset, можно погуглить на тему аналогов. лично у меня интернетов нету
Там, кажется, была более крутая штука: выставление операции сравнения в Z-буфере. По дефолту там "строго меньше", если поставить "меньше или равно", то всё заработает. Или если оставить её как была, но отрисовать сначала сетку, потом объект, так даже правильней.
One member of the D3DCMPFUNC enumerated type. The default value is D3DCMP_LESSEQUAL.
Да и операцию можно и в опенгл задавать.
А вот поставить строго больше и сначала нарисовать сетку можно попробовать.
Тогда уж лучше сразу рисовать треугольнички с текстурой - по крайней мере будет быстрее.
Ну как бы обычно подразумевается, что правильная сетка всегда толщиной ровно в один экранный пиксель, независимо от расстояния до конкретной ячейки.
Я про неразумность использования цилиндров.
И текстуры и цилиндры попадают в категорию "некошерно" мне кажется.
Оставить комментарий
Devid
Поверхность задана как z(x, y) где (x, y) - квадратная сетка. Хочется нарисовать эту поверхность как сплошную и чтобы одновременно на ней была видна сетка.Сейчас поверхность рисоуется как набор примитивов(треугольников а сетка как набор отрезков. Но буффер глубины работает не совсем хорошо, оно и понятно - ведь сетка лежит на поверхности. Поэтому сетка будет прерывистой, часть будет невидна.
Если же приподнимать чуть-чуть сетку над поверхностью, то она будет видна нормально, но будет заметно, что она лежит не на поверхности, а немного сверху.
Как кошерно добиться нужного результата?