Particules et environnement 2D
Particules et environnement 2D
Voila : J’aimerai mélanger les torchons et les serviettes : sur un jeu 2D utiliser des effets 3D comme les particules.
Or l’ensemble est fait pour fonctionner à l’envers : dans un jeu 3D on peut faire de la 2D.
Il faut en effet appeler RenderWorld() avant tout autre affichage.
Aussi comment fait t’on pour mettre en fond de scène 3D mon affichage 2D iso sans passer par les textures (car limité à 256x256) ?
Or l’ensemble est fait pour fonctionner à l’envers : dans un jeu 3D on peut faire de la 2D.
Il faut en effet appeler RenderWorld() avant tout autre affichage.
Aussi comment fait t’on pour mettre en fond de scène 3D mon affichage 2D iso sans passer par les textures (car limité à 256x256) ?
J'ai une théorie sur comment faire.
Si tu veux avoir un fond en 3D dans un jeu 2D :
1. Il faut faire la modélisation du fond de ton jeu en 3D. Tout les objets, les murs, les accessoires, etc.
2. Au lancement du jeu, la scène 3D doit être chargé, c'est à dire tout les objets, les murs, les accessoires, etc doivent être chargé et localiser sur la scène.
3. Localiser la caméra disons dans le premier octant genre au point (50,50,50) et dire à la caméra LookAt à l'origine du monde 3D, le point (0,0,0) Pendant le jeu la caméra ne doit pas bouger. On peut ajouter des lumières, bien sûr.
4. Dessiner sur l'écran les autres éléments 2D du jeu.
Une autre chose, il est dit dans l'aide que les textures doivent être carrées. Ce n'est pas totalement vrai, elles peuvent être rectangulaires.
16X16
32X32
64X64
128X128
256X256
...X...
Et n'importe quelle combinaison suivante :
16X32
16X64
16X128
16X256
16X...
32X64
32X128
...
Lucas Arts et Totally Games dans le jeu X-Wing Alliance par exemple, lorsque l'on défait le fichier d'un model 3D, on récupère la géométrie et les textures. Et elles ne sont pas toutes carrées.
!! ATTENTION !! CE N'EST PAS TOUT FAIT LÉGAL DE FAIRE DE DÉCOMPILER L'ARCHIVE D'UN MODEL 3D D'UN JEU COMMERCIAL.
Mais c'est comme ça que j'ai découvert que les textures rectangulaires étaient possibles. Dans certain cas, ça permet d'économiser de l'espace mémoire sur la carte.
J'espère que ça peut t'aider.
A+
Guimauve
Si tu veux avoir un fond en 3D dans un jeu 2D :
1. Il faut faire la modélisation du fond de ton jeu en 3D. Tout les objets, les murs, les accessoires, etc.
2. Au lancement du jeu, la scène 3D doit être chargé, c'est à dire tout les objets, les murs, les accessoires, etc doivent être chargé et localiser sur la scène.
3. Localiser la caméra disons dans le premier octant genre au point (50,50,50) et dire à la caméra LookAt à l'origine du monde 3D, le point (0,0,0) Pendant le jeu la caméra ne doit pas bouger. On peut ajouter des lumières, bien sûr.
4. Dessiner sur l'écran les autres éléments 2D du jeu.
Je ne comprends pas là. Moi j'ai déja chargé des textures 1024X1024 et ça marché. Bien sûr, ça dépend de la mémoire disponible sur la carte vidéo.sans passer par les textures (car limité à 256x256)
Une autre chose, il est dit dans l'aide que les textures doivent être carrées. Ce n'est pas totalement vrai, elles peuvent être rectangulaires.
16X16
32X32
64X64
128X128
256X256
...X...
Et n'importe quelle combinaison suivante :
16X32
16X64
16X128
16X256
16X...
32X64
32X128
...
Lucas Arts et Totally Games dans le jeu X-Wing Alliance par exemple, lorsque l'on défait le fichier d'un model 3D, on récupère la géométrie et les textures. Et elles ne sont pas toutes carrées.
!! ATTENTION !! CE N'EST PAS TOUT FAIT LÉGAL DE FAIRE DE DÉCOMPILER L'ARCHIVE D'UN MODEL 3D D'UN JEU COMMERCIAL.
Mais c'est comme ça que j'ai découvert que les textures rectangulaires étaient possibles. Dans certain cas, ça permet d'économiser de l'espace mémoire sur la carte.
J'espère que ça peut t'aider.
A+
Guimauve
j'avais fait un essai en récupérant une animation 3D dans un sprite
un truc du genre
Tu peux réduire la taille de la camera à la taille de ton sprite en jouant sur CreateCamera()
mais je ne suis pas sûr que ça rende bien avec des particules ,tu peux toujours essayer.
un truc du genre
Code : Tout sélectionner
Affiche la 3D ici
RenderWorld()
GrabSprite(0,x,y,w,h)
Et ensuite affiche la 2D
puis l'animation 3D dans le sprite
DisplayTransparentSprite(0,x,y)
FlipBuffer()
mais je ne suis pas sûr que ça rende bien avec des particules ,tu peux toujours essayer.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Voilas un code avec Arriere plan en 2D, un couche 3D par dessus puis premier plan 2D (un beau melange)
Code : Tout sélectionner
InitEngine3D()
InitSprite()
OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "2D / 3D")
OpenWindowedScreen(WindowID(), 0, 0, 640, 480, 0, 0, 0)
CreateSprite(0, 1280, 480)
StartDrawing(SpriteOutput(0))
For t = 0 To 2000
c = Random(245) + 10
Circle(Random(1279), Random(479), Random(6) + 1, RGB(c, c, c))
Next
StopDrawing()
CreateSprite(1, 1280, 480)
StartDrawing(SpriteOutput(1))
For t = 0 To 100
Circle(Random(1279), Random(479), Random(16) + 8, Random(#White))
Next
StopDrawing()
CreateTexture(0, 32, 32)
StartDrawing(TextureOutput(0))
For t = 1 To 16
c = t * 16
Circle(16, 16, 16 - t, RGB(c, c, c))
Next
StopDrawing()
CreateMaterial(0, TextureID(0))
DisableMaterialLighting(0, 1)
MaterialBlendingMode (0, 1)
For x = -100 To 100 Step 20
CreateParticleEmitter(n, 10, 1, 1, 0)
ParticleMaterial (n, MaterialID(0))
ParticleTimeToLive (n, 2, 2)
ParticleEmissionRate(n, 20)
ParticleSize (n, 30, 30)
ParticleColorRange (n, Random(#White), Random(#White))
ParticleEmitterLocate(n, x, 0, 0)
n + 1
Next
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 0, 200, 200)
CameraLookAt(0, 0, 0, 0)
CameraBackColor(0, -1)
Repeat
Repeat
wEvent = WindowEvent()
Select wEvent
Case #WM_CLOSE
Quit = #True
EndSelect
Until wEvent = #False
;- Arriere plan
ClearScreen(0,0,64)
x0 + 8
If x0 > 1280
x0 = 0
EndIf
ClipSprite(0, x0, 0, 640, 480)
DisplayTransparentSprite(0, 0, 0)
ClipSprite(0, 0, 0, x0 - 640, 480)
DisplayTransparentSprite(0, 1280 - x0, 0)
;- 3D
a.f + 0.02
z.f = 300 * Cos(a)
y.f = 300 * Sin(a)
CameraLocate(0, y, y, z)
CameraLookAt(0, 0, 0, 0)
RenderWorld()
;- Premier plan
x1 + 3
If x1 > 1280
x1 = 0
EndIf
ClipSprite(1, x1, 0, 640, 480)
DisplayTransparentSprite(1, 0, 0)
ClipSprite(1, 0, 0, x1 - 640, 480)
DisplayTransparentSprite(1, 1280 - x1, 0)
FlipBuffers()
Until Quit = #True
sympa la démo
je devrais relire la doc plus souvent, ça m'avait échappé ce truc


je devrais relire la doc plus souvent, ça m'avait échappé ce truc

merci pour l'infoCameraBackColor(#Camera, Couleur)
Description
Change la couleur de fond de la #Camera. Quand une nouvelle camera est créé, son fond est transparent pour permettre de mixer facilement un fond 2D avec une scene 3D. RGB() peut être utilisée pour obtenir une couleur valide. Si la couleur specifié est '-1', alors le fond est considéré comme transparent.

http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
On s’est mal compris…
Actuellement mon « jeu » est en 2Diso avec un décor fait de tiles.
Si je veux utiliser le moteur de particules, je suis obligé d’utiliser le moteur 3D et donc d’afficher une scène.
Afin que les particules s’affichent devant mon décor 2D, il faut intégrer le décor 2D dans la scène sur un plan situé derrière les particules.
Pour cela il faut un support compatible avec le moteur 3D pour dessiner mon decor 2D en arrière plan.
Typiquement il pourrait s’agir du terrain
J’y dessine dedans mon decor avec les tiles, la camera regardant la terrain selon la normale.
Cependant, pour cela il faut passer par les textures.
Or moi, j’ai des tiles de 32x32 et mon decor 2D est une composition variable de ces tiles
La Skybox apparaît très intéressante aussi: les faces du cubes sont à l’infini. Mais là encore on passe par les textures pour avoir un rendu.
Pour moi texture = une seul image.
Faut-il donc qu’à chaque boucle, je dessine mes tiles 2D sur une texture et non sur l’écran ?
Ainsi mes tiles ne devront plus etre des sprites mes des images !?
Quel est donc ma meilleure technique pour pouvoir afficher un décor 2D fait de tiles dans une scène 3D ?
@Polux : dans LJ, la traînée du réacteur du vaisseau sont certainement créées par des particules. Comment affiches tu alors l’arrière plan du jeu ?
Actuellement mon « jeu » est en 2Diso avec un décor fait de tiles.
Si je veux utiliser le moteur de particules, je suis obligé d’utiliser le moteur 3D et donc d’afficher une scène.
Afin que les particules s’affichent devant mon décor 2D, il faut intégrer le décor 2D dans la scène sur un plan situé derrière les particules.
Pour cela il faut un support compatible avec le moteur 3D pour dessiner mon decor 2D en arrière plan.
Typiquement il pourrait s’agir du terrain
J’y dessine dedans mon decor avec les tiles, la camera regardant la terrain selon la normale.
Cependant, pour cela il faut passer par les textures.
Or moi, j’ai des tiles de 32x32 et mon decor 2D est une composition variable de ces tiles
La Skybox apparaît très intéressante aussi: les faces du cubes sont à l’infini. Mais là encore on passe par les textures pour avoir un rendu.
Pour moi texture = une seul image.
Faut-il donc qu’à chaque boucle, je dessine mes tiles 2D sur une texture et non sur l’écran ?
Ainsi mes tiles ne devront plus etre des sprites mes des images !?
Quel est donc ma meilleure technique pour pouvoir afficher un décor 2D fait de tiles dans une scène 3D ?
@Polux : dans LJ, la traînée du réacteur du vaisseau sont certainement créées par des particules. Comment affiches tu alors l’arrière plan du jeu ?
petite question
est-ce que le code de Cederavic tourne chez vous avec la beta 1.03 ?
est-ce que le code de Cederavic tourne chez vous avec la beta 1.03 ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
merci , j'avais un doute 

http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.