Test de mon petit moteur 3D filaire Hollywood

3 sujets de 16 à 18 (sur un total de 18)

  • 1
  • 2
  • Tarzin

      #139569

      Fonctionne très bien sous 68k en émulation.

      Ca montre de nouveau les possibilités d’Hollywood, bravo!

      Anonyme

        #139570

        Oups, j’avais oublié, voici le code Hollywood de mon projet:

        @SCREEN {Mode = « ask », Width = 640, Height = 400}

        FC=200

        CZ=200

        Function Controle()

        If IsKeyDown(« Left »)=True Then Gauche() ; Vers la gauche

        If IsKeyDown(« Right »)=True Then Droite() ; Vers la droite

        If IsKeyDown(« Up »)=True Then Haut() ; Vers le Haut

        If IsKeyDown(« Down »)=True Then Bas() ; Vers le bas

        If IsKeyDown(« a »)=True Then Zoomin() ; Zoom in

        If IsKeyDown(« z »)=True Then Zoomout() ; Zoom Out

        If IsKeyDown(« p »)=True Then SetFillStyle(#FILLCOLOR) ; Zoom Out

        If IsKeyDown(« o »)=True Then SetFillStyle(#FILLNONE)

        If IsKeyDown(« i »)=True Then SetFillStyle(#FILLGRADIENT, #LINEAR, $888888, $FFFFFF)

        If IsKeyDown(« u »)= True Then SetFormStyle(#ANTIALIAS)

        If IsKeyDown(« y »)= True Then SetFormStyle(#NORMAL)

        EndFunction

        Function Gauche()

        AY=AY+1

        If AY>359 Then AY=0

        EndFunction

        Function Droite()

        AY=AY-1

        If AY<0 Then AY=359

        EndFunction

        Function Haut()

        AX=AX+1

        If AX>359 Then AX=0

        EndFunction

        Function Bas()

        AX=AX-1

        If AX<0 Then AX=359

        EndFunction

        Function Zoomin()

        CZ=CZ+10

        If CZ>600 Then CZ=600

        EndFunction

        Function Zoomout()

        CZ=CZ-10

        If CZ<150 Then CZ=150

        EndFunction

        Function PRG()

        Controle() ; Exécution de la fonction Controle

        ; Réservation mémoire et création des tableaux

        Dim CO[360] ; 360 cases réservé car une rotation c’est 360° pour le Cosin us

        Dim SI[360] ; 360 cases réservé car une rotation c’est 360° pour le Sinus

        Dim X[8] ; Un cube, c’est 8 points en X

        Dim Y[8] ; Un cube, c’est 8 points en Y

        Dim Z[8] ; Un cube, c’est 8 points en Z

        Dim XE[8] ; Point final du cube a dessiner en X

        Dim YE[8] ; Point final du cube a dessiner en Y

        Dim ZZ[8] ; Point final du cube a dessiner en Z

        Dim P1[10] ; Polygone 1

        Dim P2[10] ; Polygone 2

        Dim P3[10] ; Polygone 3

        Dim P4[10] ; Polygone 4

        Dim P5[10] ; Polygone 5

        Dim P6[10] ; Polygone 6

        Flip ; Flip d’écran pour le double buffer

        Cls ; Effacement de l’écran sinon on verrait des cube partout lol

        For I=0 To 359

        CO=Cos(I*0.1)*360 ; Mise en mémoire de 360 calcule du Cosinus des angl es sur 360°

        SI=Sin(I*0.1)*360 ; Mise en mémoire de 360 calcule du Sinus des angles sur 360°

        Next

        For I=0 To 7

        X = {-50,50,50,-50,-50,50,50,-50} ; Coordonnées des points dans l’esp ace en X

        Y = {-50,-50,50,50,-50,-50,50,50} ; Coordonnées des points dans l’esp ace en Y

        Z = {-50,-50,-50,-50,50,50,50,50} ; Coordonnées des points dans l’esp ace en Z

        ;P={0,1,2,3,1,5,6,2,4,5,1,0,4,5,6,7,4,0,3,7,3,2,6,7}

        ;Calcule 3D grâce au magazine Dream N°27 de Mars 1996

        Y1=(Y*CO[AX]+Z*SI[AX])/360

        Z1=(-Y*SI[AX]+Z*CO[AX])/360

        X1=(X*CO[AY]+Z1*SI[AY])/360

        ZZ=(-X*SI[AY]+Z1*CO[AY])/360

        X=(X1*CO[AZ]+Y1*SI[AZ])/360

        Y=(-X1*SI[AZ]+Y1*CO[AZ])/360

        D=FC/(Sqrt(X^2+Y^2+(CZ+ZZ)^2))

        XE=320+X*D

        YE=200+Y*D

        Next

        ; Calcule final

        P1 = {XE[0],YE[0],XE[1],YE[1],XE[2],YE[2],XE[3],YE[3],XE[0],YE[0]} ; Polygon 1

        P2 = {XE[1],YE[1],XE[5],YE[5],XE[6],YE[6],XE[2],YE[2],XE[1],YE[1]} ; Polygon 2

        P3 = {XE[4],YE[4],XE[5],YE[5],XE[1],YE[1],XE[0],YE[0],XE[4],YE[4]} ; Polygon 3

        P4 = {XE[4],YE[4],XE[5],YE[5],XE[6],YE[6],XE[7],YE[7],XE[4],YE[4]} ; Polygon 4

        P5 = {XE[4],YE[4],XE[0],YE[0],XE[3],YE[3],XE[7],YE[7],XE[4],YE[4]} ; Polygon 5

        P6 = {XE[3],YE[3],XE[2],YE[2],XE[6],YE[6],XE[7],YE[7],XE[3],YE[3]} ; Polygon 6

        Box (0,0,640,200,$3333EE)

        Locate (0,0)

        Print (« Flèche => Rotation cube »)

        Locate (0,12)

        Print (« Touche a => Zoom OUT »)

        Locate (0,24)

        Print (« Touche z => Zoom IN »)

        Locate (0,36)

        Print (« Touche p => coloration de Garnier »)

        Locate (0,48)

        Print (« Touche o => annuler la coloration »)

        Locate (0,60)

        Print (« Touche i => Un monde d’acier « )

        Locate (0,72)

        Print (« Touche u => Antialiasing »)

        Locate (0,84)

        Print (« Touche y => enlever l’Antialiasing »)

        Locate (0,96)

        Print (« Ctrl+c => Quitter »)

        ; Traçage des polygones avec tests

        ; les tests se font sur la coordonnées en Z

        ; en gros si le polygone passe derrière les autres alors il s’affiche pas

        ; je crois que normalement sa fais gagner du temp CPU… Non?

        If ZZ[1]+ZZ[5]+ZZ[6]+ZZ[2]<-40 Then Polygon (0,0,P2,5,#BLUE) If ZZ[4]+ZZ[5]+ZZ[1]+ZZ[0]<-40 Then Polygon (0,0,P3,5,#RED) If ZZ[0]+ZZ[1]+ZZ[2]+ZZ[3]>40 Then Polygon (0,0,P4,5,#YELLOW)

        If ZZ[1]+ZZ[5]+ZZ[6]+ZZ[2]>40 Then Polygon (0,0,P5,5,#WHITE)

        If ZZ[4]+ZZ[5]+ZZ[1]+ZZ[0]>40 Then Polygon (0,0,P6,5,#GREEN)

        If ZZ[0]+ZZ[1]+ZZ[2]+ZZ[3]<-40 Then Polygon (0,0,P1,5,#PURPLE) EndFunction BeginDoubleBuffer SetInterval(1,PRG,1000/50) Repeat WaitEvent Forever

        Eclatez-vous bien

        Tarzin

          #139571

          Oups, j’avais oublié,

          Bein, faut pas! ;-)

          Très bon exemple et bien documenté.

          Si tu en as d’autres, n’hésite pas, merci!

        3 sujets de 16 à 18 (sur un total de 18)

        • 1
        • 2
        • Vous devez être connecté pour répondre à ce sujet.

        Forums AmigaOS, MorphOS et AROS Développement Test de mon petit moteur 3D filaire Hollywood

        Amiga Impact