Page 1 sur 3
Luminosité Sprite 3D
Publié : mar. 28/juil./2009 17:59
par Thyphoon
j'ai fais quelques recherches mais je n'ai rien trouvé, en tout cas pour les sprites 3D.
Quelqu'un aurait-il une astuce (pas gourmande en cpu) pour jouer sur la luminosité des sprites3D ? Est ce que l'Alphablending permettrait ça ? c'est le genre de fonction que doit savoir faire le GPU non ?
Publié : mar. 28/juil./2009 18:36
par Anonyme
Sous Windows avec la 4.0 j'utilisais ca :
Le sprite 3D est composé de deux triangles
dans le sens des aiguilles d'une montre en partant du haut gauche l'ordre est ainsi : 0,1,3,2 il me semble.
Code : Tout sélectionner
Structure vertex
sx.f
sy.f
sz.f
rhw.f
Color.l
specular.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
Texture.l
Vertice.vertex[4]
Width.w
Height.w
EndStructure
Start3D()
*S.PB_Sprite3D = IsSprite3D(0)
*S\Vertice[0].Color = RGBA
*S\Vertice[1].Color = RGBA
*S\Vertice[3].Color = RGBA
*S\Vertice[2].Color = RGBA
Stop3D()
Publié : mar. 28/juil./2009 18:39
par Thyphoon
Cpl.Bator a écrit :Sous Windows avec la 4.0 j'utilisais ca :
Le sprite 3D est composé de deux triangles
dans le sens des aiguilles d'une montre en partant du haut gauche l'ordre est ainsi : 0,1,3,2 il me semble.
Intéressant ..je vais essayer de voir comment ça marche et si c'est utilisable dans mon jeu sans perdre trop de perf ...
EDIT: Merci beaucoup

Publié : mar. 28/juil./2009 18:45
par Anonyme
du devrais pas avoir de perte significative.
Code : Tout sélectionner
procedure SetLuminosity3D(spriteid,lum.c)
; 255 = Pleine luminosité 0 = noir
RGB_LUM = rgb(Lum,Lum,Lum)
Start3D()
*S.PB_Sprite3D = IsSprite3D(spriteid)
*S\Vertice[0].Color = RGB_LUM
*S\Vertice[1].Color = RGB_LUM
*S\Vertice[3].Color = RGB_LUM
*S\Vertice[2].Color = RGB_LUM
Stop3D()
endprocedure
Par contre , je ne me rapelle plus si le sprite conserve la couleur des vertices ou si il faut appeler la fct° a chaque fois , si il faut l'appeler a chaque fois , utilise plutôt une macro !
@+
Publié : mar. 28/juil./2009 19:30
par Thyphoon
Je vais faire des tests !!

Publié : mar. 28/juil./2009 20:06
par Thyphoon
currieux lorsque je j'utilise cette fonction dans un Start3D et bien quelques soit la valeur de la luminosité , les sprites deviennent invisible une idée ?
Code : Tout sélectionner
Procedure SetLuminosity3D(spriteid.l,lum.c)
Protected RGB_LUM.l,*S.PB_Sprite3D
;doit être dans un Start3D
; 255 = Pleine luminosité 0 = noir
RGB_LUM = RGB(Lum,Lum,Lum)
*S=IsSprite3D(spriteid)
*S\Vertice[0]\Color = RGB_LUM
*S\Vertice[1]\Color = RGB_LUM
*S\Vertice[3]\Color = RGB_LUM
*S\Vertice[2]\Color = RGB_LUM
EndProcedure
Edit: En faisant un teste changeant qu'une seul vertice , apparemment ça rend bien transparent !!!

Publié : mar. 28/juil./2009 20:48
par Anonyme
Logique , j'ai oublié de te le préciser , c'est du RGBA ou ABGR / ARGB , je ne sais plus...
RGB(255,255,255) = $
00FFFFFF
RGBA(255,255,255,255) = $
FFFFFFFF
edit: Correction des fautes d'orthographes et de grammaires.
Publié : mar. 28/juil./2009 20:55
par Thyphoon
Cpl.Bator tu es un Dieu !!! ça marche nickel sans ralentissement !
Je vais pouvoir faire varier la luminosité de la map en fonction du jour ou de la nuit !!

