Рисование нескольких объектов

Я уже некоторое время изучаю DirectX & Я пришел к выводу нескольких объектов на экран из файлов .obj. Моя проблема в том, что если я нарисую 2 объекта, 2-й розыгрыш будет поверх 1-го.

Пример:
Obj1 = картонная коробка
Obj2 = Cube

loadStuff_&_draw(Obj1);
loadStuff_&_draw(Obj2);

Это нарисует куб снаружи / перед боксом, даже если он находится внутри / сзади.

Как сделать так, чтобы несколько объектов соединились так, чтобы они правильно перекрывались?

Единственные вещи про рисование, о которых я знаю:

  • Загрузка вершины, индекса, постоянных буферов
  • updateSubresource ()
  • drawIndexed ()

Редактировать:
Вот изображение куба в коробке. Это показывает, что куб находится позади коробки, а не внутри. Это также показывает, что обод коробки защелкивается за коробкой. Не уверен, что случилось.

Я нарисовал куб, затем нарисовал пустую коробку.

Визуализация куба в коробке

1

Решение

Для этого предназначен буфер глубины (иногда называемый z-буфером). Когда вы пишете пиксель во время рисования одного объекта, он записывает расстояние от точки обзора для этого пикселя в буфере глубины. Затем, когда вы рисуете второй объект, который также записывает в этот пиксель, он может сравнивать значение глубины нового объекта в этом пикселе с буферизованным значением (из предыдущих объектов) и перезаписывает пиксель только в том случае, если новое значение будет ближе, чем старое один. Если пиксель рисуется, то значение глубины обновляется, чтобы отразить более близкое значение.

Некоторые ссылки, которые могут дать вам некоторые идеи о том, как это реализовать:

http://msdn.microsoft.com/en-gb/library/windows/desktop/bb205074%28v=vs.85%29.aspx

http://www.rastertek.com/dx11tut35.html

https://stackoverflow.com/a/8641210/28875

1

Другие решения

Это зависит от того, как вы устанавливаете мировую матрицу объекта. Если вы хотите поместить второй объект за первым объектом, то установите правильную мировую матрицу перед рисованием. предположим, что объект 1 находится в начале координат (0, 0, 0), затем вы можете перевести object2 в (0, 0, -10), чтобы сделать его позади object1. и перевод в (0, 0, 10) сделает его перед object1.

-1