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

Aktuelle Zeit: Do Jul 03, 2025 22:26

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: 2D Hintergrundbild
BeitragVerfasst: Do Jan 09, 2003 12:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Ich habe mal wieder eine Frage. Ich möchte in meiner 2D Engine ein Hintergrundbild darstellen ich wollte es so machen, ich lade und zeichne es wie eine normale Textur. Z = -10 und mit den Funktionen von OpenGL ziehe ich es dann so groß wie mein Fenster. Ist das so ok, wie ich das mache oder gibt es da bessere Lösungen, bestimmt :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Warum soll's eine Bessere Lösung geben, wenns doch Funktioniert? Und Umständlich isses IMO auch nicht. Ich würd's zumindest genau so machen (was natürlich nix heisst) ;) .

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 13:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Ich habe es jetzt auch so gemacht. Doch ich habe noch einige Fragen zur Umwandeln von Zahlen und Farben.
Wie kann ich eine TColor Farbe nach einer RGB Farbe umwandeln.
Code:
  1.  
  2.  
  3. Color := clYellow
  4.  
  5. glColor3f(ColorToRGB(Color));
  6.  
  7.  


Wie kann ich eine Position in OpenGL Positionen umwandeln, glaube zwar nicht das so was geht aber man kann ja mal fragen.
Code:
  1.  
  2.  
  3. xLeft := 20  //20 Pixel von der Linken Seite des Programms
  4.  
  5. yTop := 10  //20 Pixel von der Oberen Seite des Programms
  6.  
  7. glTranslatef(Umwandeln(xLeft),Umwandeln(yLeft),-7);
  8.  
  9.  

Irgend wie so. Ich hoffe ihr wisst was ich meine und könnt mir weiter Helfen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 13:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
@TColor:
Was TColor betrifft, so hilf ein Blick in die Delphi-Hilfe, um zu wissen wie das geht. Leider gibt's keine Funktion (Wenn ich/s richtig weis), aber ich versuch's mal zu erklären:

TCollor ist ein einfacher 32-Bit wert. die ersten 8 Bit für Alpha (wird IMO nicht verwendet), die zweiten 8 Bit für Blau, die näschten 8 Bit für Grün und die letzten 8 Bit für Rot. Wen man sich einen Farb-Wert als Hexa-Dezimale Farbe vorstellt, sieht das dann so aus:

MyColor := $00FE2344; (00 = Alpha, FE = Blau, 23 = Grün, 44 = Rot).

Eine Funktion zum Konvertieren müsste dann so aussehen:

Code:
  1.  
  2.  
  3. function TColor2RGB(Col: TColor; var Blue, Green, Red: Word);
  4.  
  5. begin
  6.  
  7.   Blue := (Col and $FF0000) shr 4;
  8.  
  9.   Green := (Col and $FF00) shr 2;
  10.  
  11.   Red := (Col and $FF);
  12.  
  13. end;
  14.  
  15.  
  16.  
  17. ...
  18.  
  19. var R, G, B: Word;
  20.  
  21. begin
  22.  
  23. ...
  24.  
  25.   TColor2RGB(clYellow, B, G, R);
  26.  
  27.   glColor3f(r, g, b);
  28.  
  29. ...
  30.  
  31. end;
  32.  
  33.  


Dabei werden per AND immer die jeweiligen 8 Bit herrausgefiltert und dann "nach unten" verschoben, damit man einen reinen Word-Wert bekommt. Das ist aber theoretisch und müsste Funktionieren. Getestet hab' ichs nicht.

@Funktion/Koordinaten:
Es gibt eine glu-Funktion, welche diese Umrechnung für Dich übernimmt (wenn ich mich nicht irre). SOS kann Dir da Warscheinlich mehr sagen. Ansonsten schau einfach mal ins RedBook bzw. die OpenGL-SDK Hilfe rein (beides als Download auf DGL erhälltlich).

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 14:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
ok, werde mal in der hilfe nach schauen, danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 14:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

wegen der Farbe.. :)
mit:
Code:
  1. glColor3ub(GetRValue(Color),GetGValue(Color),GetBValue(Color));


geht's ganz einfach :P

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 14:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Ich habe eine Function gefunden die aus Object Koordinaten (K) Windows K macht (gluProject). Aber ich habe keine gefunden die aus Windows K. Object K. macht. :?:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
SOS hat im Thread <a href='http://www.phobeus.de/hosting/dgl/forum/viewtopic.php?t=541' target='_blank'>http://www.phobeus.de/hosting/dgl/forum/vi...topic.php?t=541</a> die Funktion gluUnProject() erwähnt. Schau mal nach, was mit der zu machen ist.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
ok, habe es gesehen aber für was sind die Parameter
Code:
  1.  
  2.  
  3. const GLdouble modelMatrix[16],
  4.  
  5. const GLdouble projMatrix[16],
  6.  
  7. const GLint viewport[4],
  8.  
  9.  

