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