Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 05:43

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objekte drehen (Neuling Alarm!!!)
BeitragVerfasst: Di Mai 24, 2005 22:14 
Offline
DGL Member

Registriert: Di Mai 24, 2005 22:07
Beiträge: 4
HI,

wie im Topic beschrieben, bin ich absoluter Neuling in Bezug auf OpenGL...

Zu meinem Problem:

Ich würde gerne 3 Scheiben, jede an einer bestimmten festen Position, drehen.
Das ganze ist in 2D, tja, könnt ihr euch eigentlich wie die Scheiben bei einem Geldspielautomaten vorstellen...

Ich weiß wie ich die Texturen auf nen Quad kriege. Nur leider krieg ich die Rotation um den eigenen Mittelpunkt nicht hin. Bei mir dreht sich die scheibe dann immer um punkt x,y, den ich nicht nachvollziehene kann.

Falls mich jemand verstanden hat und mir antworten kann, wäre ich sehr dankbar.
Für alle die es nicht verstanden haben: Danke für den Versuch ;)

Ciao
Despi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 22:55 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
So in etwa sollte gut tun:

Code:
  1.  
  2.   glViewport(0, 0, Width, Height);    // Set the viewport for the OpenGL window
  3.   glMatrixMode(GL_PROJECTION);        // Change Matrix Mode to Projection
  4.    glLoadIdentity();                   // Reset View
  5.    glOrtho(0,width,0,height,-10,10);
  6.  
  7.   glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
  8.    glLoadIdentity();                   // Reset View
  9.  
  10.  glTranslatef( X, Y ,0); // x,y QUAD POSITION
  11.  
  12.  glRotatef( angle, 0, 0, 1); // ROTATE
  13.  
  14.  glBegin( GL_QUADS); // DRAW
  15.   glVertex2f(-50,-50);
  16.   glVertex2f(50,-50);
  17.   glVertex2f(50,50);
  18.   glVertex2f(-50,50);
  19.  glEnd();
  20.  

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 00:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kleine Hinweise zu dem was Sniper dir sagen will:

1. glOrtho (siehe unser Wiki: http://wiki.delphigl.com/index.php/GlOrtho)

glOrtho macht eine echte 2D Projektion aus deiner Szene. D.h. die z-Werte dienen nur noch der Sortierung. Ein Tiefeneffekt ist nicht wahrzunehmen (ich glaub es gibt noch minimale verschiebungen, aber ... egal erstmal)

2. Befehle die du dir mal angucken solltest (alles in unserem Wiki):
glPushMatrix/glPopMatrix

3. Wieso drehts sich komisch:
OpenGL dreht immer um den Koordinatenursprung. Das heißt du muss zuerst das Scheibenzentrum in den KOU schieben, dann drehen und dann die Scheibe an die Endposition schieben. Bevor du irgendwas verschiebst, solltest du deine Matrix sichern (siehe Push/PopMatrix) und anschließend wiederherstellen. dadurch hast du für jede Scheibe eine definierte Ausgangssituation.

4. kleiner Hinweis: glViewport muss nur dann in jedem Renderdurchgang neu gesetzt werden, wenn sich was an ihm ändert. Wenn das gleich bleibt, kannste das auch in der Initialisierung einstellen (dort wo man auch die Texturen lädt. Das macht man ja auch nicht in jeder Runde. ;) ).

PS: Arbeitest du die Tutorials durch?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 14:49 
Offline
DGL Member

Registriert: Di Mai 24, 2005 22:07
Beiträge: 4
Danke erstmal für die schnellen Antworten!

Zitat:
PS: Arbeitest du die Tutorials durch?

Hab mir das Einsteiger Tut durchgelesen und nen paar andere mal angeguckt, finde die wirklich gut, nur brauche ich immer nen praktischen Verwendungszweck dafür, also sprich meinen Versuch hier ;)

