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

Texture OpenGL

Amarok_
Amarok_
Niveau 5
17 juin 2012 à 16:06:59

Salut à tous.

J'ai un problème sur la pose de texture avec OpenGL.
Je suit le tuto suivant :
http://www.siteduzero.com/tutoriel-3-4956-les-textures.html
Après avoir galérer à trouver les bonnes librairies etc ...., mon programme ce crash en disant qu'il écrit dans un endroit ou il a pas le droit (erreur de segmentation).

Voilà ou ce passe l'erreur du code :

  1. ifdef __cplusplus

#include <cstdlib>

  1. else

#include <stdlib.h>

  1. endif
  2. ifdef __APPLE__
  3. include <SDL/SDL.h>
  4. else
  5. include <SDL.h>
  6. endif
  1. include "sdlglutils.h"
  2. include <GL/gl.h>
  3. include <GL/glu.h>

void Dessiner();
double AngleX = 0, AngleZ = 0;
GLuint texture2;
GLuint texture1;

int main ( int argc, char** argv )
{
int LARGEUR_ECRAN = 640, HAUTEUR_ECRAN = 480;

SDL_Init(SDL_INIT_VIDEO);

SDL_WM_SetCaption("SDL GL Application", NULL);
SDL_Surface* ecran = SDL_SetVideoMode(LARGEUR_ECRAN, HAUTEUR_ECRAN, 32, SDL_OPENGL);

SDL_Flip(ecran);

bool continuer = true;
SDL_Event event;

glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
gluPerspective(70,(double)LARGEUR_ECRAN/HAUTEUR_EC
RAN,
1,1000);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
const char* filename = "tiles_ctf05r.jpg";
texture1 = loadTexture("wood.jpg");

Il rentre dans loadTexture :

  1. include "sdlglutils.h"
  2. include <SDL/SDL.h>
  3. include <SDL/SDL_image.h>
  4. include <GL/glu.h>
  1. include <cstring>
  2. include <cstdlib>

SDL_Surface * flipSurface(SDL_Surface * surface);

GLuint loadTexture(const char * filename,bool useMipMap)
{
GLuint glID;
SDL_Surface * picture_surface = NULL;
SDL_Surface *gl_surface = NULL;
SDL_Surface * gl_fliped_surface = NULL;
Uint32 rmask, gmask, bmask, amask;

picture_surface = IMG_Load(filename);
if (picture_surface == NULL){
const char* test = IMG_GetError();
return 0;
}

  1. if SDL_BYTEORDER == SDL_BIG_ENDIAN

rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;

  1. else

rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;

  1. endif

SDL_PixelFormat format = *(picture_surface->format);
format.BitsPerPixel = 32;
format.BytesPerPixel = 4;
format.Rmask = rmask;
format.Gmask = gmask;
format.Bmask = bmask;
format.Amask = amask;

gl_surface = SDL_ConvertSurface(picture_surface,&format,SDL_SWS
URFACE);

gl_fliped_surface = flipSurface(gl_surface);

glGenTextures(1, &glID);

glBindTexture(GL_TEXTURE_2D, glID);

if (useMipMap)
{

gluBuild2DMipmaps(GL_TEXTURE_2D, 4, gl_fliped_surface->w,
gl_fliped_surface->h, GL_RGBA,GL_UNSIGNED_BYTE,
gl_fliped_surface->pixels);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE
R,

GL_LINEAR_MIPMAP_LINEAR);

}
else
{
glTexImage2D(GL_TEXTURE_2D, 0, 4, gl_fliped_surface->w,
gl_fliped_surface->h, 0, GL_RGBA,GL_UNSIGNED_BYTE,
gl_fliped_surface->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE
R,GL_LINEAR);

SDL_FreeSurface(gl_fliped_surface);
SDL_FreeSurface(gl_surface);
SDL_FreeSurface(picture_surface);

return glID;
}

int takeScreenshot(const char * filename)
{
GLint viewport[4];
Uint32 rmask, gmask, bmask, amask;
SDL_Surface * picture, * finalpicture;

glGetIntegerv(GL_VIEWPORT, viewport);

  1. if SDL_BYTEORDER == SDL_BIG_ENDIAN

rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;

  1. else

rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;

  1. endif

picture = SDL_CreateRGBSurface(SDL_SWSURFACE,viewport[2],vie
wport[3],
32,
rmask, gmask, bmask, amask);
SDL_LockSurface(picture);
glReadPixels(viewport[0],viewport[1],viewport[2],v
iewport[3],GL_RGBA,

GL_UNSIGNED_BYTE,picture->pixels);
SDL_UnlockSurface(picture);

finalpicture = flipSurface(picture);

Il rentre dans flipSurface :

SDL_Surface * flipSurface(SDL_Surface * surface)
{
int current_line,pitch;
SDL_Surface * fliped_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
surface->w,surface->h,
surface->format->BitsPerPixel,
surface->format->Rmask,
surface->format->Gmask,
surface->format->Bmask,
surface->format->Amask);

SDL_LockSurface(surface);
SDL_LockSurface(fliped_surface);

pitch = surface->pitch;
for (current_line = 0; current_line < surface->h; current_line ++)
{
memcpy(&((unsigned char* )fliped_surface->pixels)[current_line*pitch],
&((unsigned char* )surface->pixels)[(surface->h - 1 -
current_line)*pitch],
pitch); <----------------- Ici
}

SDL_UnlockSurface(fliped_surface);
SDL_UnlockSurface(surface);
return fliped_surface;
}

A memcopy il y a une erreur de segmentation .... ça fait des heures et des heures que je cherche mais bon je ne sait comment résoudre ce problème.

Donc si vous avez la réponse, ou un moyen plus simple d'appliqué des textures n'hésitez pas =)

Aldebran
Aldebran
Niveau 10
17 juin 2012 à 17:35:21

Premièrement poste ton code sur pastebin, ce sera plus agréable à lire pour nous.

Ensuite, qu'est-ce que tu cherches à faire avec ta fonction flipSurface ? A première vue, j'ai l'impression qu'elle fait un truc bien inutile...

Aldebran
Aldebran
Niveau 10
17 juin 2012 à 17:47:29

Et bah je viens de faire un petit tour sur le site du zéro et ce tuto OpenGL m'a l'air absolument épouvantable...
Non seulement il est dépassé (car on ne code plus du tout comme ça en OpenGL depuis la sortie de la version 3.1 en 2009), mais en plus il fait l'impasse sur certains détails importants (la présentation du pipeline graphique par exemple...) et donne l'impression d'avoir été fait par quelqu'un qui apprenait OpenGL en même temps qu'il écrivait le tuto...
Et en plus le tuto ne va vraiment pas loin dans la présentation d'OpenGL (pas de matériaux, pas de lumières...).

Si tu veux vraiment faire de l'OpenGL trouve des tutos mieux foutus, ce lui là m'a l'air atroce :(

Aldebran
Aldebran
Niveau 10
17 juin 2012 à 17:52:27

A priori, ce tuto suivant a l'air un peu mieux foutu et plus à jour, même s'il reste limité :
http://www.siteduzero.com/tutoriel-3-421554-introduction.html

Amarok_
Amarok_
Niveau 5
17 juin 2012 à 18:04:32

Ok merci =)

pilo1488
pilo1488
Niveau 10
17 juin 2012 à 19:31:34

Je suis pas d'accord, le tuto cité par l'auteur est pas si mal.
Pas si mal pour un truc du site du zero (car le second est tout aussi zero, c'est dingue cette mauvaise habitude qu'on les auteur de tuto a faire croire qu'ils connaissent tout quand ils connaissent rien).

Si tu veux des tutos sympa :
http://nehe.gamedev.net/

C'est simple, concis, mais complet, et les différentes possibilités sont abordé les une après les autre. A la fin des tutos tu trouve en plus le code pour différentes palteforme et langage... :)

Amarok_
Amarok_
Niveau 5
17 juin 2012 à 20:17:03

Dommage que ce soit en anglais mais il à l'air très complet.
Je m'y mettrait après avoir bien utilisé la librairie SDL.

Merci =)

PS : Si vous avez d'autres site de tuto pour un débutant en créa jeux vidéo comme moi n'hésitez pas =D
(Je ne débute pas en programmation par contre)

Aldebran
Aldebran
Niveau 10
17 juin 2012 à 20:27:22

"Si tu veux des tutos sympa :
http://nehe.gamedev.net/ "

