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

Pages vues depuis 25/07/2007 : 25 390 610

  • Nb. de membres 187
  • Nb. d'articles 1 271
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Je concurrence le moteur à 2 balle de crisot

Je concurrence le moteur à 2 balle de crisot #1447

6Contributeur(s)
artblinkzzd10hAmiDARKBrumigaCrisotElwood
3 Modérateur(s)
K-LElwoodcorto
artblink artblinkicon_post
Hihihihi.... J'ai le droit de déconner non?! Rolalalala, mon moteur est 1 milliard de fois plus pourrie que celui de crisot, mais j'ai le droit de rêver lol

Bon, les ch'tis, j'ai revu mon code de Raycasting (Moteur de Wolfenstein Fausse 3D :-P )

J'ai essayé de faire un code lisible est compréhensible (moteur de lancé de rayon)

Normalement, je dis bien NORMALEMENT, il est possible de le retranscrire très facilement pour un ti coder Amos

Amusez-vous a le coder, normalement, je dis bien NORMALEMENT, il est exécutable avec les version d'hollywood inférieur à la 4.8 puisque j'utilise QUE des commandes de bases... voir des commandes dispo dès les premières version d'Hollywood.

A tester bien sûr car il fonctionne (ou plutôt le rendu fonctionne) sur la version 4.8 PC

Le prochain topic sera... COMMENT OPTIMISER SE CODE POUR PASSER DE 80 FPS A 200 FPS (sur ma config PC bien sûr... car pas tester sur AmigaNG :-p )

Voici le code :




;?Moteur?de?Raycasting?Simplifié
;?Créer?par?Artblink?en?2010,?modifié?en?2013
;?Se?moteur?n'est?pas?optimisé?mais?simplifié?pour?la?lecture
;?Moteur?à?90?FPS?=>?peut?être?poussé?à?200?FPS,?mais?difficilement?lisible?
;?(testé?Sur?PC?Quad?Q9550?@?2.83Ghz/4?Go/NVIDIA?GeForce?GTX?570?avec?Hollywood?4.8)
;?Il?sert?de?tuto?pour?être?adapté?sur?d'autres?langage?de?programmation
;?Normalement,?il?doit?être?très?simple?de?l'adapter?en?Amos
;
@SCREEN?{Mode?=?"ask",?Width?=?640,?Height?=?480}
;?Définition?de?la?taille?de?la?carte,?un?tableau?de?24?colonnes/24?lignes
NombreDeLigne=24
NombreDeColonne=24
;?0?rien,?>0?un?mur,?le?numéro?étant?la?couleur?de?se?mur
CarteDuJeux?=?{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,2,2,2,2,2,0,0,0,0,3,0,3,0,3,0,0,0,1},
{1,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,2,0,0,0,2,0,0,0,0,3,0,0,0,3,0,0,0,1},
{1,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,2,2,0,2,2,0,0,0,0,3,0,3,0,3,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,0,0,0,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
}
;?Position?du?départ?dans?le?tableau
PositionEnXSurCarte?=?22?;?Ligne?N?21
PositionEnYSurCarte?=?12?;?Colonne?N?11

