SDL/OpenGL objekte vom Mittelpunkt drehen
-
glPushMatrix(); glTranslatef(x,y,0); glRotatef((float)alpha, 0.0f, 0.0f, 1.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2i(0, 0); glTexCoord2f(1.0f, 0.0f); glVertex2i(w, 0); glTexCoord2f(1.0f, 1.0f); glVertex2i(w, h); glTexCoord2f(0.0f, 1.0f); glVertex2i(0, h); glEnd(); glPopMatrix();wäre schonmal ein ansatz. habs aber nicht getestet. Es müsste sich nun um die Ecke der Textur Drehen, was schonmal ein schritt nach vorne ist.
-
ja stimmt! danke schonmal!
nur wie könnte ich es nun weiter machen? also das es um den mittelpunkt
gedreht wird. habt ihr da vllt. lösungsansätze?wär euch sehr dankbar!
mfg. babel
-
lösungsansatz:
du verschiebst dein zu drehendes objekt in richtung koordinatensystemnullpunkt verschieben, so dass die mitte deines objekts genau "in" dem koordinatensystemnullpunkt ist (schönes wort). dann drehen, dann wieder zurückverschieben.
einfacher geht das natürlich, wenn du (wie schon erwähnt), dein objekt gleich um den koordinatennullpunkt zeichnest, drehst, und dann verschiebst.
edit: weil ich grad nix zu tun hab
void drawsomething() { float x=0.0f-(objektbreite/2); float y=0.0f-(objekthöhe/2); float x2=objektbreite/2; float y2=objekthöhe/2; glPushMatrix(); glTranslatef(xVONOBJEKT,yVONOBJEKT,zVONOBJEKT); glRotatef((float)alpha, 0.0f, 0.0f, 1.0f); glBegin(GL_QUADS); glVertex2f(x,y); glVertex2f(x2,y); glVertex2f(x2,y2); glVertex2f(x,y2); glEnd(); glPopMatrix(); }editnr2: aus int mach float *schlagt mich*
-
hmm ok danke schonmal!
allerdings werden meine objekte nun garnicht mehr angezeigt^^
naja wird noch ein fehler da sein... aber ich guck morgen mal danach
-
hmm ich hab nun noch einiges probiert aber leider nichts
konstruktives hinbekommen!kennt jemand vllt. nen beispielcode oder ein tut genau darüber?
danke schonmal!
-
mein code hat auch nen extrem dummen fehler, den ich durchs nichttesten einfach nicht bemerkt hab. ich editier das da oben nochmal, dann kannst du das abändern
-
hast du den code nun ausprobiert? bei mir klappt er net...
es hat sich doch nur die zeile:
glTranslatef(xVONOBJEKT,yVONOBJEKT,zVONOBJEKT);geändert oder?
und x/y hab ich auch schon vom Objekt genommen!
sry oder blick ich grad net durch?

-
ok nun hab ich mal meine faulheit überwunden und msvc geöffnet:
glPushMatrix(); glEnable(GL_TEXTURE_2D); glTranslatef(m_Position.x+x2,m_Position.y+y2,0.0f); glRotatef(m_angle,0.0f,0.0f,1.0f); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(x,y); glTexCoord2f(1, 0); glVertex2f(x2,y); glTexCoord2f(1, 1); glVertex2f(x2,y2); glTexCoord2f(0, 1); glVertex2f(x,y2); glEnd(); glPopMatrix();sollte eigentlich funktionieren, bei mir tut es das jedenfalls.
-
hmm vielen dank schonmal - bei mir klappts aber leier immernoch net!
sehr komisch...kannst du mir vllt. mal dein projekt zukommen lassen?
-
ich poste den relevanten teil auf rafb.net, ich editier gleich rein
(is etwas älter, entschuldige irgendwelche stylepfuschs)
die klasse sprite:
http://rafb.net/p/us28RY16.htmlfenster eröffnen (war ortho):
-
nun hatte ich leider einige tage nicht zeit mir deine links
anzuschauen!kannst du sie vllt. nochmal hochlanden? jetzt das WE würd ich dann
mal einiges austesten...echt komisch ich kriegs nur hin um die obere linke ecke, oder die untere
rechte eckt zu drehen
thx schonmal!
-
-
ich danke dir schonmal

aber hast du auch noch den code wo du das fenster initialisierst?ich habe deinen code nun genau übernommen - aber er dreht sich um
den unteren rechten punkt - und nicht den mittelpunkt?! :-|
-
ich weis nicht wieso aber ich bekomme es nicht hin!
muss man was bestimmtes bei der initialisierung machen? irgendwie
nen raster/matrix einstellen?kann mir nicht jemand mal ein funktionierendes projekt geben?
das wäre echt super...p.s: iss ja nun sogar einfacher bilder in SDL zu drehen
