2010-12-03 4 views
2

Это скорее математическая проблема, чем проблема программирования.Visual Basic. Net 3D Engine

Я создал очень простой 3D-движок с использованием Visual Basic .Net. Он отображает строки на экране с дополнительной осью z. Двигатель работает, однако, когда часть линии идет ниже 0, она беспорядочна и начинает рисовать линию, инвертированную снова.

Это, как он вычисляет точку:

y = (point.y/z) + offset.y + camera.y 
x = (point.x/z) + offset.x + camera.x 

Можно ли разработать способ рисовать только часть линии, когда она пересекает Z = 0 ось?

(исходный код) http://www.mediafire.com/?ww77q26ywj3a5ry

+0

Ссылка MediaFire больше недоступна. – 2018-03-07 23:55:19

ответ

2

Вы хотите сделать все, где г> 0, потому что все, что ниже нуля за камеры и где Z ноль ==, это будет взрывать, потому что вы не можете делить на ноль. Так что я хотел бы сделать это: ('Scuse C#, но это должно быть таким же, так или иначе)

y = z > 0 ? (point.y/z) + offset.y + camera.y : 10000; 
x = z > 0 ? (point.x/z) + offset.x + camera.x : 10000; 

Если значение 10000 является то, достаточно велико, что не будет отображаться на экране.

Если ось г указывает в противоположном направлении, вы не хотите, чтобы это сделать:

y = z < 0 ? -1*(point.y/z) + offset.y + camera.y : 10000; 
x = z < 0 ? -1*(point.x/z) + offset.x + camera.x : 10000; 
+0

Вы можете просто использовать Math.Sign (z) – Evgeny 2010-12-03 11:26:46

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