;?Définition?des?variables?Globales
DirectionEnX?=?1
DirectionEnY?=?0.1
planex?=?0
planey?=?0.66
VitesseDeDeplacement=?0.25
VitesseDeLaRotation?=?0.05
TailleEcranEnX=639
TailleEcranEnY=479
;?Fonction?Principale
Function?prg()
StartTimer(1)?;?Départ?du?chronomètre?pour?calculer?le?nombre?d'image?par?seconde????
For?Local?CoordonnesEnX?=?1?To?TailleEcranEnX
;?Variables?Local?pour?gagner?en?rapidité
Local?CameraEnX?=?2*CoordonnesEnX/TailleEcranEnX-1
Local?PositionEnXduLancerdeRayon?=?PositionEnXSurCarte?
Local?PositionEnYduLancerdeRayon?=?PositionEnYSurCarte?
Local?DirectionEnXduLancerDeRayon?=?DirectionEnX?+?planex*CameraEnX
Local?DirectionEnYduLancerDeRayon?=?DirectionEnY?+?planey*CameraEnX
Local?CarteEnX?=?Int(PositionEnXduLancerdeRayon)
Local?CarteEnY?=?Int(PositionEnYduLancerdeRayon)
Local?DistanceLateraleEnX?=?0
Local?DistanceLateraleEnY?=?0
Local?deltadistx?=?Sqrt(1+(DirectionEnYduLancerDeRayon*DirectionEnYduLancerDeRayon)/(DirectionEnXduLancerDeRayon*DirectionEnXduLancerDeRayon))
Local?deltadisty?=?Sqrt(1+(DirectionEnXduLancerDeRayon*DirectionEnXduLancerDeRayon)/(DirectionEnYduLancerDeRayon*DirectionEnYduLancerDeRayon))
Local?Perspective?=?0
Local?stepx?=?0
Local?stepy?=?0
Local?MurTouche?=?0
Local?CoteDuMur?=?0
;?Début?des?tests?du?raycasting?(lancé?de?rayon)
If?DirectionEnXduLancerDeRayon?stepx?=?-1
DistanceLateraleEnX?=?(PositionEnXduLancerdeRayon?-?CarteEnX)*deltadistx
Else
stepx?=?1
DistanceLateraleEnX?=?(CarteEnX?+?1?-?PositionEnXduLancerdeRayon)*deltadistx?
EndIf
If?DirectionEnYduLancerDeRayon?stepy?=?-1
DistanceLateraleEnY?=?(PositionEnYduLancerdeRayon?-?CarteEnY)*deltadisty
Else?
stepy?=?1
DistanceLateraleEnY?=?(CarteEnY?+?1?-?PositionEnYduLancerdeRayon)*deltadisty?
EndIf
;?On?test?si?lorsque?l'on?bouge,?on?touche?un?mur?de?la?carte
While?MurTouche?=?0??;?Tant?qu'il?n'y?a?pas?de?mur
;????
If?DistanceLateraleEnX?DistanceLateraleEnX?=?DistanceLateraleEnX?+?deltadistx
CarteEnX?=?CarteEnX?+?stepx
CoteDuMur?=?0
Else
DistanceLateraleEnY?=?DistanceLateraleEnY?+?deltadisty
CarteEnY?=?CarteEnY?+?stepy
CoteDuMur?=?1
EndIf
;
If?CarteDuJeux[CarteEnX][CarteEnY]?>?0?Then?MurTouche?=?1?
;
Wend?;?fin?du?test?de?tant?qu'il?y?a?pas?de?mur
;?Il?est?plus?rapide?de?multiplier?par?0.5?que?de?diviser?par?2
If?CoteDuMur?=?0?
Perspective?=?Abs((CarteEnX?-?PositionEnXduLancerdeRayon?+?(1-stepx)*0.5)/DirectionEnXduLancerDeRayon)????????
Else?????????
Perspective?=?Abs((CarteEnY?-?PositionEnYduLancerdeRayon?+?(1-stepy)*0.5)/DirectionEnYduLancerDeRayon)
EndIf
;
If?Perspective=0?Then?Perspective=1????
HauteurLigne?=?Int(TailleEcranEnY/Perspective)????
DepartLigne?=?(-HauteurLigne*0.5?+?TailleEcranEnY*0.5)
;
If?DepartLigne?<0?Then?DepartLigne=0
;
FinLigne?=?(HauteurLigne*0.5?+?TailleEcranEnY*0.5)
;
If?FinLigne?>=?TailleEcranEnX?Then?FinLigne?=?TailleEcranEnX?
;?En?fonction?de?la?valeur?du?mur?dans?la?carte,?on?change?la?couleur?du?mur
Switch(CarteDuJeux[CarteEnX][CarteEnY])
;??????
Case?1:??Couleur?=?$AA2222?;?Rouge
Case?2:??Couleur?=?$22AA22?;?Vert
Case?3:??Couleur?=?$2222AA?;?Bleu
Case?4:??Couleur?=?$AAAAAA?;?Blanc
Default:?Couleur?=?$AAAA22?;?Jaune
;??????
EndSwitch
;?Variable?global?pour?les?couleurs?sauf?celles?des?murs????
Local?CouleurSol?=?$444444
Local?CouleurPlafond?=?$888888
Local?CouleurBandes?=?$666666
;
If?CoteDuMur?=?1?
Couleur=Couleur*0.5
CouleurBandes?=?CouleurBandes?*0.5
EndIf
;?Encore?du?local?pour?la?rapiditée
Local?BandeHaut?=?TailleEcranEnY/2+FinLigne?
Local?BandeBas?=?TailleEcranEnY/2+DepartLigne?
;?On?trace?les?lignes?pour?créer?la?perspective
Line?(CoordonnesEnX,DepartLigne,CoordonnesEnX,FinLigne,Couleur);?Mur
Line?(CoordonnesEnX,FinLigne,CoordonnesEnX,FinLigne+240,CouleurSol)?;?Sol
Line?(CoordonnesEnX,0,CoordonnesEnX,DepartLigne,CouleurPlafond)?;?Plafond
Line?(CoordonnesEnX,BandeHaut*0.5,CoordonnesEnX,BandeHaut*0.5,CouleurBandes)?;?Trait?haut?des?murs
Line?(CoordonnesEnX,TailleEcranEnY*0.5,CoordonnesEnX,TailleEcranEnY*0.5,CouleurBandes);?Trait?du?milieu?des?murs
Line?(CoordonnesEnX,BandeBas*0.5,CoordonnesEnX,BandeBas*0.5,CouleurBandes)?;?Trait?bas?des?murs
;?Fin?de?la?boucles
Next
;?Test?si?on?appuie?sur?la?touche?flèche?"Haut"????
If?IsKeyDown("Up")=True
;????
If?CarteDuJeux[Int(PositionEnXSurCarte?+?DirectionEnX?*?VitesseDeDeplacement)][Int(PositionEnYSurCarte)]?=?0?Then?PositionEnXSurCarte?=?PositionEnXSurCarte?+?DirectionEnX?*?VitesseDeDeplacement
If?CarteDuJeux[Int(PositionEnXSurCarte)][Int(PositionEnYSurCarte?+?DirectionEnY?*?VitesseDeDeplacement)]?=?0?Then?PositionEnYSurCarte?=?PositionEnYSurCarte?+?DirectionEnY?*?VitesseDeDeplacement
;
EndIf
;?Test?si?on?appuie?sur?la?touche?flèche?"Bas"????
If?IsKeyDown("Down")=True?
If?CarteDuJeux[Int(PositionEnXSurCarte?+?DirectionEnX?*?VitesseDeDeplacement)][Int(PositionEnYSurCarte)]?=?0?Then?PositionEnXSurCarte?=?PositionEnXSurCarte?-?DirectionEnX?*?VitesseDeDeplacement
If?CarteDuJeux[Int(PositionEnXSurCarte)][Int(PositionEnYSurCarte?+?DirectionEnY?*?VitesseDeDeplacement)]?=?0?Then?PositionEnYSurCarte?=?PositionEnYSurCarte?-?DirectionEnY?*?VitesseDeDeplacement
EndIf
;?Test?si?on?appuie?sur?la?touche?flèche?"Gauche"????
If?IsKeyDown("Left")=True?
;
AncienneDirectionEnX=DirectionEnX
DirectionEnx?=?DirectionEnX?*?Cos(-VitesseDeLaRotation)?-?DirectionEnY?*?Sin(-VitesseDeLaRotation);
DirectionEnY?=?AncienneDirectionEnX?*?Sin(-VitesseDeLaRotation)?+?DirectionEnY?*?Cos(-VitesseDeLaRotation);
oldPlaneX?=?planex;
planex?=?planex?*?Cos(-VitesseDeLaRotation)?-?planey?*?Sin(-VitesseDeLaRotation);
planey?=?oldPlaneX?*?Sin(-VitesseDeLaRotation)?+?planey?*?Cos(-VitesseDeLaRotation);
EndIf
;?Test?si?on?appuie?sur?la?touche?flèche?"Droite"????
If?IsKeyDown("Right")=True?
;
AncienneDirectionEnX?=?DirectionEnX?;
DirectionEnx?=?DirectionEnX?*?Cos(VitesseDeLaRotation)?-?DirectionEnY?*?Sin(VitesseDeLaRotation);
DirectionEnY?=?AncienneDirectionEnX?*?Sin(VitesseDeLaRotation)?+?DirectionEnY?*?Cos(VitesseDeLaRotation);
oldPlaneX?=?planex;
planex?=?planex?*?Cos(VitesseDeLaRotation)?-?planey?*?Sin(VitesseDeLaRotation);
planey?=?oldPlaneX?*?Sin(VitesseDeLaRotation)?+?planey?*?Cos(VitesseDeLaRotation);
EndIf
;?Calcule?simple?du?FPS
Local?Temps=GetTimer(1)
Local?FPS=Int((1/Temps)*1000)
;?Affichage?du?FPS
TextOut(0,0,FPS)
;?Flip?d'écran?(technique?du?double?buffer)
Flip
;?Effacer?l'écran?est?inutile,?puisque?l'on?retrace?par?dessus?l'ancienne?image
;?donc?la?commande?Cls?ne?sert?à?rien,?encore?du?temps?de?gagner
;
;?Fin?de?la?fonction?principale
EndFunction
;?Lancement?du?moteur?Double?Buffer,?toujours?en?dehors?de?fonction
BeginDoubleBuffer
;?Configuration?de?l'intervalle?Maximale?de?temps?entre?l'affichage?de?chaque?image,?ici?50?FPS
SetInterval(1,PRG,20)
;?Boucle?infinie?pour?que?le?programme?ne?se?termine?jamais
Repeat????
WaitEvent()?;?Attendre?une?action,?ici,?se?sera?les?touches?fléchées?du?clavier
Forever



