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

Aktuelle Zeit: Mi Jul 16, 2025 16:41

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



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 05, 2004 22:51 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Da hatte ich mich schon so grefreut das opengl so einfach geht und jetzt kommt so ein Code den ich nicht kapiere :( und bestimmt nih kapieren werde. hm.....................

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 05, 2004 22:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
*g* das hatte eben auch mehr mit Delphi zu tun, mit der Texture.pas geht das normalerweiße recht einfach.

Edit: Was heißt mehr mit Delphi ^^ eher weniger mit OGL ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 05, 2004 23:07 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Im Prinzip werden die Daten aus dem TBitmap über die Eigenschaft Scanline ausgelesen und in ein weiteres Array kopiert das dann OpenGL übergeben wird. Mit gluBuild2DMipMaps übergibt man OpenGL dann die Texturedaten.
Statt die Farbwerte blau und rot zu vertauschen kann man natürlich auch GL_BGRA als Textureformat angeben. Das wäre natürlich besser:

Code:
  1. procedure LoadTextureFromBitmap(bmp:TBitmap);
  2. var
  3.  data:PByteArray;
  4.  i,j,w:integer;
  5.  b:PByteArray;
  6. begin
  7. bmp.PixelFormat:=pf32bit;
  8. getmem(data,bmp.width*bmp.height*4);
  9. w:=bmp.Width;
  10. for i:=0 to bmp.Height-1 do
  11. begin
  12.  b:=bmp.ScanLine[i];
  13.  move(b^,data^[i*w*4],w*4);
  14. end;
  15. gltexparameteri(GL_TEXTURE_2D,GL_Texture_min_filter,GL_LINEAR_MIPMAP_LINEAR);
  16. gltexparameteri(GL_TEXTURE_2D,GL_Texture_mag_filter,GL_LINEAR);
  17. gluBuild2DMipmaps(GL_TEXTURE_2D,gl_rgba8,bmp.width,bmp.Height,GL_BGRA,gl_unsigned_byte,data);
  18. FreeMem(data);
  19. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 06, 2004 01:52 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Hi,

hm... also dein Code funktioniert nicht. Naja...Habe aber immer irgendwie noch probleme bei den Tutorial. Später soll man so ein Beispiel proggen also eine große Pyramide in der Mitte dahinter eine kleine und auf beiden Seiten welche. Die kleine soll sich immer nach oben und unten bewegen. Wenn die kleine Pyramide oben die Spitze der großes Pyramide trift soll die Große Pyramide Rot aufblinken. Außerdem sollen die Halb transparent angezeigt werden. Und der Texture soll sich bewegen. Und die beiden außeren sollen sich um die Große Pyramide bewegen. Naja, wenn ich jetzt die Texture weg lasse funktioniert alles. Aber wenn der Texture da ist. Sieht man nur die kleine Pyramide. Hier mal der Code:

Code:
  1.  
  2.   glClearColor(0,0,0,0);
  3.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  4.   glLoadIdentity;
  5.   LoadTextureFromBitmap (Bit);
  6.   glTranslate(0,0,-14);
  7.   x:=x+1;
  8.   outrot:=outrot+2;
  9.   glPushMatrix;
  10.   glTranslate(0,sin(x/50),0);
  11.   glRotate(x,0,1,0);
  12.   glMatrixMode(GL_TEXTURE);
  13.   glLoadIdentity;
  14.   glColor3f(1,1,1);
  15.   glTranslate(0,-(x/100),0);
  16.   glMatrixMode(GL_MODELVIEW);
  17.   drawpyramid;
  18.   glPopMatrix;
  19.  
  20.   glEnable(GL_BLEND);
  21.   glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  22.   glDisable(GL_DEPTH_TEST);
  23.  
  24.   glPushMatrix;
  25.   glRotate(x,0,1,0);
  26.   glScale(2,2,2);
  27.   IF Sin(x/50)<0.9 THEN glColor4f(1,1,1,0.4)
  28.   ELSE glColor4f(1,0.3,0.3,0.5);
  29.   DrawPyramid;
  30.   glPopMatrix;
  31.  
  32.   glPushMatrix;
  33.   glColor4f(0.0,1,0.0,0.8);
  34.   glRotate(outrot,0,1,0);
  35.   glTranslate(5,0,0);
  36.   glRotate(outRot,-0.5,1,0);
  37.   DrawPyramid;
  38.   glPopMatrix;
  39.  
  40.   glPushMatrix;
  41.   glColor4f(0.0,0.0,1,0.8);
  42.   glRotate(outrot,0,1,0);
  43.   glTranslate(-5,0,0);
  44.   glRotate(OutRot,0.5,1,0);
  45.   DrawPyramid;
  46.   glPopMatrix;
  47.   SwapBuffers(form1.Canvas.Handle);
  48.   glDisable(GL_BLEND);
  49.   glEnable(GL_DEPTH_TEST);
  50.  

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 06, 2004 12:58 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Lars Code funktioniert schon.

Vielleicht fängst du mal mit einem einfachen, texturierten Quad an. Achte darauf, GL_TEXTURE2D auch enabled ist, und dass du Texturkoordinaten sendest.

Wenn das dann klappt, kannst du dann mit etwas Komplexeren weitermachen.

Um beim konkreten Problem weiterzuhelfen: nachdem die Pyramide durchsichtig sein soll, ist wahrscheinlich Alphablending aktiviert - wenn dein Bitmap gar keinen Alphakanal hat, du diese aber als RGBA Textur verwendest, sind die Alphawerte alle auf den selben Wert gesetzt, womit du dir u.U. die gesamte Textur (und damit die äußere Pyramide) erfolgreich ausmaskierst...

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 06, 2004 14:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mars meint mit GL_TEXTURE2D aber GL_TEXTURE_2D ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 06, 2004 19:08 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Hm...also ich habe jetzt mal alle Tutorials hier durchgelesen, irgendwie kapiere ich die nicht. Am anfang gehts ja noch später reden die dann über die und die pas datei und die dll die ich garnicht habe.... also irgendwie etwas undeutlich. Das andere problem ist bereits gelöst. Wo ich die meisten Probleme habe ist das mit dem Texturen laden. Also jetzt kann ich ja nur Bitmaps laden. Aber wie JPG? Und wie kann ich in OnShow mehere Texturen laden? Also Z.b.

{Stein Texture}
Quad
{Wand Texture}
Quad
{bla Texture}
Quad

Danke im vorraus. Und überhaupt Danke schon für eure Hilfe :)

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 06, 2004 19:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ja hat denn nicht zwei Posts weiter oben Lars gezeigt, wie du aus einem TBitmap eine OpenGL Textur machst?
Du kannst ja jeden TImage Abkömmling in einem TBitmap darstellen... (wenn du dir dazu Lischkes GraphicEx runterlädst, hast du alles an Formaten, was das Herz begehrt).

Die Texturen bindet man normalerweise an Texturobjekte, die dann zum gegebenen Zeitpunkt aktiviert, schau dir dazu die Doku zu glGenTextures und glBindTexture an, schaut dann also so aus:

glBindTexture(BodenTextur);
...
Boden zeichnen
...
glBindTexture(WandTextur);
...
Wand zeichnen
...

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 06, 2004 20:03 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Achso, jetzt kapiere ich es :)

Danke an allen.

MFG
Sven!

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 07, 2004 09:35 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Hm... aber doch noch probleme mit dem Texturen.
Vorne die wand und die Rechte sind die Texturen falschrum bzw. so komisch habe eigendlich bei der wand oben und unten so ein streifen der läuft aber bei der rechten wand vertical runter....

Hatt jemand eine idee? danke im vorraus.

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 07, 2004 10:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Du kannst doch bei den TexturKoordinaten alles einstellen... da kannst du die textur auch sozusagen drehen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 07, 2004 11:10 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
~->GEF<-~ Adler hat geschrieben:
Du kannst doch bei den TexturKoordinaten alles einstellen... da kannst du die textur auch sozusagen drehen


Welche Koordinaten meinste?

glTexCoord(0, 0); <-- Die?

MFG
Sven!

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 07, 2004 11:11 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
DANKE es geht :)

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 07, 2004 11:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Genau die ;)


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 3 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.023s | 15 Queries | GZIP : On ]