Wür was brauche ich die?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 15:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Steht doch in der Hilfe drinnen. (Ok nicht wozu man die braucht, aber wie man die bekommt). gluUnProject wird anhand der Daten (auch der Matritzen) die gewünschten Werte berrechnen. Die Matrizen sind und der ViewPort sind zur Berechnung eben notwendig. Einfach die dafür in der Hilfe aufgeführte Funktion aufrufen und das Ergebnis des Aufrufs an die gluUnProject übergeben. Nähere Infos zu den entsprechenden Funktionen findest Du ebenfalls in der Hilfe.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 16:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
was habe ich hier falsch gemacht :?:
Code:
  1.  
  2.  
  3. var
  4.  
  5.  &nbsp;a,b : pglDouble;
  6.  
  7.  &nbsp;c : pglint;
  8.  
  9.  &nbsp;x1,y1,z1 : GLdouble;
  10.  
  11. begin
  12.  
  13.  &nbsp;glGetFloatv(GL_MODELVIEW_MATRIX,@a);
  14.  
  15.  &nbsp;glGetFloatv(GL_PROJECTION_MATRIX,@b);
  16.  
  17.  &nbsp;glGetIntegerv(GL_VIEWPORT,@c);
  18.  
  19.  &nbsp;gluUnProject(800,600,0,@a,@b,@c,x1,y1,z1);
  20.  
  21.  
  22.  
  23.  &nbsp;glLoadIdentity;
  24.  
  25.  &nbsp;glTranslatef(-0.25,-0.9,-50);
  26.  
  27.  &nbsp;glScalef(x1,y1,0.0);
  28.  
  29.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 16:36 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Warum machst Du glScaleF? Du hast nach gluUnProject 3 Koordinaten. Dies sind die Koorinaten, die du ketzt im Moment zum anzeigen des Objektes verwenden müsstest. Wenn Du also an Fenster-Position 100, 200 (als Beispiel) einen Punkt setzen wolltest, dann müsstest Du das entsprechend an gluUnProject übergebne. Das Ergebnis liefert dir dann die 3D-Koordinaten zurück. Beispiel:

Code:
  1.  
  2.  
  3. var
  4.  
  5.  &nbsp;a,b : pglDouble;
  6.  
  7.  &nbsp;c : pglint;
  8.  
  9.  &nbsp;x1,y1,z1 : GLdouble;
  10.  
  11. begin
  12.  
  13.  &nbsp;glGetFloatv(GL_MODELVIEW_MATRIX,@a);
  14.  
  15.  &nbsp;glGetFloatv(GL_PROJECTION_MATRIX,@b);
  16.  
  17.  &nbsp;glGetIntegerv(GL_VIEWPORT,@c);
  18.  
  19.  &nbsp;gluUnProject(100,200,0,@a,@b,@c,x1,y1,z1);
  20.  
  21.  &nbsp;
  22.  
  23.  &nbsp;glBegin(GL_POINTS);
  24.  
  25.  &nbsp; &nbsp;glVertex3f(x1, y1, z1);
  26.  
  27.  &nbsp;glEnd;
  28.  
  29.  


Dann müsste der Punkt an der Fenster-Position 100, 200 erscheinen. Wenn Du natürlich NACH der gluUnProject-Berechnung glLoadIdendity, glTranslate usw. aufrufst, wird Deine ModelView-Matrix geändert und somit stimmen die Werte natürlich nicht. Das Umrechnen der Fenster-Koordinaten auf Objekt-Koordinatne ist immer von der aktuellen ModelView-Matrix abhängig. Wenn, dann glLoadIdendity, glTransLate, glRotate, glScale,... VOR gluUnProject aufrufen! (bzw. auf jeden Fall vor dem Ermitteln der Matrizen).

Zwei Dinge noch:
- Ich bin mir nicht sicher, was den Z-Wert angeht. Du hast ihn auf 0 gesetzt. Kann sein, dass er einen gewissen Wert braucht. Einfach mal rumspielen.

- Ich hab' mit gluUnProject bisher noch nichts gemacht. Weis also nicht, ob das (was theoretisch so funktionieren müsste) auch alles so Stimmt. Wenn nicht, berichtige mich wer's genauer weiß!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 16:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Ich habe es so gemacht, aber immer wenn er die letzt Zeile, meiner Procedure, Passiert hat, bekomme ich eine Exception. Wieso weis ich nicht. So sehen jetzt meine Sourcen aus:
Code:
  1.  
  2.  
  3. procedure TGLCanvasBackPicture.Draw(Width,Height : integer);
  4.  
  5. var
  6.  
  7.  &nbsp;a,b : pglDouble;
  8.  
  9.  &nbsp;c : pglint;
  10.  
  11.  &nbsp;x1,y1,z1 : GLdouble;
  12.  
  13. begin
  14.  
  15.  &nbsp;glLoadIdentity;
  16.  
  17.  &nbsp;glBindTexture(GL_TEXTURE_2D,FBitmap);
  18.  
  19.  
  20.  
  21.  &nbsp;glGetFloatv(GL_MODELVIEW_MATRIX,@a);
  22.  
  23.  &nbsp;glGetFloatv(GL_PROJECTION_MATRIX,@b);
  24.  
  25.  &nbsp;glGetIntegerv(GL_VIEWPORT,@c);
  26.  
  27.  &nbsp;gluUnProject(100,200,1,@a,@b,@c,x1,y1,z1);
  28.  
  29.  
  30.  
  31.  &nbsp;glBegin(GL_POINTS);
  32.  
  33.  &nbsp; &nbsp;glVertex3f(x1, y1, z1);
  34.  
  35.  &nbsp;glEnd;
  36.  
  37.  
  38.  
  39.  &nbsp;glBegin(GL_QUADS);
  40.  
  41.  &nbsp; &nbsp; &nbsp;glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  42.  
  43.  &nbsp; &nbsp; &nbsp;glTexCoord2f(0,1); glVertex3f(-1,1,0);
  44.  
  45.  &nbsp; &nbsp; &nbsp;glTexCoord2f(1,1); glVertex3f(1,1,0);
  46.  
  47.  &nbsp; &nbsp; &nbsp;glTexCoord2f(1,0); glVertex3f(1,-1,0);
  48.  
  49.  &nbsp;glEnd;
  50.  
  51. end;
  52.  
  53.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Oh, Sorry. Hab' ich vorher den Fehler wohl nicht bemerkt.

Code:
  1.  
  2.  
  3.  &nbsp;a,b : pglDouble;
  4.  
  5.  &nbsp;c : pglint;
  6.  
  7.  


du hast a und b als Zeiger auf glDouble definiert. Und c als Zeiger auf glInt. Jedoch sind das nur Pointer (als Zeiger) auf die jeweiligen Daten-Typen, nicht diese Daten-Typen selber. Auserdem muss a und b ein array of glDouble sein, da du die Matrix und nicht nur einen Wert auslesen willst. Und dann hast Du noch die Adresse des Pointers selber und nicht das, wo er hinzeigen soll. Im Klartext: Du hast gnadenlos ins nichts geschrieben. Und das ist nicht gut. Probier mal folgendes:

Code:
  1.  
  2.  
  3. procedure TGLCanvasBackPicture.Draw(Width,Height : integer);
  4.  
  5. var
  6.  
  7.  &nbsp;a,b : array [0..15] of glDouble;
  8.  
  9.  &nbsp;c : glint;
  10.  
  11.  &nbsp;x1,y1,z1 : GLdouble;
  12.  
  13. begin
  14.  
  15.  &nbsp;glLoadIdentity;
  16.  
  17.  &nbsp;glBindTexture(GL_TEXTURE_2D,FBitmap);
  18.  
  19.  
  20.  
  21.  &nbsp;glGetFloatv(GL_MODELVIEW_MATRIX,@a[0]);
  22.  
  23.  &nbsp;glGetFloatv(GL_PROJECTION_MATRIX,@b[0]);
  24.  
  25.  &nbsp;glGetIntegerv(GL_VIEWPORT,@c);
  26.  
  27.  &nbsp;gluUnProject(100,200,1,@a,@b,@c,x1,y1,z1);
  28.  
  29.  &nbsp;...
  30.  
  31.  


Damit müsste das ganze funktionieren. Für nähere Infos zum Thema Pointer schau einfach mal in der Delphi-Hilfe nach!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 10, 2003 09:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Ich bekomme leider noch immer eine Exception. Ich habe es genau so gemacht wie es da oben steht. Ich weis nicht was ich falsch gemacht habe :?:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]