Message édité par : artblink / 13-01-2013 02:56
zzd10h zzd10hicon_post
Salut Artblink,
Et tu pourrais nous faire un petit exe pour os4 ?
Par curiosité, ça m'intérresserait de voir ce que donne Hollywood.
artblink artblinkicon_post
Je peux, mais se moteur là va ramer...
AmiDARK AmiDARKicon_post
C'est pas grave c'est pour voir ce que cela donnerai en rendu visuel :p
artblink artblinkicon_post
Ok mais vous foutez pas de ma tronche lol
:-D :-D :-D :-D :-D

Le voila:

http://jeannoel.roueste.free.fr/Amiga/Hollywood/Raycast48NO

Attention:

Ce programme n'a pas était du tout optimiser et il a était compilé sur Hollywood 4.8 qui est moins optimiser qu'Hollywood 5.0

Sur mon PC, j'ai Hollywood 4.8 et sur mon ng c'est Hollywood 5.0

Ce Prg, a mon avis, j'en suis même sûr, sera largement plus rapide une fois optimiser sous Hollywood 5.0

Voila, touche flécher pour bouger

Haut=Avancer
Bas=Reculer
Droite=Rotation à droite
Gauche=Rotation à Gauche

Ctrl-C pour quitter

Si quelqu'un sait comment faire un vrai compteur de FPS, se serais cool de me l'expliquer car mes FPS n'arrête pas de bouger
Message édité par : artblink / 13-01-2013 14:04
Message édité par : Elwood / 13-01-2013 17:19
zzd10h zzd10hicon_post
Merci...
mais ça marche pas chez moi.
Dés que je le lance -> BOUM

