Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 33 722 956

  • Nb. de membres 193
  • Nb. d'articles 1 329
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Resultat 3D hollywood

Resultat 3D hollywood

3 Modérateur(s)
K-LElwoodcorto
artblink artblinkicon_post
Nouvelle mise à jour:

Code et commentaires revu et corrigé par Mr Thellier himself

Les exécutables sont OK
Le code source est maintenant ok avec commentaires OK

Amusez-vous bien ;-)

Respect
artblink artblinkicon_post
A mon avis, c'est les effets de lumières qui ralentissent le moteur...


J'ai trouvé comment améliorer le jeux de lumière, je conseil l'utilisation des tableaux pour optimiser vos programmes Hollywood, au lieu de faire des test, indiqué les valeurs a tester comme index du tableau, et à côtés des index, les valeurs pour une variable, sa elimine définivitement les IF..Endif (gain de temp ;-) )

N'oubliez pas que l'index d'un tableau avec hollywood n'est pas limité qu'aux chiffres entier et positif, l'index peut être des mots, des nombres négatif, à virgule...


J'ai uploader la nouvelle version... j'ai éliminer 10 test If à faire dans une boucle de 170 à chaque traçage de l'objet grâce à un petit tableaux de 10 valeurs ;-)
+ optimisation grace à Mr thellier ;-)

IMPORTANT : Le fichier source sur le liens est maintenant complété avec des explications et les étapes, un petit tuto hollywood pour faire de la 3D... Voilà...

Respect
Message édité par : artblink / 26-12-2010 13:58
sinisrus sinisrusicon_post
entre 14 et 17 fps sur microaone ça vien bon :-)
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon RX550 - 2Go de ram
artblink artblinkicon_post
A mon avis les EXE sont pas les bons, j'ai pas du uploader les bons executable, j'ai enlevé une boucle de 128 sur une autre boucle de 128... hum...

Je revoi ma copie. je test sur mon MicroAone avant ;-)

Sa vous évitera de perdre votre temps ;-)

J'optimise... réponse avant le 1 er janvier 2011... promis :=!

J'ai re uploader les bons fichiers... désolé...

Respect
Message édité par : artblink / 24-12-2010 16:39
K-L K-Licon_post
3 images par seconde sur AmigaOne G4 1 Ghz :-o
--
AmigaONE X1000 1,8 Ghz (A-Eon), Radeon RX560, 2 Go de Ram et OS4.1 FE
Sam460LE 1,14 Ghz (ACube Systems), Radeon RX560, 2 Go de Ram et OS4.1 FE
sinisrus sinisrusicon_post
Toujours sur winuae aucune différence... :-( 6/7 fps le pc est un intel core i7 (2.67 Ghz)
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon RX550 - 2Go de ram
artblink artblinkicon_post
Alex... si je te voi je te roule une pelle ... lol

Regarde un peux mon nouveau prg ;-)

http://jeannoel.roueste.free.fr/Amiga/starship6800x0.exe
http://jeannoel.roueste.free.fr/Amiga/starshipAOS4.exe
http://jeannoel.roueste.free.fr/Amiga/starshipMorphos.exe
http://jeannoel.roueste.free.fr/Amiga/starshipWarpos.exe

Pourquoi sa va plus vite? eh, eh, télécharge la source tu va comprendre de suite ;-)

Tu m'a mis la puce a l'oreille avec ton trie, pourquoi comparé???? alors que Zmoy de chaque triangle peut être une adresse de coordonnée...

Comme dirait brassens... lol Quand on est con, on est con..

Bref merci de l'échange alex... :=! c'est surtout les brainstorming qui me font avancé

Sa fais combien de FPS maintenant?

Oups, le code source est ici:

http://jeannoel.roueste.free.fr/Amiga/starship3d4.hws

@Crisot:

C'est mieux?

RESPECT Alex le grand ;-)
artblink artblinkicon_post
Cooooll.....

Merci, je comprend mieux l'optimisation de prg maintenant.

Sort est une commande de tri qui ne fonctionne que sur des tableaux simples... pas avec des tableaux complexes.... dommage... snif

Si j'avais un indexage dans les tableaux, ou une commande de recherche, mon comparateur serait plus rapide

Pour U, c'est mort, c'est les point en X et Y des 3 vecteur pour la commande Polygon (qui n'accepte que des tableaux)
alex alexicon_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
artblink artblinkicon_post
Coucou alex, j'essai... mais sa merdouille, j'arrive pas à l'intégrer dans mon programme.. il doit y avoir un ti truc à faire

La j'ai réussi à à optimiser un peux, j'ai remplacé les fichiers .exe et le fichier source.

Qui peux retester pour voir.

Pour info, en C:

A=A+1 est-il plus rapide que Add A,1?
Les accés dans des tableaux sont-ils plus rapides qu'un calcule?
J'ai vu que la division pour le risc n'est pas implémenté dans se type de processeur (sur wiki) donc une division demande beaucoup de temps machine à se type de proc... c'est vrai?

Bien vu alex, quand j'enlève la commande Break, je chute a 150 FPS... c'est mon tri en Z qui transforme mon PRG en usine à gaz

Merci de votre aide ;-)

Respect
Message édité par : artblink / 23-12-2010 12:41
Message édité par : artblink / 23-12-2010 13:31
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme