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
