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

[OpenGL]Rotations autour du centre

Vengeur41
Vengeur41
Niveau 10
26 juin 2005 à 22:29:35

Salut à tous et à toutes;
Alors voilà, je m´était attaqué à un petit problème que j´ai presque réussi mais il me reste un truc à régler :

----
void initGL2D(int left, int top, int right, int bottom)
{
glMatrixMode(GL_PROJECTION);

glPushMatrix();

glLoadIdentity();

glOrtho( left, right, bottom, top, 0, 100 ) ;

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
. ..
while(!bQuit)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);
initGL2D(0,0,640,480);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glRotatef(angle,0.0f,0.0f,1.0f);
glTranslatef(
glBegin(GL_QUADS);
glColor3ub(0,0,125); glVertex2i(x,y+50);
glColor3ub(0,0,125); glVertex2i(x+50,y+50);
glColor3ub(255,255,255); glVertex2i(x+50,y);
glColor3ub(255,255,255); glVertex2i(x,y);
glEnd();
glPopMatrix();
SDL_GL_SwapBuffers();
keystate = SDL_GetKeyState(NULL);

if ( keystate[SDLK_RIGHT])
{
angle += PI/50;
}
if ( keystate[SDLK_LEFT])
{
angle -= PI/50;
}
if ( angle>359)angle=0;
if ( angle<0)angle=359;
if ( keystate[SDLK_UP])
{
vitesse=1;
}
x+=vitesse*cos(angle);
y+=vitesse*sin(angle);
vitesse=0;
eventloop();
sync_fps(20);
}
quit();
}

---

Donc voici le problème :
Mon quad tourne autour du point de coordonnées ( 0,0). Comment faire pour qu´il tourne autour de son centre ?

J´ajoute que je débute en OpenGL

Merci et
@+

Vengeur

Quintoff
Quintoff
Niveau 10
26 juin 2005 à 22:32:12

Je ne m´y connais pas du tout, mais en toute logique je pense que cette fonction doit être modifier :
glRotatef(angle,0.0f,0.0f,1.0f);
En tout cas ses arguments, non?

ps : j´essaye de t´aider mais je promet rien...

Lapintade
Lapintade
Niveau 30
26 juin 2005 à 22:32:49

Je dirais qu´il faut centrer ton quad en 0

glColor3ub(0,0,125); glVertex2i(x-25,y+25);
glColor3ub(0,0,125); glVertex2i(x+25,y+25);
glColor3ub(255,255,255); glVertex2i(x+25,y-25);
glColor3ub(255,255,255); glVertex2i(x-25,y-25);

mais je m´y connais pas plus que toi en opengl

Quintoff
Quintoff
Niveau 10
26 juin 2005 à 22:34:10

Oups c´est pas ce que je pensait apparement... :snif:

JeanYvesYves
JeanYvesYves
Niveau 10
26 juin 2005 à 22:39:19

ce que tu peux essayer de faire :
par défaut, le repere graphique est en 0,0,0.
Si tu veux tourner autour d´un autre point, décale toi d´abord sur cet autre point, puis tourne :

exemple : pour tourner autour du point x,y,z, fait
glTranslate(x,y,z); / / peut etre un autre param, vérifie
puis le glRotate.

je pense que ça devrait marcher, essaie et tiens moi au courant.

Lapintade
Lapintade
Niveau 30
26 juin 2005 à 22:41:21

Faut refaire un autre translate aprés pour remttre l´objet a sa position de depart.

Du genre
- Translate ( -pos du centre)
- Rotate
- Translate ( pos du centre)

?

fracart
fracart
Niveau 5
26 juin 2005 à 22:42:49

comme jyy l´a si bien di :
-gltranslate ( pour placer le centre du repere au milieu de ton carré)
-glrotate ( pour tourner)
-gltranslate ( pou revenir au point de départ)
-dessin du carré

fracart
fracart
Niveau 5
26 juin 2005 à 22:43:27

ah bah lapintade m´a pris de vitesse :/

fracart
fracart
Niveau 5
26 juin 2005 à 22:50:22

" - Translate ( -pos du centre)
- Rotate
- Translate ( pos du centre) "

les translate se font dans l´autre sens :
d´abord on place le repère au centre du carré, puis on effectue la rotation, puis on replace le centre du repère en 0

dynoplasmma
dynoplasmma
Niveau 9
26 juin 2005 à 22:57:10

Ca a l´air bien plus dur opengl !

fil_razorback
fil_razorback
Niveau 10
26 juin 2005 à 22:57:52

Pas plus que l´assembleur je pense :)

fracart
fracart
Niveau 5
26 juin 2005 à 22:59:19

comment ca?
j´en ai fait toute l´année, pourtant les seuls gros problèmes auxquels je me suis confronté sont les lumières, pour le reste ça allait pas trop mal ( bon ok, je n´ai pas cherché à faire des trucs très compliqués non plus :-p )

dynoplasmma
dynoplasmma
Niveau 9
26 juin 2005 à 23:02:46

Comparé a sdl, c´est pas beaucoup plus dure ?

fracart
fracart
Niveau 5
26 juin 2005 à 23:06:12

sdl n´est qu´une libraire " facilitant" l´accès à certaines instructions OpenGL...
si tu veux avoir plus de liberté, utilise OpenGL...

Quintoff
Quintoff
Niveau 10
26 juin 2005 à 23:07:26

Ouais mais quand on fait de la 2D, a part un peu de performance en plus peut être , on gagne pas grand chose..

gollumkawder
gollumkawder
Niveau 10
26 juin 2005 à 23:11:58

Un peu de performance ? C´est un feature implémenté dans tes drivers. On a accès a un langage de shader, des extensions pour la carte, des outils mathématiques très puissant...

Quintoff
Quintoff
Niveau 10
26 juin 2005 à 23:15:05

Ouais mais SDL utilise OpenGL, donc on perd juste les performance qui sont due à la couche supplémentaire qui simplifie la vie au programmeur. Et puis on peux faire du SDL/OpenGL pour compléter le tout :)

gollumkawder
gollumkawder
Niveau 10
26 juin 2005 à 23:16:01

Hm perso je mettais mon carré de -1 a 1 en coordonnées, puis je faisais glRotate(axe, 0, 1, 0); par exemple

gollumkawder
gollumkawder
Niveau 10
26 juin 2005 à 23:17:43

" Et puis on peux faire du SDL/OpenGL pour compléter le tout"

Pourquoi ne pas faire de l´opengl pur pour le graphique alors ? D´autant plus que l´interface OpenGL est nettement moins brouillon a mon gout que SDL

Quintoff
Quintoff
Niveau 10
26 juin 2005 à 23:23:34

Ca dépend ce que préfere le programmeur, perso dans ce domaine j´ai pas d´expérience, alors je saurais pas dire. Mais l´opengl c´est quand même pas un petit truc. Par rapport à SDL qui est une simple librairie avec des petites fonctions.

ps : Sur ce, je vais dormir, a demain :-)

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