Hab allerdings schon wieder ne neue Frage ;(

Code:
  1. procedure Draw_Quad;
  2. begin
  3.   glBegin(GL_QUADS); // DRAW
  4.     glVertex2f(-60,-60);
  5.     glVertex2f(60,-60);
  6.     glVertex2f(60,60);
  7.     glVertex2f(-60,60);
  8.   glEnd();
  9. end;
  10.  
  11.  
  12. procedure TForm1.Render(Sender : TObject; var Done : Boolean);
  13. begin
  14.   angle := angle - 5;
  15.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  16.   glLoadIdentity(); // Reset View
  17.   glOrtho(0,1024,0,768,-10,10);
  18.  
  19.   glMatrixMode(GL_MODELVIEW); // Return to the modelview matrix
  20.   glLoadIdentity(); // Reset View
  21.  
  22.   glEnable(GL_ALPHA_TEST);
  23.   glAlphaFunc(GL_GREATER, 0.1);
  24.   glBindTexture(GL_TEXTURE_2D, MyTex);
  25.  
  26.   y := 500;
  27.   x := 350;
  28.   glTranslatef(X, Y ,0); // x,y = QUAD POSITION
  29.   glRotatef(angle, 0, 0, 1); // ROTATE
  30.  
  31.   Draw_Quad;
  32.  
  33.   glpushmatrix;
  34.   y := 400;
  35.   x := 500;
  36.   glMatrixMode(GL_MODELVIEW); // Return to the modelview matrix
  37.   glLoadIdentity(); // Reset View
  38.   glTranslatef(X, Y ,0); // x,y = QUAD POSITION
  39.   glRotatef(angle, 0, 0, 1); // ROTATE
  40.   Draw_Quad;
  41.   glpopmatrix;
  42.  
  43.   glpushmatrix;
  44.   y := 500;
  45.   x := 650;
  46.   glMatrixMode(GL_MODELVIEW); // Return to the modelview matrix
  47.   glLoadIdentity(); // Reset View
  48.   glTranslatef(X, Y ,0); // x,y = QUAD POSITION
  49.   glRotatef(angle, 0, 0, 1); // ROTATE
  50.   Draw_Quad;
  51.   glpopmatrix;
  52.  
  53.   SwapBuffers(DC);
  54. end;
  55.  
  56. procedure TForm1.FormCreate(Sender: TObject);
  57. begin
  58.   InitOpenGL;
  59.   DC := GetDC(Handle);
  60.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  61.   ActivateRenderingContext(DC, RC);
  62.   glEnable(GL_DEPTH_TEST);
  63.   glDepthFunc(GL_LESS);
  64.   glEnable(GL_TEXTURE_2D);
  65.   glViewport(0, 0, 1024,768); // Set the viewport for the OpenGL window
  66.   glMatrixMode(GL_PROJECTION); // Change Matrix Mode to Projection
  67.   glLoadIdentity(); // Reset View
  68.   LoadTexture('c:\pic.tga', MyTex, False);
  69. end;


Wenn ich die tga-textur mit LoadTexture laden will, bekomme ich immer invalid-pointer-operation?!

Warum? Liegts an der TGA?
Hab mal die TGA mit hochgeladen, ist nur ne temporäre Textur zum Probieren...

Ansonsten noch die Fragen zum Code:
Mache ich irgendwas falsch/umständlich/dämlich oder sonst was? ;)

Danke nochmal!


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 17:25 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zum Code.
Du musst (in desem Fall) nicht immer glPop-Pushmatrix aufrufen und auch glMatrixMode(GL_MODELVIEW); brauchst du nicht.
Es reicht lediglich ein glLoadidentity();

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 17:35 
Offline
DGL Member

Registriert: Di Mai 24, 2005 22:07
Beiträge: 4
Danke für die Tipps.

Jetzt lade ich nen jpg und er zeigt die Textur nicht an?!
Wieso? Der Code ist der gleiche, nur aus "c:\pic.tga" mach "c:\pic.jpg".

Das kann doch alles gar nicht so schwer sein oder? ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 18:50 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Loadtexture mag anscheinend nicht alle TGAs.
Bei mir ist es anscheinend notwendig, dass ein Alphakanal vorhanden ist.

Welche Version hast du eigentlich?
Die Original oder die von SoS überarbeitete Version?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 23:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Versuch mal die glBitmap.pas zu verwenden. Die is simpel und funktionabel. (Und der Entwickler geistert hier im Forum rum. Is quasi unser Boardeigener Texturloader)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 28, 2005 10:05 
Offline
DGL Member

Registriert: Di Mai 24, 2005 22:07
Beiträge: 4
Hi,

Also als jpg funzen die Texturen inzwischen.
Möchte aber halt, dass es ne scheibe ist, also nen Alphakanal nutzen.
Kann ich nicht irgendwie den Alphakanal nun aus ner anderen jpg laden?

Hatte zwischendurch auch das prob, dass die Texturgröße nicht durch 4 teilbar war.

Wenn ich die scheiben drehe, sieht man deutlich den treppeneffekt.
Wie aktiviere ich AA?

Danke für eure Mühe.

Hier vielleicht noch mein code:

Code:
  1.  
  2. procedure Draw_Quad(x, y, Winkel : integer);
  3. begin
  4.   glLoadIdentity(); // Reset View
  5.   glTranslatef(X, Y ,0); // x,y = QUAD POSITION
  6.   glRotatef(Winkel, 0, 0, 1); // ROTATE
  7.   glBegin(GL_QUADS); // DRAW
  8.     glTexCoord2f(0,0); glVertex2f(-60,-60);
  9.     glTexCoord2f(1,0); glVertex2f(60,-60);
  10.     glTexCoord2f(1,1); glVertex2f(60,60);
  11.     glTexCoord2f(0,1); glVertex2f(-60,60);
  12.   glEnd();
  13. end;
  14.  
  15. procedure TForm1.Render(Sender : TObject; var Done : Boolean);
  16. begin
  17.   if not Stopped1 then angle1 := angle1 - 5;
  18.   if not Stopped2 then angle2 := angle2 - 10;
  19.   if not Stopped3 then angle3 := angle3 + 5;
  20.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  21.   glLoadIdentity(); // Reset View
  22.   glOrtho(0,1024,0,768,-10,10);
  23.   glMatrixMode(GL_MODELVIEW); // Return to the modelview matrix
  24.   glBindTexture(GL_TEXTURE_2D, MyTex);
  25.  
  26.   glpushmatrix;
  27.  
  28.   Draw_Quad(350, 500, angle1);
  29.   Draw_Quad(500, 400, angle2);
  30.   Draw_Quad(650, 500, angle3);
  31.  
  32.   glpopmatrix;
  33.   SwapBuffers(DC);
  34. end;
  35.  
  36. procedure TForm1.Init;
  37. begin
  38.   Stopped1 := False;
  39.   Stopped2 := False;
  40.   Stopped3 := False;
  41.   InitOpenGL;
  42.   angle1 := 0;
  43.   angle2 := 0;
  44.   angle3 := 0;
  45.   DC := GetDC(Handle);
  46.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  47.   ActivateRenderingContext(DC, RC);
  48.   glEnable(GL_DEPTH_TEST);
  49.   glDepthFunc(GL_LESS);
  50.   glEnable(GL_TEXTURE_2D);
  51.   glViewport(0, 0, 1024,768); // Set the viewport for the OpenGL window
  52.   glMatrixMode(GL_PROJECTION); // Change Matrix Mode to Projection
  53.   glLoadIdentity(); // Reset View
  54.   LoadTexture('c:\pic.tga', MyTex, False);
  55. end;
  56.  
[/quote]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 30, 2005 14:35 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Kleiner Tip zu den TGAs: Verwende keine komprimierten TGAs, sondern nur Standard-TGAs mit insgesamt 32 Bit, wovon
8 Bit auf den Alphakanal entfallen(Graustufen) und die restlichen 24 Bit von RGB gefuttert werden.

Mit der glBitmap kannst du in der Tat einer Textur einen Alphakanal aus einer anderen Textur zuweisen. Die Unit ist generell für Texturen recht praktisch.

Texturgrößen durch 4 teilbar? Die Texturgröße "muss" eine Potenz von 2 sein (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096).

Treppeneffekt? Ich nehme an, du bindest deine Textur auf ein Quadrat... Ohne Alphakanal und ohne Blending müssten in der Tat Stufen zu sehen sein, aber das "deutlich" in deinem Post verwirrt mich... Vielleicht meinst du auch das geflimmere der Textur. Das hat dann weniger was mit Anti-Aliasing zu tun, sondern vielmehr mit Mip-Mapping. Auch hier bietet die glBitmap einige praktische Funktionen...

Die glBitmap ist es definitiv wert, verwendet zu werden.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 30, 2005 15:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Frase hat geschrieben:
Die glBitmap ist es definitiv wert, verwendet zu werden.

8)

Treppeneffekt: Es kann auch sein, dass deine Textur für so etwas nicht hochauflösend genug ist. Das wird von OpenGL zwar weicher gefiltert aber eine gewisse Treppe bleibt immer noch. Evtl ist es da ganz praktisch, wenn du uns mal ein Bild zeigst. Evtl kann man das ja noch anders lösen. Das kommt dann aber auch mit auf den Inhalt des Bildes an. Also wie der Saturnring zum beispiel. Den kann man entweder als Quad mit einer 2D Textur darstellen oder mit mehreren Flächen und einer 1D Textur.

Alpha mit glBitmap: Den Alphakanal kannst du hinzufügen, wenn du eine glBitmap Klasseninstanz hast und dann die Methode AddAlphaFrom* aufrufst. Der Stern steht für Bitmap, File, Stream, ColorKey und so weiter und gibt die Quellen des Alphakanals an.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]