+1 les tutos sur ce site sont de qualité, même si obsolètes (les fonctions glVertex(), glRotate(), glPushMatrix(), glMatrixMode(), etc. sont toutes dépréciées aujourd'hui).

pilo1488
pilo1488
Niveau 10
17 juin 2012 à 20:48:54

"+1 les tutos sur ce site sont de qualité, même si obsolètes (les fonctions glVertex(), glRotate(), glPushMatrix(), glMatrixMode(), etc. sont toutes dépréciées aujourd'hui)."
oui mais bon, une chose après l'autre... ces fonctions facilitent quand meme l'apprentissage.

Aldebran
Aldebran
Niveau 10
17 juin 2012 à 21:10:28

"oui mais bon, une chose après l'autre... ces fonctions facilitent quand meme l'apprentissage. "

Pas sûr. Mais je dis peut-être ça parce que j'ai appris sans.

Pour moi ces fonctions cachent le fonctionnement interne d'OpenGL, et du coup on ne comprends pas ce qu'on fait réellement. Je pense qu'un bon tuto OpenGL devrait commencer par introduire le rendu 2D (avec VAO ou VBO et shaders), puis seulement introduire les transformations géométriques pour passer en 3D. C'est plus lent comme apprentissage, plus complexe (car plus poussé mathématiquement), mais à mon avis beaucoup plus solide. C'est pour ça que je trouvais que le tuto SdZ que je citais plus haut n'était pas mauvais (même si je l'ai juste survolé et n'ai pas vérifié s'il y avait des erreurs).

godrik
godrik
Niveau 30
17 juin 2012 à 21:16:36

Ca amene a la quaestion suivante: Y a t'il un bon cours ou tuto en ligne (francais ou anglais) pour de l'OpenGL moderne?

Personnellement, j'ai fait de l'openGL en 2004 et je n'ai jamais mis a jour mes competences. J'ai entendu que ca a beaucoup changer, mais concretement il y a une source simple pour me "mettre a niveau" (ou tout simplement un texte qui reprends tout correctement depus le debut).

PS: J'ai pas peur des details sordides.

pilo1488
pilo1488
Niveau 10
17 juin 2012 à 23:01:51

Aldebran : je pense pas que utiliser glVertex etc soit un mal en soit...
C'est ni plus ni moins qu'une autre facon de passer les infos. Effectivement c'est sous optimal, mais ca c'est pas important au debut.
Commencer par vbo + shader c'est quand meme destine au maso quand on sait a quel point c'est dependant du driver!

Godrik : mmm j'ais pas d'url en tete comme ca, mais bon y'a pas non plus un changement radical. Tu n'as peut etre pas vu les shaders? (GLSL semble le plus interesant je pense).

Pseudo supprimé
Pseudo supprimé 17 juin 2012 à 23:28:27

J'ai toujours trouvé les tutos de Nehe assez imbuvables. Y'a une traduction FR des premiers sur developpez pour les intéressés : http://nehe.developpez.com/

Ceux-là sont plutôt bons :
http://en.wikibooks.org/wiki/OpenGL_Programming
http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
(En anglais bien sûr, mais ça ne gène aucun bon programmeur)

Aldebran
Aldebran
Niveau 10
18 juin 2012 à 00:18:51

"Ca amene a la quaestion suivante: Y a t'il un bon cours ou tuto en ligne (francais ou anglais) pour de l'OpenGL moderne? "

Je sais qu'en livres, il y a ceux-ci :
http://www.amazon.fr/gp/product/0321773039/ref=s9_simh_gw_p14_d0_g14_i1?pf_rd_m=A1X6FK5RDHNB96&amp;pf_rd_s=center-2&amp;pf_rd_r=1P8R2PQV9D7BY3QFPNR6&amp;pf_rd_t=101&amp;pf_rd_p=463375533&amp;pf_rd_i=405320
http://www.amazon.fr/OpenGL-SuperBible-Comprehensive-Tutorial-Reference/dp/0321712617/ref=sr_1_1?ie=UTF8&amp;qid=1339970479&amp;sr=8-1

En ligne ça devient plus compliqué de trouver des tutos sur l'OpenGL moderne. Je connaissais pas les liens cités par Awesome_Guiber mais ils ont l'air plutôt pas mal, surtout celui là http://en.wikibooks.org/wiki/OpenGL_Programming

"C'est ni plus ni moins qu'une autre facon de passer les infos. Effectivement c'est sous optimal, mais ca c'est pas important au debut. "

Non seulement c'est sous-optimal, mais en plus c'est obsolète. Techniquement on ne doit plus utilisé ces fonctions (celles du pipeline fixe), elles ont été retirées des spécifications OpenGL depuis la version 3.1.
Alors autant commencer dès le début à avoir les bonnes pratiques. En plus celles-ci montrent bien le fonctionnement d'OpenGL et permettent de mieux maîtriser et appréhender ce qu'on fait. C'est quand même mieux quand on apprend de ne pas se retrouver face à des fonctions "magiques" mais de comprendre exactement ce qu'on fait, sinon on finit inévitablement par ne pas savoir comment obtenir un résultat spécifique juste parce qu'on ne comprends pas en détail le fonctionnement de 75% des fonctions qu'on a l'habitude d'utiliser.

"Commencer par vbo + shader c'est quand meme destine au maso quand on sait a quel point c'est dependant du driver! "

J'ai jamais eu de problèmes spécifiques aux drivers, même en ayant codé sous différentes machines ayant différentes cartes graphiques. A mon avis, faut vraiment aller dans des trucs poussés pour avoir des soucis liés au driver de la carte graphique : pour afficher un cube coloré, on ne devrait pas avoir de problèmes :)

pilo1488
pilo1488
Niveau 10
18 juin 2012 à 00:34:24

"J'ai jamais eu de problèmes spécifiques aux drivers, même en ayant codé sous différentes machines ayant différentes cartes graphiques."
tu n'as que 21ans, ca viendra sur des gros (vrai) projets ;)

godrik
godrik
Niveau 30
18 juin 2012 à 01:21:04

Je n'ai jamais vu opengl en entier. Juste les polygone, le z buffer, l'eclairage (et normales au surface), naturellement les transformation, viewport en empilement de matrices.

Apres ca, j'ai fait un peu de CUDA recement, mais ca n'a pas grand chose a voir.

pilo1488
pilo1488
Niveau 10
18 juin 2012 à 09:46:28

godrik: ben regarde les deux liens donné Awesome_Guiber, je pense que tu y trouvera de quoi compléter tes connaissances :) (le OpenGL Programming sur wikibook est pas mal).

tbop2
tbop2
Niveau 10
18 juin 2012 à 13:47:19

http://www.mbsoftworks.sk/index.php?page=tutorials&amp;series=1

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