2013-04-03 6 views
0

Я нашел расстояние между точками пересечения с функцией «D3DXIntersectTri». Теперь, используя значение расстояния, как я могу найти это значение точек?DirectX9 Как найти точку пересечения?

IDE: Delphi - JEDI

Язык: Паскаль

DirectX 9

EDIT: На самом деле у меня есть 2 цилиндра и хотите сделать только пересекались часть в 3-Dimention. см Изображение: enter image description here

+1

Возможный дубликат: http://stackoverflow.com/questions/10294286/get-world-coordinates-from-d3dxintersecttri – paiden

ответ

1

Как объяснено в MSDN article, вы можете вычислить точку с координатами барицентрическое:

p = p1 + pU * (p2 - p1) + pV(p3 - p1) 
+0

Почему он показывает значение P1? – Ganesh

+0

Что значит? –

+0

Я получаю одинаковое значение p и p1. – Ganesh

0

Оказание определенных частей экрана является задачей буфера трафарета. Если вы не хотите создавать новый вершинный буфер из пересечения (который может быть создан путем отсечения частей, что не так просто), использование буфера трафарета более эффективно.

Буфер трафарета - это буфер, содержащий целые значения. Вы должны создать его с буфером глубины, указав правильный формат (например, D24S8). Затем вы можете указать, когда пиксели отбрасываются. Вот идея:

Clear stencil buffer to 0 
Enable solid rendering 
Enable stencil buffer 
Set blend states to not draw anything (Souce: 0, Destination: 1) 
Disable depth testing, enable backface culling 
Set the following stencil states: 
    CompareFunc to Always 
    StencilRef to 1 
    StencilWriteMask to 255 
    StencilFail to Replace 
    StencilPass to Replace 
    //this will set value 1 to every pixel that will be drawn 
Draw the first cylinder 
Now set the following stencil states: 
    CompareFunc to Equal 
    StencilFail to Keep //this keeps the value where the stencil test fails 
    StencilPass to Increment //this increments the value to 2 where stencil test passes 
Draw the second cylinder 
//Now there is a 2 in the stencil buffer where the cylinders intersect 
Reset blend states 
Reenable depth testing 
Set StencilRef to 2 //render only pixels where stencil value == 2 
Draw both cylinders 

Возможно, вам потребуется изменить функцию сравнения до GreaterEqual перед последним шагом рендеринга. Если пиксели перекрываются, могут быть значения больше двух.

+0

Большое спасибо Нико Шертлер. Мой вопрос заключается только в том, чтобы найти точку пересечения, поэтому я задам еще один вопрос для рендеринга части пересечения. – Ganesh

 Смежные вопросы

  • Нет связанных вопросов^_^