Pysique, un moteur 3D simpliste !

a marqué ce sujet comme résolu.

yop, sympa ton projet =)

j'ai lu un peu tes sources, et j'aimerais te faire part d'un truc sur ta class Point3D dans engine.py

tes 4 méthodes tu retournes un nouvel objet Point3D alors que tu pourrais simplement modifier l'instance de ta class avec les nouvelles coordonnées calculé nan ?

1
2
3
4
5
6
7
8
def rotateX(self, angle):
        """ Rotates the point around the X axis by the given angle in degrees. """
        rad = math.radians(angle)
        cosa = math.cos(rad)
        sina = math.sin(rad)
        y = self.y * cosa - self.z * sina
        z = self.y * sina + self.z * cosa
        return Point3D(self.x, y, z)

deviendrais

1
2
3
4
5
6
7
def rotateX(self, angle):
        """ Rotates the point around the X axis by the given angle in degrees. """
        rad = math.radians(angle)
        cosa = math.cos(rad)
        sina = math.sin(rad)
        self.y = self.y * cosa - self.z * sina
        self.z = self.y * sina + self.z * cosa

à mon avis tu gagnerais en terme de perf memoire puisque tu évites l’instanciation d'un nouvel objet

j'ai pas eu le temps de lire toute tes sources mais si tu veux je peux y jeter un coup d’oeil plus tard =)

+0 -0

je vois pas pourquoi tes objets tourneraient de plus en plus vite, je fais exactement la même chose que toi, j'évite juste la création d'une nouvelle class en modifiant l'instance courant du point en question

autre chose, qu'elle est le rapport entre ta fonction ligne 425 ou tu modifie une variable et ta class Point3D ?

de plus, avec ta méthode, pour prendre en compte le changement, le code doit ressembler à ca vu que tu retourne une instance

1
2
p = Point3D(1, 1, 1)
p = p.rotateX(10)

alors qu'avec ma méthode, tu obtiens:

1
2
p = Point3D(1, 1, 1)
p.rotateX(10)

si tu veux réduire la taille de ton code, je te conseille aussi de faire de l'héritage sur tes class Pyramide & cie, tu peux gagner environ 20 lignes par class

je peux pas t'en vouloir de dire des chose fausses, tu as l'aire d'apprendre seul alors que je suis en 3ème année d'école informatique (epitech) ;)

pour l'héritage je te conseil ca, ton code n'en sera que plus claire après et si tu doit apporter une modification, tu n'aurais qu'un endroit à modifier ;)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class BaseObject():
    def __init__(self, /*tes arguments*/)
        self.angleX, self.angleY, self.angleZ = 0, 0, 0
        self.xpos = xpos
        self.ypos = ypos
        self.zpos = zpos

    def draw(self):
        pass

    def set_default(self):
        pass

    def rotateX(self, dir=1):
        self.angleX += dir

    def rotateY(self, dir=1):
        self.angleY += dir

    def rotateZ(self, dir=1):
        self.angleZ += dir

    def moveX(self, dir=1):
        self.xpos += dir

    def moveY(self, dir=1):
        self.ypos += dir

    def moveZ(self, dir=1):
        self.zpos += dir

class Sphere(BaseObject):
    # le reste de ton code
    pass

— Je coupe un peut votre conversation ^^

L'objectif c'est donc d’expérimenter la création d'un moteur 3D avec python ? En terme de perf ça reste toujours intéressant ? La t'es encore au début mais si on souhaite afficher une grosse scène j'entends, ça va pas être "lent" ? Je pose la question en tant que Artiste 3D, côté perf. et autre je n'ai aucune idée.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte