перспективная проекция отрезков

когда я накладываю 3D-точку на 2D-экран, я использую

    if( z > 1.0 )                   
     {
      screen_x = (x/z)*500;         
      screen_y = (y/z)*500;
     }

это я просто могу выбросить все 'задние' точки и масштабировать передние точки

но теперь мне нужно отливать / проецировать линейные сегменты - до 2d точек, тогда я могу нарисовать его как 2d линию

в некоторых случаях одна точка линейного сегмента находится в переднем пространстве, а другая - в заднем - как отлить заднюю точку, чтобы я мог нарисовать ее как 2-мерную линию?

много спасибо за ответ


person grunge fightr    schedule 24.11.2013    source источник
comment
Хотите, чтобы линия на экране была прямой?   -  person Beta    schedule 24.11.2013
comment
что вы имеете в виду прямо на экране? Я хочу сделать 3d из линий, проводов - с перспективной проекцией   -  person grunge fightr    schedule 24.11.2013
comment
Вы хотите спроецировать трехмерный линейный сегмент в 2D. Вы хотите спроецировать широко разнесенные точки с высоким z на точки, расположенные близко друг к другу. Есть ли у вас другие требования? Например, может быть, вы хотите, чтобы сегменты линии отображались на сегменты линии? Я спрашиваю, потому что не хочу отвечать, а потом обнаруживаю, что это не то, что вы хотели.   -  person Beta    schedule 24.11.2013
comment
не понимаю этот вопрос - я просто хочу проецировать трехмерный линейный сегмент (x, y, z) - (x2, y2, z2) на 2d линейный сегмент (x, y) - (x2, y2) я мог бы рисовать на экране   -  person grunge fightr    schedule 25.11.2013


Ответы (1)


Это сделает то, о чем вы просите:

screen_x = (x/(|z|+1.0))*500;         
screen_y = (y/(|z|+1.0))*500;
person Beta    schedule 25.11.2013
comment
ну отлично, если это сработает, я не уверен, надо проверить .. и нет if (z ›что-то) или что-то в этом роде? - person grunge fightr; 25.11.2013