CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C-SDL] Réduction de surface.

vexover
vexover
Niveau 9
01 février 2007 à 12:54:03

Bonjour, je vodrais avoir quelques précisions sur la librairies openGL.
enfaite j´ai essayer de créer une application dans la quelle l´utilisateur, en appuyant sur avant ou arriere, pourrais agrandir ou réduire une surface progressivement, le problème est le suivant : l´utilisation de SDL_LoadBMP ne permet pas de définir la taille de la surface et il est donc impossible de réduire une fenêtre de façon automatique ( c´est à dire sans avoir prévu préalablement une miniaturisation du skin de la surface grâce à un soft exterieur comme paint, toshop et autres ), je souhaiterais efectuer cette manipulation dans l´optique de la création d´un jeux en pseudo 3D, c´est à dire donner l´impression d´une profondeur de champs en rétréssissant le sprite du personnage au fur et à mesure qu´il s´éloigne de l´écran .
Il y a t-il besoin d´utiliser une autre libraire en complément ? est-ce vraiment possible ? Serait-il plus judicieux de carrément modifier les sources de la SDL pour rajouter un axe de dimension et en faire une libraire de "pseudo-3D"

vexover
vexover
Niveau 9
01 février 2007 à 12:56:28

Edit : "Bonjour, je voudrais avoir quelques précisions sur la librairie openGL. " J´ai fait un lapsus, je voulais dire "la librairie SDL " et non openGL, mes plus plâtes excuses ^^.

godrik
godrik
Niveau 30
01 février 2007 à 13:26:52

et bien, il suffit d´afficher l´image sur une surface plus petite.

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

Tu peux specifie le rectangle sur lequel tu affiches ton image dans le dernier parametre.

Fvirtman
Fvirtman
Niveau 10
01 février 2007 à 14:26:15

Sous SDL, tu ne peux pas redimentionner tes images au blitting.

Godrik -> dans le rectangle de destination, seuls les parametres x et y sont utilisés, w et h sont ignorés. (dans le rectangle source en revanche, tout est utilisé)

Pour redimentionner :
- soit tu le fais a la main (tu crees une autre surface, et tu la recalcule en fonction de la premiere)
- soit tu utilises la lib SDL_gfx ou SDL_rotozoom : des extentions qui contiennent des fonctions qui font ça.
- soit tu utilises des fonctions de OpenGL (conseillé), ainsi, tu te places dans un espace 3D, dans lequel tu fais vraiment ce que tu veux (inclinaison, distortions, etc etc...) géré en hardware par ta carte graphique.

vexover
vexover
Niveau 9
01 février 2007 à 18:18:16

Godrik >> Heu je ne comprend pas, à quoi correspondent src ,srcrect , dst et dstrect ?

Fvirtman >> "- soit tu le fais a la main (tu crees une autre surface, et tu la recalcule en fonction de la premiere) "
A la main veut dire en dehors de mon apllication ?

"soit tu utilises des fonctions de OpenGL (conseillé), ainsi, tu te places dans un espace 3D, dans lequel tu fais vraiment ce que tu veux (inclinaison, distortions, etc etc...) géré en hardware par ta carte graphique."
Cela deviendrait de la 2D isométrique non ?

Fvirtman
Fvirtman
Niveau 10
01 février 2007 à 18:44:28

tu ne connais pas la fonction de blit puisque tu demandes a quoi correspond src, srcrect, dst et dstrect.
Ce sont les parametres de SDL_Blit
src = surface source
dst = surface dest
srcrect = rectangle a blitter dans la surface source
dstrect = rectangle ou blitter dans la surface dest (comme je te disais, ici, la largeur et hauteur du rectangle sont ignorés : dstrect te sert de point d´ancrage supérieur gauche)

"A la main"
--> Non, pas en dehors : quand tu lances ton programme, il passe par une fonction que tu feras, qui prépares les surfaces : tu calcules les nouvelles surfaces. Quand je dis "a la main", j´entends que tu te fais des fonctions a toi qui font le boulot :)

Cela deviendrait de la 2D isométrique non ?
--> Non, l´isométrie est autre chose.
La 2D est un cas partuculier du 3D : c´est un monde 3D dans lequel tu ne dessines que sur le plan d´équation z = 0. Donc tu peux faire de la 2D avec OpenGL en ne dessinant que dans le plan z=0, et en posant une caméra orthogonale a ce plan.
Si tu veux faire un zoom, il suffit de rapprocher ou d´éloigner la caméra, tout simplement !
Si tu veux zoomer une seule surface, il te suffit de la poser a z != 0 : donc plus loin

Tout se passerait comme si tu te mets une feuille de papier transparente devant les yeux, tu poses tes vignettes dessus. Rien ne t´empeche, avec OpenGL, de mettre les vignettes plus loin, ou plus pres (zoom), de les tourner (rotation), ou meme de les incliner...

godrik
godrik
Niveau 30
01 février 2007 à 18:51:26

il semblerait que j´aurais mieux fait de RTFM... :)

vexover
vexover
Niveau 9
01 février 2007 à 19:14:21

Bien merci beaucoup, je vais voir ce que donne rotozoom ( mais est-ce possible de zoomer et dezoomer sur une seul surface avec cette extension ), sinon je devrais me résoudre à passer à l´openGL.

Fvirtman
Fvirtman
Niveau 10
02 février 2007 à 10:32:24

"mais est-ce possible de zoomer et dezoomer sur une seul surface avec cette extension"

Rotozoom travaille sur les surfaces, ilf aut bien comprendre comment il fonctionne :

Si tu veux zoomer une surface, il te faut en créer une autre, puis la blitter.
Rotozoom te permet de créer une nouvelle surface a partir d´une ancienne, zoomée ou ayant subi des changements : c´est tout :)

Donc le concept :
tu veux zoomer une surface et l´afficher ?
Tu demandes a rotozoom de t´en créer une autre, puis tu la blit.

De ce fait, si tu veux un zoom progressif, il te faudra recréer une nouvelle image et que rotozoom la calcule a CHAQUE frame.

Cela est une opération couteuse en temps de calcul, surtout dans la boucle principale (zone critique).

Donc disons que si tu veux appliquer cet effet a un seul objet, ça ira, mais si tu veux zoomer plein de trucs a chaque frame, tu vas faire ramer ta machine...

Important : si tu crées une nouvelle surface a chaque frame (surface modifiée), apres l´avoir blitté, libere la !! :)

Sinon, ta mémoire va monter, monter... l´ordi va ralentir, swapper, puis killer ton jeu...

godrik
godrik
Niveau 30
02 février 2007 à 17:57:35

HS : windows tue les processus qui prennent trop de mémoire ?

Fvirtman
Fvirtman
Niveau 10
02 février 2007 à 18:57:58

Euh, pas sur en fait, lol !
Quand la charge mémoire monte trop, ça commence a swapper de plus en plus severement, puis ensuite, un message s´affiche en bas a droite disant qu´il n´y a plus de mémoire virtuelle. Apres, je ne suis pas sur qu´il le tue lui meme...

dnob700
dnob700
Niveau 10
02 février 2007 à 19:16:25

le programme se tue tout seul : quand ça devient vrament trop catastrophique, il y a un malloc qui échoue (et donc une surface qui n´est pas alloué par exemple), et comme ce genre d´erreur n´est jamais vérifié par un programme, c´est sur un segfault que le système tue le processus. Sauf si un autre processus est déjà mort avant (mais c´est peu probable) en libérant ainsi un peu de mémoire.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment