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

Aktuelle Zeit: Fr Jul 18, 2025 21:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Sep 27, 2006 14:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi Leute,
Ich habe ein Problem bei der Darstellung meiner Heightmap.
Zuerst hatte ich die HMap in einer DisplayListe gerendert (mit Multitexturing für die Level-of-Detail-Textur).
Jedoch ist die Auflösung der LoD-Textur recht hoch (256x256), und das zieht ordentlich die FPS runter.
Da ich die hochauflösende LoD-Textur nicht mit einer niedrig-Aufgelösten ersetzen will, dachte ich man müsste ja
nur im nahbereich des Spielers die hochaufgelöste Textur nehmen und für weiter weg kann man ja die niedrig-Aufgelöste nehmen.
Also fällt ja die DisplayListen Methode weg.
Bleibt nur noch die Methode über Vertex Arrays.
Nachteil ist da aber, dass ich keine Möglichkeit habe die Multitexture-Koordinaten in ein Array zu packen.
Dadurch steigen die FPS nicht wirklich höher (sind aber kostanter) als das mit der DListe und überall die hochauflösende Textur der Fall war.
Ich muss halt nach jedem Aufruf von glArrayElement die MultiTextureKoord. setzen und kann nicht über einen Aufruf die HMap rendern.

Gibt es noch andere möglichkeiten oder geht das mit dem Multitexturing bei VertexArrays doch irgendwie?

Mfg,
MatReno

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 14:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Natürlich geht das. Sonst wäre diese Technik ja nicht so weit verbreitet sondern schon längst ausgestorben.

Ich denke mal du benutzt glInterleavedArrays? Schau mal in diese Thema. Das sollte deine Fragen erklären.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 10:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Vielen Dank.
Ich werde mir das mal anschauen.
Komisch, als ich das Forum vorher durchsucht habe, habe ich nichts zu diesem thema gefunden. :?

Noch mal kurz zum Verständnis:
Es gibt also für jede Texture-Einheit die Funktion glTexCoordPointer(...) ?
Das heisst: Jede Textur-Einheit speichert ihre eigenen TextureCoordinaten Arrays :?:

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 10:04 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
MatReno hat geschrieben:
Das heisst: Jede Textur-Einheit speichert ihre eigenen TextureCoordinaten Arrays :?:

Ja, dich hindert allerdings nichts daran, wenn dies notwendig sein sollte, das selbe Array mehrfach zu übergeben ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 12:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
MatReno hat geschrieben:
Komisch, als ich das Forum vorher durchsucht habe, habe ich nichts zu diesem thema gefunden. :?

Beim Suchen hilft einem oftmals, wenn man ein bisschen weiß wonach man suchen muss. Nach glVertexPointer gesucht offenbahrt so einiges. Aber das muss man erst mal wissen. Und dafür gibts ja genügend Ansprechpartner. ;-)

Aber Nico hat da vollkommen recht. Das System ist so aufgebaut, dass es extrem extrem flexibel ist. Um die Sache noch ein bisschen weiter auszuholen.

Rein Theoretisch könntest du es auch so machen, dass du zu erst alle Vertexdaten hast, dann alle Farbdaten, TexturCoordinaten etc. Und nicht so wie es meistens angewendet wird die Daten der einzelnen Vertices zusammgehalten.

Wenn du es geschickt anstellst kannst du auch bei den Texturcoordinaten den Vertexbuffer mit benutzen. Du musst dafür Sorgen, dass X, Y der Vertexdaten sich im bereich zwischen 0 und 1 bewegen und Z die Höhe des Vertex ist. Musst du vor dem Zeichnen allerdings rotieren. Und dann könntest du bei den Texturcoordinaten zum Beispiel sagen, dass diese die X und Y Komponente der Vertexdaten benutzen und dann eine Komponente platz lassen sollen. Um das mal ganz heiß zu spinnen. Also Möglich ist so ziemlich alles was du dir in deinen Träumen vorstellen kann. Aber ich glaube ich schweife ab. :twisted:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Ich bekomm es nicht zum laufen. :(
Irgendwie werden für beide Texturen die 2-ten-TexturCoordinaten(*) benutzt,
obwohl die NUR für die 2. Texture-Unit (GL_TEXTURE1) gelten sollten...

Hier der Ausschnitt aus der Render-Procedure:

Code:
  1.   // Texture0 init
  2.   glActiveTexture(GL_TEXTURE0);
  3.   glEnable(GL_TEXTURE_2D);
  4.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  5.  
  6.   FTexture.Bind;
  7.  
  8.   glVertexPointer(3, GL_FLOAT, 0, FVertexArray);
  9.   glNormalPointer(GL_FLOAT, 0, FNormalArray);
  10.   glTexCoordPointer(2, GL_FLOAT, 0, FTexCoordArray);
  11.  
  12.   glEnableClientState(GL_VERTEX_ARRAY);
  13.   glEnableClientState(GL_NORMAL_ARRAY);
  14.   glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  15.  
  16.   // Texture1 init
  17.   glActiveTexture(GL_TEXTURE1);
  18.   glEnable(GL_TEXTURE_2D);
  19.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  20.  
  21.   glTexCoordPointer(2, GL_FLOAT, 0, FTexCoordArray2); // * diese hier
  22.   glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  23.  
  24.   For z:=0 to FSize-1 do
  25.     For x:=0 to FSize-1 do begin
  26.  
  27.       // Detail-Textur
  28.       If (x > xPos-4) And (x < xPos+4) And (z > zPos-4) And (z < zPos+4)
  29.         Then FLoDTexture.Bind
  30.         Else FLoDTexture2.Bind;
  31.  
  32.  
  33.       glBegin(GL_TRIANGLES);
  34.         glArrayElement(x   + z    *(FSize+1));
  35.         glArrayElement(x   + (z+1)*(FSize+1));
  36.         glArrayElement(x+1 + z    *(FSize+1));
  37.  
  38.         glArrayElement(x   + (z+1)*(FSize+1));
  39.         glArrayElement(x+1 + (z+1)*(FSize+1));
  40.         glArrayElement(x+1 + z    *(FSize+1));
  41.       glEnd;
  42.     End;
  43.  
  44.   glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  45.  
  46.   glDisable(GL_TEXTURE_2D);
  47.   glActiveTexture(GL_TEXTURE0);
  48.  
  49.   glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  50.   glDisableClientState(GL_NORMAL_ARRAY);
  51.   glDisableClientState(GL_VERTEX_ARRAY);


Was mache ich denn falsch ??

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 19:16 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Kann sein dass man da noch glClientActiveTexture statt glActiveTexture nehmen muß.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 29, 2006 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
@LarsMiddendorf:
Das war es. Vielen Dank.
Jetzt funktioniert es so, wie es soll. :wink:

_________________
http://texelviews.delphigl.com


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


Wer ist online?

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