1

yop,

Je suis obligé de rendre un projet opengl compilable sous Linux/NetBSD pr l'école, il utilise OpenGL et comme je n'ai pas trop envie de tout refaire, tant pis, j'utilise SDL. Le problème c'est que sa fonction pour charger les BMP (SDL_LoadBMP) semble fonctionner curieusement (ou alors j'ai mal du régler qqchose, je sais pas) : elle me charge mes BMP en RGBA.
Déjà, pourquoi ce A ? Il ne me semble pas que les BMP gèrent la transparence, donc pkoi ajouter un octet par pixel alors qu'il va rester constant ? Ça ne serait qu'une perte de place, donc pas trop grave, si ce fameux octet n'était pas fixé à 0, ce qui signifie alpha 0% pour toute mon image; résultat quand j'utilise de la transparence avec OpenGL, plus aucune surface texturée n'apparait puisqu'elles ont toutes une transparence totale sorry

Pour régler le problème je n'ai pr l'instant rien trouvé d'autre que modifier à la main les octets "alpha" dans le champ surface->pixels (super propre comme solution grin), existe-t-il une façon normale de procéder ?

Merci happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

je suis pas un pro

mais y'a pas des fonctions de conversion de type de buffers?

3

Généralement on utilise des buffers 32 bits par pure optimisation (32 bits = 1 accès 32 bits, 24 bits = 3 accès 8 bits, plus des optimisations pour la navigation dans le buffer...), et parce qu'avec nos machines actuelles on peut se le permettre. (Et au passage, les bitmaps supportent le 32 bits aussi hein tongue)
Maintenant le paramètre alpha n'a que la signification que tu lui donnes (transparence ou opacité, dans un cas 255 dira 100% transparent, dans l'autre 100% opaque) et il me semble que OpenGL permet d'ajuster les paramètres d'alpha-blending (Au pire tu peux normalement le désactiver si tu n'utilise pas l'alpha blending ailleurs) même si ça ne reste pas super.
Il y a plein de manières de procéder mais a mon avis, si tu ne trouves rien dans SDL qui corrige ton problème, ta manière "a la main" restera la plus simple...
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

4

[google]SDL_SetAlpha[/google]
Gentil, je colle un résumé:

SDL_SetAlpha
Name
SDL_SetAlpha -- Adjust the alpha properties of a surface
Synopsis

#include "SDL.h"
int SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha);


Description
Note: This function and the semantics of SDL alpha blending have changed since version 1.1.4. Up until version 1.1.5, an alpha value of 0 was considered opaque and a value of 255 was considered transparent. This has now been inverted: 0 (SDL_ALPHA_TRANSPARENT) is now considered transparent and 255 (SDL_ALPHA_OPAQUE) is now considered opaque.

5

ah je connaissais pas ça, thx happy

[edit] bon bah en fait ça ne marche pas grin
j'ai essayé les différentes combinaisons de flags / valeurs, ça ne change rien à la surface (alors que la boucle barbare qui modifie les octets un à un, elle, fonctionne très bien)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

bisard j avais utilise l alpha dans un projet d api graphique avec sdl et ca marchait tres bien...
Dommage que la seule copie restante soit à mon ecole :/

7

doit y avoir un détail que j'ai oublié, ms je ne connais pas du tout SDL ... relou ces incompatibilités pour deux trucs qui étaient censés s'interfacer sans aucun problème sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

je suis étonné aussi que ça marche pas. confus
j'ai déja testé sdl avec opengl (con des trucs simples quoi) et ça marchait bien pourtant.

9

essaye de regarder des exemple de nehe, il y a souvent la source avec SDL+opengl si mes souvenirs sont bons.

10

hmm je ne suis pas allé sur NeHe depuis un moment, mais il me semble que les tutos n'utilisaient qu'OpenGL, pas SDL :/ (enfin bon j'y retournerai à tt hasard)

squalyl > bah oui ça marche, c'est juste ce truc précis qui a l'air de faire n'imp; tu as déjà utilisé la transparence sur une texture chargée ac SDL ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

12

Peut-être que tu as opté pour la solution de tout reconvertir avec 0xff pour canal alpha, mais normalement il y a une autre solution.
Je sais pas ce qu'il en est avec SDL (je connais pas), mais bon normalement il faut définir une blendfunction qui ajoute (1-alpha)*pixsource + alpha*pixdest (c'est l'inverse par défaut), genre (je sais pas en OpenGL mais ça doit ressembler):
sceGuBlendFunc(GU_ADD, GU_ONE_MINUS_SRC_ALPHA, GU_SRC_ALPHA, 0, 0);
Là si tu mets 0 ça signifiera opaque, et 0xff transparent...
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

13

yep j'ai fini par faire ça, mais merci quand même ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)