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

Aktuelle Zeit: Mi Jul 16, 2025 05:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: displaylisten
BeitragVerfasst: Di Okt 14, 2003 21:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Servus,
eine Frage kann man in Displaylisten auch mit Handelsüblichen Delphi Schleifen Objekte anlegen....?
Ein hilfreicher Rat wär nett bis die Tage.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 14, 2003 21:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ja.In der Displaylisten werden dann die direkten Vertexdaten gespeichert.Alles was du da in der DL programmiertechnisch machst spielt keine Rolle.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 17, 2003 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Kooles ding besten dank Satan sein Sohn,
Also kann ich auch gluSphere() in einer Displayliste zeichnen lassen. Oder Beispielsweise eine Kugel mithilfe der trigonometrischen Funktionen und den Handelsüblichen Kontrollstrukturen erstellen.?
peace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 17, 2003 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie ich bereits gesagt hab werden in der Displaylisten die Vertexdaten absolut gespeichert.Es spielt also keine Rolle wie du diese innerhalb der DL erstellst.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 17, 2003 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mal eine Sache zum näheren Verständniss.
Eine Displayliste ist eine reine Sache von OpenGL und hat nichts mit der Programmiersprache zu tun. Somit werden NUR Befehle von OpenGL (glBegin, glEnd, glColor, glVertex, etc.) dort abgelegt. Alles was du sonst nebenher tust ist die Sache des Entwicklers. Also deine.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 05, 2003 16:36 
Offline
DGL Member

Registriert: Mo Nov 03, 2003 20:23
Beiträge: 66
Ich habe auch noch ne Frage betreffend gl-listen...
Kann es sein, dass diese Liste nicht immer die Texturcoordinaten / Festlegungen für Multitexturing berücksichtigt ?

Wenn ich ARB_texblub_1 und 2 jeweils festlege, habe ich auf meine Gef2 zuhause mit alten detonatortreibern schön die

Texturen aufeinander. Jetzt hab ich die neuen installiert und nichts geht mehr. Er nimmt auf einmal die falschen Texturen

und blendet Diese auch nicht mehr übereinander.

Setze ich die Texturen ausserhalb der Displaylist geht alles super. Was mache ich evtl. falsch ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 05, 2003 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Texturen können eigentlich problemlos in eine Displayliste mithinein kompiliert werden. Du machst aber evtl. den Fehler und bindest deine Texturen zwischen einem glBegin...glEnd-Block, was laut GL-Spezifikation nicht erlaubt ist, aber bes. auf älteren NVidia-Treibern durchaus funktioniert. Überprüf das also mal und setz deine Texturbindings dann ggf. ausserhalb der glBegin...glEnd-Blöcke.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 05, 2003 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
An sich werden in Displaylisten sämtliche OpenGL Befehle mitprotokolliert - auch wenn reine Vertexdaten inzwischen flexibler mit VBOs übergeben werden können, sind Displaylisten immer noch praktisch:
ein gut programmierter OpenGL Treiber könnte nämlich verschiedene Kommandos in Displaylisten zusammenfassen, sodass im Endeffekt weniger Statechanges herauskommen, als wenn man jedes Kommando separat aufruft.

Vielleicht postest du einfach mal einen Link auf den entsprechenden Source als zip, dann könnte man eher Klarheit in die Sache bringen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 05, 2003 16:55 
Offline
DGL Member

Registriert: Mo Nov 03, 2003 20:23
Beiträge: 66
sorry, ich kann das nicht anders ins netz stellen :oops:

Code:
  1.  
  2.          glActiveTextureARB(GL_TEXTURE0_ARB);
  3.          glEnable(GL_TEXTURE_2D);
  4.          glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
  5.          glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
  6.  
  7.          glActiveTextureARB(GL_TEXTURE1_ARB);
  8.          glEnable(GL_TEXTURE_2D);
  9.          glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
  10.          glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MULT);
  11.  
  12.         For vx := 0 to 9 do for vy := 0 to 9 do
  13.         Begin
  14.          Map[vx, vy].Tile := glGenLists(1);
  15.          glNewList(Map[vx, vy].Tile,GL_COMPILE);
  16.  
  17.          glActiveTextureARB(GL_TEXTURE0_ARB);
  18.          glBindTexture(GL_TEXTURE_2D, texture[0]);
  19.  
  20.          glActiveTextureARB(GL_TEXTURE1_ARB);
  21.          glBindTexture(GL_TEXTURE_2D, texture[10]);
  22.  
  23.      glBegin(GL_QUADS);
  24.  
  25.          For x := 1 to mapsize do
  26.          For y := 1 to mapsize do
  27.          Begin
  28.            glNormal3f( 0.0, 1.0, 0.0);
  29.            glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1/mapsize*x - 1/mapsize + 1/mapsize*0.0, 1/mapsize*y - 1/mapsize*0.0);
  30.              glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1/10*vx + 0.1/mapsize*x - 0.1/mapsize + 0.1/mapsize*0.0, 1/10*vy + 0.1/mapsize*y - 0.1/mapsize*0.0);
  31.            glVertex3f(0.0   + x*polysize,  -10.0+heightmap[x-1 + mapsize*vx, y   + mapsize*vy].r*mapheight, polysize + y*polysize);
  32.            glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1/mapsize*x - 1/mapsize + 1/mapsize*0.0, 1/mapsize*y - 1/mapsize*1.0);
  33.              glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1/10*vx + 0.1/mapsize*x - 0.1/mapsize + 0.1/mapsize*0.0, 1/10*vy + 0.1/mapsize*y - 0.1/mapsize*1.0);
  34.            glVertex3f(0.0   + x*polysize,  -10.0+heightmap[x-1 + mapsize*vx, y-1 + mapsize*vy].r*mapheight, 0.0   + y*polysize);
  35.            glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1/mapsize*x - 1/mapsize + 1/mapsize*1.0, 1/mapsize*y - 1/mapsize*1.0);
  36.              glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1/10*vx + 0.1/mapsize*x - 0.1/mapsize + 0.1/mapsize*1.0, 1/10*vy + 0.1/mapsize*y - 0.1/mapsize*1.0);
  37.            glVertex3f(polysize + x*polysize,  -10.0+heightmap[x   + mapsize*vx, y-1 + mapsize*vy].r*mapheight, 0.0   + y*polysize);
  38.            glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1/mapsize*x - 1/mapsize + 1/mapsize*1.0, 1/mapsize*y - 1/mapsize*0.0);
  39.              glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1/10*vx + 0.1/mapsize*x - 0.1/mapsize + 0.1/mapsize*1.0, 1/10*vy + 0.1/mapsize*y - 0.1/mapsize*0.0);
  40.            glVertex3f(polysize + x*polysize,  -10.0+heightmap[x   + mapsize*vx, y   + mapsize*vy].r*mapheight, polysize + y*polysize);
  41.          End;
  42.      glEnd();
  43.  
  44.          glActiveTextureARB(GL_TEXTURE0_ARB);
  45.  


der code sieht schon wieder anders aus... aber es geht ja nicht darum


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 05, 2003 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Hmm, irgendwie wundert mich, dass das überhaupt mal funktioniert hat - es fehlt nämlich nach glNewList das zugehörige glEndList - und OpenGL kompiliert munter alles in die erste Displayliste hinein, da OpenGL logischerweise nicht wissen kann, was in deinem Pascalcode steht (normale begin end Blöcke haben für Displaylisten keinerlei Bedeutung).

Wenn du nach dem letzten glActiveTextureARB noch ein glEndList dranhängst sollte es funzen und du kannst mit Map[x, y].Tile den entsprechenden Abschnitt rendern (auch wenn es etwas redundant ist in jeder Displayliste wieder die selben Texturen festzulegen).

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 05, 2003 17:28 
Offline
DGL Member

Registriert: Mo Nov 03, 2003 20:23
Beiträge: 66
ich habe den unteren teil abgeschnitten.... da kam noch ein endlist!

das immer die gleiche textur genommen wird ist nur zum testen geschehen!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Dez 13, 2003 22:50 
Offline
DGL Member

Registriert: Sa Dez 13, 2003 22:48
Beiträge: 5
hi,

ich hab ein Problem mit OpenGL und zwar will ich eine DisplayListe generieren und sie mir dann ausgeben lassen.
hier mal der source:
Code:
Code:
  1.  
  2. var ground:gluint;
  3. ...
  4. procedure mapInit(sourceHighs:string;sourcetex:Pansichar;r,g,b:Byte);
  5. var Bitmaps,Bitmaptex: TBitmap;
  6.     INI:TStringlist;
  7.     xf,yf: Integer;
  8.     z1,z2,z3,z4:double;
  9.     p: ^PixArray;
  10. begin
  11.   glenable(gl_texture_2d); //Texturen aktivieren
  12.   InitTextures(sourcetex,tex);
  13.   Bitmaps:=TBitmap.Create;
  14.   Bitmaps.LoadFromFile(sourcehighs);
  15.   ground:=glgenlists(1);
  16.   glnewlist(ground,gl_compile);
  17.   for xf:=0 to Bitmaps.Width-2 do
  18.   for Yf:=0 to Bitmaps.Height-2 do
  19.   begin
  20.     p:=Bitmaps.ScanLine[yf];
  21.     inc(p,xf);
  22.     z1:=(p^[3]/5);
  23.     inc(p);
  24.     z2:=(p^[3]/5);
  25.     p:=Bitmaps.ScanLine[yf+1];
  26.     inc(p,xf);
  27.     z4:=(p^[3]/5);
  28.     inc(p);
  29.     z3:=(p^[3]/5);
  30.     glcolor3f(r/255,g/255,b/255);
  31.     glBindTexture(GL_TEXTURE_2D, tex);
  32.     glBegin(gl_Quads);
  33.     gltexcoord2f(0,0);
  34.     glVertex3d(xf,z1,yf);
  35.     gltexcoord2f(1,0);
  36.     glVertex3d(xf+1,z2,yf);
  37.     gltexcoord2f(1,1);
  38.     glVertex3d(xf+1,z3,yf+1);
  39.     gltexcoord2f(0,1);
  40.     glVertex3d(xf,z4,yf+1);
  41.     glend;
  42.   end;
  43.  
  44.   glendlist;
  45. end;
  46. ...
  47. procedure TForm1.Render(X,Y,Z:glfloat;wH,wV:single);
  48. begin
  49.   Kamera(x,y,z,wH,wV);
  50.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  51.   glLoadIdentity;
  52.   glEnable(GL_DEPTH_TEST); //Tiefenkontrolle
  53.   glcalllist(ground);
  54.   swapbuffers(dc);
  55. end;
  56. ...
  57. procedure TForm1.Button1Click(Sender: TObject);
  58. begin
  59.   mapinit('map.bmp','corni.bmp',255,255,255);
  60.   if Edit1.Text<>'' then MapX:=StrtoFloat(Edit1.Text);
  61.   if Edit2.Text<>'' then MapY:=StrtoFloat(Edit2.Text);
  62.   if Edit3.Text<>'' then MapZ:=StrToFloat(Edit3.Text);
  63.   if Edit4.Text<>'' then WinkelKH:=StrToFloat(Edit4.Text);
  64.   if Edit5.text<>'' then WinkelKV:=StrtoFloat(Edit5.Text);
  65. end;
  66.  




falls einer ne Idee hat was falsch ist kann er sie hier posten :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 14, 2003 11:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Prüf mal nach,

ob der Code direkt (also ohne DL) überhaupt funktioniert

ob zu dem Zeitpunkt, an dem du die Displayliste aufrufst 2D-Texturen aktiviert sind.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 14, 2003 12:31 
Offline
DGL Member

Registriert: Sa Dez 13, 2003 22:48
Beiträge: 5
also wenn ich die liste weglasse dann klappt eigentlich alles. áuch die texturen werden dann erzeugt. aber sobald ich versuche die listen einzubinden zeigt er mi nix an... :/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 14, 2003 15:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Dann stell sicher das du zum Zeitpunkt der DisplayListen-Erstellung auch einen gültigen Renderkontext hast und dieser auch aktiv ist, da diese ja ansonsten nicht erstellt werden kann. Am besten schaust du nach ob dir glGenLists auch ne gültige ListenID liefert (>0) und prüfst ob in deiner DisplayListe keine GL-Fehler auftreten. Das geht am besten indem du die DL nach ihrer Erstellung (während der Erstellung werden keine Fehler ausgegeben) einmal ausführst und direkt danach den GL-Fehlerstatus via glGetError abfrägst. Wenn dieser <> GL_NO_ERROR, dann machst du etwas ungültiges in deiner Displayliste.

P.S. : Warum verwendest du glVertex3d?Singlepräzision voa glVertex3f ist mehr als ausreichend.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


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 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.010s | 14 Queries | GZIP : On ]