Page 4 sur 5

Publié : sam. 13/mai/2006 11:30
par Dr. Dri
finalement j'ai pu aller plus vite que prévu. Le code de lancer de rayon était sur le forum DB alors je l'ai vite retrouvé, j'ai fait une démo d'éclairage (vite fait) qui reprend les mêmes sprite que vu.zip (et j'ai refait la même map)

le champ de vision peut être déformé selon les obstacles (normal) mais c'est pas encore pris en compte par l'éclairage. Sinon ca ne rame pas d'un poil ^^

vu2.zip

Dri :D

Publié : sam. 13/mai/2006 11:31
par djes
?
Si ton code fonctionne, tu as de la chance! En plus tu dépasses les limites de ton sprites (boucle de 0 à 640 par exemple, ça fait 641! Fais gaffe!)

Un des trucs qu'on fait souvent pour optimiser est de déplier ses boucles ou de les unifier. Je m'explique. Le buffer de l'écran est linéaire en fait. Quand tu remplis l'écran entier, pourquoi faire des calculs pour arriver à se positionner sur un pixel, alors qu'en fait le pixel suivant est 4 octets plus loin? (en 32 bits RGB) Une addition est bien plus rapide que plusieurs multiplications! Et une seule boucle finit par suffir.

Le but est d'arriver à un code de ce genre:

Code : Tout sélectionner

Structure Pixel
  Pixel.l
EndStructure

If InitSprite() = 0 Or InitKeyboard()=0
  MessageRequester("Error","DirectX 7+ is needed.",0)
	End
EndIf

If OpenScreen(640,480,32,"Boom")

	Repeat
		If StartDrawing(ScreenOutput())
		
			*ScreenBufferEnd.Pixel=DrawingBuffer()+480*DrawingBufferPitch()
	
			t=ElapsedMilliseconds()
	
			For z=0 To 5
				*ScreenBuffer.Pixel=DrawingBuffer()
				Repeat
					*ScreenBuffer\Pixel=*ScreenBuffer
					*ScreenBuffer+4
				Until *ScreenBuffer>=*ScreenBufferEnd
			Next z
	
			temps=ElapsedMilliseconds()-t 
			DrawText(100,100,Str(temps))

			StopDrawing()

			ExamineKeyboard()
			FlipBuffers()
		
		EndIf
	Until KeyboardPushed(#PB_Key_Escape)
		
	CloseScreen()
	MessageRequester("Timing","Temps:"+Str(temps),#PB_MessageRequester_Ok)

EndIf

End
Tu me diras que tu perds tes variables X et Y! En as-tu *vraiment* besoin? Ne peux-tu pas là aussi déplier tes boucles?

Si tu dois les garder, évite simplement de faire des calculs là où ce n'est pas nécessaire (fais une addition de 4 au lieu d'une addition de 1 puis après un multiplication*4!)

J'espère que ces petits trucs te serviront. Je vais regarder pour le tracé d'un polygone sur le forum anglais, je sais qu'il y a des astuces.

Publié : sam. 13/mai/2006 11:32
par djes
Pour le code je ne parlais pas de celui de Dri ;)

Publié : sam. 13/mai/2006 12:58
par Thyphoon
Dr. Dri a écrit :finalement j'ai pu aller plus vite que prévu. Le code de lancer de rayon était sur le forum DB alors je l'ai vite retrouvé, j'ai fait une démo d'éclairage (vite fait) qui reprend les mêmes sprite que vu.zip (et j'ai refait la même map)

le champ de vision peut être déformé selon les obstacles (normal) mais c'est pas encore pris en compte par l'éclairage. Sinon ca ne rame pas d'un poil ^^

vu2.zip

Dri :D
C'est vraiment exelent ton truc..ta pas les sources :P
tu crois qu'il y a moyen de faire en sorte pour qu'il n'y ai que ec qui est vu qui apparaisse ?

Publié : sam. 13/mai/2006 13:05
par Thyphoon
djes a écrit :?
Si ton code fonctionne, tu as de la chance! En plus tu dépasses les limites de ton sprites (boucle de 0 à 640 par exemple, ça fait 641! Fais gaffe!)

Code : Tout sélectionner

Oui exacte... tu as raison
[quote="djes"]
Un des trucs qu'on fait souvent pour optimiser est de déplier ses boucles ou de les unifier.
Tu me diras que tu perds tes variables X et Y! En as-tu *vraiment* besoin? Ne peux-tu pas là aussi déplier tes boucles? 

Si tu dois les garder, évite simplement de faire des calculs là où ce n'est pas nécessaire (fais une addition de 4 au lieu d'une addition de 1 puis après un multiplication*4!)

J'espère que ces petits trucs te serviront. Je vais regarder pour le tracé d'un polygone sur le forum anglais, je sais qu'il y a des astuces.[/quote][/quote]
C'est interessant ce que tu me dis là ...
Dans le dernier code que j'ai fait le but n'était pas d'optimisé le remplissage mais de verifier que Poke était plus rapide qu'un pointeur.

Et pour mon code actuel (tracé de cone) je vois mal comment je peux faire pour me passer de x ou y car le point suivant n'est pas obligatoirement a côté. ou alors il y a une solution mais je ne la connais pas  :P

Publié : dim. 14/mai/2006 11:04
par Dr. Dri
Thyphoon a écrit :C'est vraiment exelent ton truc..ta pas les sources :P
tu crois qu'il y a moyen de faire en sorte pour qu'il n'y ai que ec qui est vu qui apparaisse ?
Trop cochon les sources pour le moment, je te commenterai ca dans la semaine ^^
Faut aussi que j'ajoute la correction de la lumière selon les obstacles...

Par contre voila comment mon éclairage fonctionne:
Affichage de la map
Affichage d'un Sprite 3D tout noir pour l'ombrage
(en jouant sur l'opacité c'est +/- éclairé)
Affichage de x Sprite3D blancs dont la couleur est calculée

Donc si l'ombrage est au maximum, l'éclairage sera nul (0 * x = 0...)
Par contre on peut jouer sur l'ombrage pour le diminuer le plus possible sans que ca empêche d'éclairer ^^

[edit]

Toujours aussi cochon les sources, mais voici une version où l'éclairage ne bug plus
c'était ultra-simple et comme je suis pas sorti hier soir j'ai eu le temps de le faire
vu3.zip

Dri

Publié : dim. 14/mai/2006 11:38
par lionel_om
Superbe démo Dri :wink:
A qd ton MGS ??? :P

Publié : dim. 14/mai/2006 12:11
par Flype
c'est excellent, merci pour cette démo, dri.

Publié : dim. 14/mai/2006 12:38
par Dr. Dri
j'ai peut être oublié de préciser qu'on peut modifier le champ de vision avec la souris (clics gauche et droite + molette)

Dri

Publié : dim. 14/mai/2006 13:00
par flaith
c'est du tout bon ca :D merci pour les sources

Publié : dim. 14/mai/2006 16:13
par Dräc
Jolie ! :)

Publié : dim. 14/mai/2006 17:42
par Frenchy Pilou
Heu...la molette ne fait rien chez moi ? :(
Les boutons oui :D

Publié : dim. 14/mai/2006 18:49
par djes
8O Tu m'as scotché Dri! J'ai eu du mal à comprendre à quoi servaient les régions mais ouahow, c'est d'la balle!
:10:

Publié : dim. 14/mai/2006 18:52
par Dr. Dri
djes a écrit :8O Tu m'as scotché Dri! J'ai eu du mal à comprendre à quoi servaient les régions mais ouahow, c'est d'la balle!
:10:
Chui désolé de pas tout avoir commenté (ni mi au propre) mais j'avais une flemme monstre

Dri :oops:

Publié : dim. 14/mai/2006 18:56
par djes
Ben ça va franchement! On voit que tu maîtrises PB, c'est du joli code :)
C'est vrai qu'un petit commentaire par ci par là pourra TE servir dans quelques années ;)