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

fracart
fracart
Niveau 5
26 juin 2005 à 23:24:31

" glRotate(axe, 0, 1, 0);"

tu voulais pas dire :
glRotate(angle, 0, 1, 0);
par hasard ? ( l´axe étant déterminé par les 3 derniers paramètres)

JeanYvesYves
JeanYvesYves
Niveau 10
26 juin 2005 à 23:49:15

attention ! !
si vous faites :

gltranslate(x,y,z);
glrotate(angle);
gltranslate(-x,-y,-z);

vous ne revenez pas a la position initiale ! !
Car vous faites toujours une opération par rapport a la précédente :
si vous translatez d´abord de x,y,z, vous vous deplacez, puis ensuite, vous tournez : donc les axes ont tourné : et ainsi, si vous remettez les memes valeurs pour -x,-y,-z, vous ne revenez pas au meme endroit.

Pour les matheux : c´est un produit de matrice.
Et ça se prouve mathématiquement.

Pour les matheux :
En fait, opengl a comme base la matrice identité.
Pour chaque gltranslate,glrotate,glscale, la matrice actuelle dites MODEL_VIEW est multipliée par la matrice générée par le translate, le rotate, etc ! !

C´est une fois que tout cela est posé que vous dessinez votre quad dans le repere actuel ! ( donc celui qui vaut model view)

A l´occas, je prendrai + de temps pour y expliquer, la je vais me coucher.
Mais sahcez qu´il exise des fonctions pour garder des matrices en mémoire ( genre avant la rotation, vous pouvez par exemple sauver la position actuelle, faire un translate, puis un rotate, puis revenir au point de départ en rappelant la sauvegarde :) )
Il existe également des fonctions pour revenir à 0 ( matrice identité)

Voila, apres, on me demande si la 3D est + dure que la 2D : j´ai bien peur que des notions de maths assez poussées soient nécessaires ! !
mais rien ne vous empeche d´essayer !
Sachant que, si vous utilisez correctement ( que je voyiez le principe) de gltranslate,glrotate,glscale, vous n´avez vous meme plus a manipuler des matrices :)

franco01
franco01
Niveau 7
27 juin 2005 à 16:53:48

Pour faire ce genre de transformations géométriques, il faut :

glPushMatrix() / / pour copier la matrice en haut de la pile
faire la trnaslation
faire la rotation
afficher l´objet
glPopMatrix(); / / afin de revenir à la matrice précédente

Ainsi de suite

gollumkawder
gollumkawder
Niveau 10
27 juin 2005 à 17:03:45

fracart > Si, c´est ça

Vengeur41
Vengeur41
Niveau 10
27 juin 2005 à 17:16:10

Merci, j´ai fait tout ça et ca marche, mais je suis confronté à un autre problème :
Je veux que mon carré tourne sur lui meme et avance dans l´angle, j´avais pensé trouver avec ca :

void advance(int vitesse)
{
x+=vitesse*sin(angle);
y+=vitesse*cos(angle);
}

puisque ca marchait bien sur papier ( oui bon, c´était sur papier aussi :) et vu que j´ai un niveau ridicule en maths... ( 3ème)) mais là ca marche pas du tout, j´ai rajouté une fleche pour connaitre l´angle du quad, voila mon système :

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();
glTranslatef(x+25,y+25,0);
glRotatef(angle,0.0f,0.0f,1.0f);
glTranslatef(-(x+25),-(y+25),0);
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();

glBegin(GL_LINES);
/ / glcolor3ub(255,0,0);
glVertex2i(x+50,y+25);
/ /glcolor3ub(255,0,0);
glVertex2i(x+100,y+25);
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;
}
advance(vitesse);
vitesse=0;
eventloop();
sync_fps(20);
}

Les trucs qui pourraient rentrer en cause :
-les angles sont peut-être en radians ( j´ai pas vérifié ca)
-Mon bricolage à base de trigo est faux ( le plus proche de la réalité jpense :) )

Merci d´avance de votre aide !

Lapintade
Lapintade
Niveau 30
27 juin 2005 à 17:18:47

sin et cos sont toujours en radians je crois.

Lapintade
Lapintade
Niveau 30
27 juin 2005 à 17:19:07

( enfin non j´en suis presque sur, regarde sur msdn )

franco01
franco01
Niveau 7
27 juin 2005 à 17:21:40

Oui Lapintade c´est bien en radian qu´il faut les spécifier

JeanYvesYves
JeanYvesYves
Niveau 10
27 juin 2005 à 17:25:00

Merci, j´ai fait tout ça et ca marche, mais je suis confronté à un autre problème :
Je veux que mon carré tourne sur lui meme et avance dans l´angle, j´avais pensé trouver avec ca :

En gros, tu veux qu´il tourne sur lui meme tout en avançant vers le bord ?
et bien fait un gltranslate(t,0,0) ; / / avec t qui avance au fur et a mesure du temps
et apres, un glrotate(angle); / / avec angle qui évolue aussi : angle est bien en degrés.
et surtout, dessine astucieusement ton quad : dessine le de -1,-1 à 1,1 :)

JeanYvesYves
JeanYvesYves
Niveau 10
27 juin 2005 à 17:26:15

pour sin et cos, les fonctions maths, c´est en radian, mais glrotate prend des angles en degrés...

lien :
http://pyopengl.sourceforge.net/documentation/manual/glRotate.3G.html

Vengeur41
Vengeur41
Niveau 10
27 juin 2005 à 17:26:18

Ok, dans ce cas je ferai des conversions avant et après avoir passé les arguments.

Merci :)

Euh, j´avais un site qui expliquait les radians mais je le retrouve plus, est-ce que quelqu´un peut me passer un texte explicatifs sur les radians ou , à défaut, me donner la formule radians -> degrés ?

JeanYvesYves
JeanYvesYves
Niveau 10
27 juin 2005 à 17:30:29

tres simple :

PI radians = 180 degrés

dynoplasmma
dynoplasmma
Niveau 9
27 juin 2005 à 17:34:37

Je pense me lacer au 3D quand j´aurais bien aqui SDL, je pense faire un peu de flash, ameliorer le C++ . ..

dynoplasmma
dynoplasmma
Niveau 9
27 juin 2005 à 17:36:41

Je reviens de 6 heures de controle :malade:
2 heures demain , mieux !

Vengeur41
Vengeur41
Niveau 10
27 juin 2005 à 17:42:32

Moi aussi j´ai eu brevet aujourd´hui :)

Bon donc j´en déduis ca :

Degrés -> Radians :

Soit A l´angle :
Soit R l´angle en Radians :

( PI*A)/180 = R;
( 180*R)/PI = A;

C´est ça ?
Vous savez, un 3ème et des maths, le nvieau est bas donc bon je préfère que vous me disiez " oui c´est ca" avant que je me lance ! ( et que je me plante, accessoirement)

JeanYvesYves
JeanYvesYves
Niveau 10
27 juin 2005 à 17:50:27

vengeur > oui c´est ça :)

Vengeur41
Vengeur41
Niveau 10
27 juin 2005 à 18:06:10

J´ai le plaisir de vous annoncer que ca marche ! !!!

Merci à tout ceux qui m´ont aidé !

@ bientot

Vengeur

JeanYvesYves
JeanYvesYves
Niveau 10
27 juin 2005 à 18:09:08

:content:

JeanYvesYves
JeanYvesYves
Niveau 10
27 juin 2005 à 18:19:32

théorie sur la 3D :
http://perso.numericable.fr/~fvirtman/info/deim/index.html
2e partie de page.

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