ich bin neu hier und heiße Christoph.
Was diesen Post betrifft, bin ich mir nicht ganz sicher, ob der im richtigen Forumsbereich erstellt wurde (habe aber nichts passenderes gefunden).
Nun mein Problem ist folgendes. Ich habe in Python ein Programm geschrieben, dass eine Liste mit 3D Punkten in 2D Punkte umrechnet durch die Bekannten Formeln ( einfachste Methode). Nun ist es aber so, dass mein Programm zwar funktioniert (ein paar verbesserungen müssen noch gemacht werden), aber das Quadrat sich nicht linear auf einen zubewegt sondern schräg an einem vorbei.
Der Code ist folgender:
Code: Alles auswählen
import pygame, math
from pygame.locals import *
points = [[1,1,1],[5,1,1],[5,5,1],[1,5,1]] #normal rectangle
def main():
pygame.init()
width , height = 800 , 600
screen = pygame.display.set_mode((width , height))
points = [[1,1,1],[5,1,1],[5,5,1],[1,5,1]] #normal rectangle
fov = 128
view_dist = 10
angle = 10
BLACK = (0,0,0)
WHITE = (255,255,255)
done = False
dist_change = 0
w_change = 0
h_change = 0
while not done:
#fill screen
screen.fill(BLACK)
#add changed distance if needed
view_dist += dist_change
width += w_change
height += h_change
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
dist_change = -0.25
if event.key == pygame.K_s:
dist_change = 0.25
if event.key == pygame.K_a:
w_change = -3
if event.key == pygame.K_d:
w_change = 3
if event.key == pygame.K_UP:
h_change = -1
if event.key == pygame.K_DOWN:
h_change = 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
dist_change = 0
if event.key == pygame.K_a or event.key == pygame.K_d:
w_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
h_change = 0
#projection of the points
point2d = []
for i in range(0,len(points)):
#calculate the x'
xp = int(int(points[i][0]) * fov / (int(points[i][2])+view_dist) + (width/2))
yp = int(-int(points[i][1]) * fov / (int(points[i][2])+view_dist) + (height/2))
point2d.append([xp,yp])
print(xp,yp)
#drawing the points
#list of the polygon is already complete so:
pygame.draw.polygon(screen, WHITE, point2d, 0)
pygame.display.flip()
main()
pygame.quit()
Könnte mir jemand helfen, wie ich das erreiche?
MfG,
Christoph