Publié : mar. 28/juil./2009 21:09
par Anonyme
Thyphoon a écrit :Cpl.Bator tu es un Dieu !!! ça marche nickel sans ralentissement !
Je vais pouvoir faire varier la luminosité de la map en fonction du jour ou de la nuit !!

Dieu me qualifie déjà ainsi
===>[]
Publié : mar. 28/juil./2009 21:12
par Thyphoon
Cpl.Bator a écrit :Thyphoon a écrit :Cpl.Bator tu es un Dieu !!! ça marche nickel sans ralentissement !
Je vais pouvoir faire varier la luminosité de la map en fonction du jour ou de la nuit !!

Dieu me qualifie déjà ainsi
===>[]
Lollll !
Tient une question la structure des sprites est propre a purebasic ou a l'OS ? est ce que ça marche sur linux et macos ?
Publié : mar. 28/juil./2009 21:20
par Anonyme
Pas portable sous linux. :/
Publié : mar. 28/juil./2009 21:30
par Thyphoon
Cpl.Bator a écrit :Pas portable sous linux. :/
Dommage ! Mais peut être existe t'il une alternative !
Je vais prévoir tout de suite la possibilité de désactiver la fonction dans mon code, ça permettra un portable plus facile
Publié : mar. 28/juil./2009 21:39
par Anonyme
la SDL sans aucun doute , ou directement en opengl.
un conseil , si tu veut faire un code portable , refais les fonctions, je m'explique,
n'utilise pas directement DisplaySprite() ou DisplaySprite3D()
mais
Code : Tout sélectionner
macro DisplaySpriteEX(id,x,y)
select OS
case Windows
DisplaySprite(id,x,y)
case Linux
AutreFonctionParExemple(id,x,y)
case Mac
FunctionDuneLib(id,x,y)
endselect
endmacro
Ensuite tu remplaces tout tes DisplaySprite par DisplaySpriteEX
Chaque OS peut avoir sa propre fonction d'affichage !
c'est surtout utile pour les sprite 3D dans ton cas.
tu fait la même chose pour toute les fonctions qui concerne les sprites 3D
tu laisse en blanc les select/case pour linux , j'essayerais de t'écrire des routines d'affichage pur-opengl.
@+
Publié : mer. 29/juil./2009 4:42
par Thyphoon
Cpl.Bator a écrit :la SDL sans aucun doute , ou directement en opengl.
un conseil , si tu veut faire un code portable , refais les fonctions, je m'explique,
n'utilise pas directement DisplaySprite() ou DisplaySprite3D()
mais
Code : Tout sélectionner
macro DisplaySpriteEX(id,x,y)
select OS
case Windows
DisplaySprite(id,x,y)
case Linux
AutreFonctionParExemple(id,x,y)
case Mac
FunctionDuneLib(id,x,y)
endselect
endmacro
Ensuite tu remplaces tout tes DisplaySprite par DisplaySpriteEX
Chaque OS peut avoir sa propre fonction d'affichage !
c'est surtout utile pour les sprite 3D dans ton cas.
tu fait la même chose pour toute les fonctions qui concerne les sprites 3D
tu laisse en blanc les select/case pour linux , j'essayerais de t'écrire des routines d'affichage pur-opengl.
@+
Merci beaucoup c'est super sympa !je vais suivre tes conseilles

Publié : mer. 29/juil./2009 7:19
par Anonyme
je viens de faire d'autre tests sous linux , en fait , Purebasic sous linux laisse à désiré...
si tu veut une appli portable , fait la même chose aussi pour la gestions des événements ( écran , clavier ) , je pourrais te faire une collection de fonctions qui utilise la SDL & OpenGL , SDL pour le fenetrage , OpenGL pour l'affichage.