website logo
Auteur
avatar
alex

Forum » » Création-Développement » » Resultat 3D hollywood


Posté : 23-12-2010 14:57 icone du post

salut artblink

Réponses:

-> En C il n'y a pas d'instruction Add(), on va utiliser A++ ou A = A +1 (pour faire simple) selon le compilateur utilisé (et son optimiseur) et le processeur utilisé la rapidité peut varier.

-> Oui accéder à un tableau est plus rapide qu'un calcul (en C)

-> il est vrai que toutes les opérations ne sont pas forcément supportées par tous les processeurs. Concernant la division ne t'en fait pas le processeur sait gérer. Je pense que tu n'est pas encore arriver à ce niveau d'optimisation bas niveau (que tu ne pourras vraisemblablement pas atteindre avec un langage aussi haut niveau qu'Hollywood de toutes façons).

Sinon un rapide coup d'oeil à ton code et une rapide (petite) optimisation sans chercher à comprendre ton code :


For I=0 To 169
; régle 1 : éviter recalculer dans une boucle imbriquée des choses qui dépendent de la boucle supérieure
Local ABz=VZ[I*3+1]-VZ[I*3]
Local ACz=VZ[I*3+2]-VZ[I*3]

For T=0 To 169
If ZM[I]=Tri[T].TZM
U[0]=Tri[T].TXE1
U[1]=Tri[T].TYE1
U[2]=Tri[T].TXE2
U[3]=Tri[T].TYE2
U[4]=Tri[T].TXE3
U[5]=Tri[T].TYE3

Local ABx=U[2]-U[0]
Local ABy=U[3]-U[1]
Local ACx=U[4]-U[0]
Local ACy=U[5]-U[1]

Local Nx=ABy*ACy-ABz*ACy
Local Ny=ABz*ACx-ABx*ACz
Local Nz=ABx*ACy-ABy*ACx

Local D1=Sqrt(Nx^2+Ny^2+Nz^2)

If D1<>0
Nx=Nx/D1
Ny=Ny/D1
Nz=Nz/D1
Else
Nx=Ny=Nz=1
EndIf

; règle 2 : utiliser au maximum les variables déjà calculées
; Local A=(U[2]-U[0])*(U[5]-U[1])-(U[4]-U[0])*(U[3]-U[1])
Local A=ABx*ACy-ACx*ABy
; règle 3 : éviter de faire des successions de If quand ils sont exclusifs les uns des autres, préférer switch ou l'utilisation de ElseIf
;If Nx>0 Then couleur=$6666
;If Nx>0.1 Then couleur=$7777
;If Nx>0.2 Then couleur=$8888
;If Nx>0.3 Then couleur=$9999
;If Nx>0.4 Then couleur=$AAAA
;If Nx>0.5 Then couleur=$BBBB
;If Nx>0.6 Then couleur=$CCCC
;If Nx>0.7 Then couleur=$DDDD
;If Nx>0.8 Then couleur=$EEEE
;If Nx>0.9 Then couleur=$FFFF
If Nx>0.9 Then couleur=$FFFF
ElseIf Nx>0.8 Then couleur=$EEEE
ElseIf Nx>0.7 Then couleur=$DDDD
ElseIf Nx>0.6 Then couleur=$CCCC
ElseIf Nx>0.5 Then couleur=$BBBB
ElseIf Nx>0.4 Then couleur=$AAAA
ElseIf Nx>0.3 Then couleur=$9999
ElseIf Nx>0.2 Then couleur=$8888
ElseIf Nx>0.1 Then couleur=$7777
ElseIf Nx>0 Then couleur=$6666
If A<0 Then Polygon(CX,CY,U,3,couleur)
Break
EndIf
Next
Next

tu verras que j'ai ajouté des commentaires sur les optimisations que j'ai faites.
Une dernière remarque: l'utilisation du tableau U semble inutile, comme il n'est utilisé que dans le calcul des variables locales AB(x|y) et AC(x|y) tu pourrais t'en passer et utiliser directement l'accès au tableau Tri pour calculer ces variables.
--
AmigaOne A1222
AmigaOne X1000 - RadeonHD - 2 Gio RAM
AmigaOne XE G4@933 - Radeon 9200 SE - 512 Mio RAM

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=944&forum=14