Crash log for task ""
Generated by GrimReaper 53.2
Crash occured in module elf.library.kmod at address 0x0214281C
Type of crash: DSI (Data Storage Interrupt) exception

...
...
...

Background CLI [] (Crashed)
Stack: 0x57e81004 - 0x58680ffc, pointer @ 0x57e81060 (Cookie Damaged)
Signals: SigRec 0x00000000, SigWait 0x00000100
State: Process (Crashed)

et je suis obligé de rebooter
Testé sur RadeonHD et Radeon9250.
artblink artblinkicon_post
Bizarre!!!!

Ré-essaye pour voir sur ce lien

http://jeannoel.roueste.free.fr/Amiga/Hollywood/Raycast48NO.exe

Message édité par : Elwood / 13-01-2013 17:19
Message édité par : Creols / 13-01-2013 17:26
zzd10h zzd10hicon_post

Ouais, tu as raison, Crisot a du souci à se faire ;-)

Ca marche, c'est pas trop trop fluide mais ça roule !

Ca m'a toujours impressioné d'être capable de faire des choses comme ça, bravo !

http://zzd10h.amiga-ng.org/Divers/Artblink_Hollywood3D.jpg
artblink artblinkicon_post
Merci

Ptdr...

10 FPS sur X1000... mon moteur est vraiement pourri lol :-D :-D :-D :-D :-D
Brumiga Brumigaicon_post
J'ai lançé ton programme sur mon pegasos 2 g4, en mode plein écran (1920 x 1200). J'ai obtienu entre 1 et 3 fps.

Brumiga
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme