Я уже некоторое время изучаю DirectX & Я пришел к выводу нескольких объектов на экран из файлов .obj. Моя проблема в том, что если я нарисую 2 объекта, 2-й розыгрыш будет поверх 1-го.
Пример:
Obj1 = картонная коробка
Obj2 = Cube
loadStuff_&_draw(Obj1);
loadStuff_&_draw(Obj2);
Это нарисует куб снаружи / перед боксом, даже если он находится внутри / сзади.
Как сделать так, чтобы несколько объектов соединились так, чтобы они правильно перекрывались?
Единственные вещи про рисование, о которых я знаю:
Редактировать:
Вот изображение куба в коробке. Это показывает, что куб находится позади коробки, а не внутри. Это также показывает, что обод коробки защелкивается за коробкой. Не уверен, что случилось.
Я нарисовал куб, затем нарисовал пустую коробку.
Для этого предназначен буфер глубины (иногда называемый z-буфером). Когда вы пишете пиксель во время рисования одного объекта, он записывает расстояние от точки обзора для этого пикселя в буфере глубины. Затем, когда вы рисуете второй объект, который также записывает в этот пиксель, он может сравнивать значение глубины нового объекта в этом пикселе с буферизованным значением (из предыдущих объектов) и перезаписывает пиксель только в том случае, если новое значение будет ближе, чем старое один. Если пиксель рисуется, то значение глубины обновляется, чтобы отразить более близкое значение.
Некоторые ссылки, которые могут дать вам некоторые идеи о том, как это реализовать:
http://msdn.microsoft.com/en-gb/library/windows/desktop/bb205074%28v=vs.85%29.aspx
Это зависит от того, как вы устанавливаете мировую матрицу объекта. Если вы хотите поместить второй объект за первым объектом, то установите правильную мировую матрицу перед рисованием. предположим, что объект 1 находится в начале координат (0, 0, 0), затем вы можете перевести object2 в (0, 0, -10), чтобы сделать его позади object1. и перевод в (0, 0, 10) сделает его перед object1.