3D-куб при проецировании выглядит как кубоид [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 3D-куб при проецировании выглядит как кубоид [дубликат]

Сообщение Anonymous »

Я создаю 3D-рендерер, который отображает куб на основе заданных точек и ребер. Для проецирования 3D-точек на 2D-экран используется следующая формула:
xproj = (x*f)/(z+f)
yproj = (y*f)/(z+f)
где f — фокусное расстояние, а x proj и yproj — координаты точек, которые будут размещены на экране. Моя проблема в том, что куб, который я показываю, больше похож на кубоид.
Вот как он выглядит:
Должен быть куб, выглядит как кубоид p>
Точки сохраняются в списке и проецируются на основе функции проецирования.

Код: Выделить всё

points = [[-50, -50, 50],
[-50, 50, 50],
[50, 50, 50],
[50, -50, 50],
[-50, -50, -50],
[-50, 50, -50],
[50, 50, -50],
[50, -50, -50]]

edges = [[0, 4],
[0, 3],
[0, 1],
[1, 5],
[1, 2],
[2, 3],
[2, 6],
[4, 5],
[4, 7],
[5, 6],
[6, 7],
[3, 7]]

# Other functions

def project(pos, lines, fcl):
pos_prj = []
for i in pos:
x = i[0]
y = i[1]
z = i[2]
try:
x_prj = (x*fcl)/(z+fcl)
y_prj = (y*fcl)/(z+fcl)
except:
x_prj = x
y_prj = y
draw_point([x_prj, y_prj])
pos_prj.append([x_prj, y_prj])
for i in lines:
draw_edge(pos_prj[i[0]], pos_prj[i[1]])

# Projection function is called later in the main loop
Я попробовал немного изменить используемую формулу (изменяя операторы, модифицируя формулу и т. д.), но это не сработало.

Подробнее здесь: https://stackoverflow.com/questions/786 ... projecting
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»