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

Aktuelle Zeit: Di Jul 08, 2025 12:54

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: Anisotropische Filterung
BeitragVerfasst: Mi Jan 23, 2008 17:08 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Wie hier vorgeschlagen habe ich mich daran versucht Anisotropische Filterung zu verwenden. Dabei gehe ich so vor:
Nach der Initialisierung OpenGLs:
Code:
  1. var maxAnisotropy: Extended;
  2. ...
  3.  
  4. if GL_EXT_texture_filter_anisotropic then
  5.     glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, @maxAnisotropy);
Und dann am Ende jedes Rendervorgangs:
Code:
  1. if GL_EXT_texture_filter_anisotropic then
  2.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy);
Allerdings kann ich keine Unterschiede ob mit oder ohne Filterung in der Darstellung erkennen. Wenn ich nach dem Abfragen von maxAnisotropy selbiges mit einem Showmessage ausgebe steht die Variable auf Null - ich schätze das ist nich normal.^^

Was mache ich denn falsch?


// Edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 18:07 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Wo aktivierst du da die Filterung?
Du lässt dir am Anfang des Renderns den Wert der Filterung geben und setzt sie am Ende wieder zurück. Da wird doch nie was aktiviert oder übersehe ich etwas?

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dieser Filterung muss für JEDE Textur extra eingestellt werden. Und dazu muss sie außerdem gebunden sein.

Extended und glGetFloatv? Float ist normal ein Single. Wenn der Wert in ein Extended geschrieben wird kann alles mögliche passieren. Allerdings ist die Filterung nur Ganzzahlig und deswegen kannst du da auch glGetIntegerv. Wenn du mit den typen probleme hast kannst du auch als typ. TGLfloat / TGLuint / TGLint etc benutzen. Das sind Typen die wir im Header schon definiert haben. Dann passiert so etwas nicht mehr so leicht.


PS: Bitte benutz die Pascaltags.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 19:10 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Aja, ok, das mit den Typen hab ich behoben, jetzt hat sie den Wert 16. Allerdings scheint die Filderung auch zu wirken, wenn ich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy); am Ende des Renderns aufrufe?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Der Wert für die Anisotrope Filterung bleibt doch erhalten, bis du einen anderen setzt.
So gesehen wirkt er nicht auf das erste gerenderte Bild aber ab diesem wirkt er, da am ende des renderns dann die Anisotropische Filterung aktiviert ist. Du musst sie also im prinzip nur einmal vor dem Rendern und danach nie wieder aktivieren, am besten direkt nach dem Laden der Texturen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 19:30 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Ginge das auch vor dem Laden der Texturen - da ich gl3ds als modelloader verwende weiß ich nicht genau wann der die läd..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 19:35 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Ich glaube Lossy eX hatte Recht, ich merke grade dass sich das ganze nur auf eine Textur auswirkt. Da muss ich mich dann wohl nochmal mit gl3ds beschäftigen...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 20:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Solche Texturparameter werden immer auf die aktuell gebundene Textur angewandt. Daher kannst du nach dem Laden des Modells einfach alle Materialen deines 3D-Modells durchlaufen, dessen Textur (wenn es eine hat) binden und dann den anisotropen Filter setzen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 20:52 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Das hab ich jetzt nicht genau verstanden. Nachdem also ein TAll3dsMesh vollständig erzeugt ist dessen Materiale durchgehen und glbindtexture aufrufen, sowie die texturparameter setzen.
Also vermutlich so: Schleife( ... glBindTexture(GL_TEXTURE_2D, Mesh.Material.TextureID); TexParamter; ) Richtig?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 23:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ja, so ist das richtig. Durch die Texture-IDs loopen, binden, Anisotropie setzen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 26, 2008 15:37 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Hm.. Irgendwie scheint das nicht zu funktionieren. Egal bei welchem meiner Modelle ich welche TexturID ausgeben lasse ist die immer 3553. Dementsprechend sieht man auch vom Filter nix - wie kann ich denn eine mit gl3ds bereits geladene Textur nochmal binden?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 26, 2008 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Du musst alle IDs im Array "Material" des Hauptobjektes durchgehn, also TAll3DSMesh.Material, evtl. hast du fälschlicherweise die Material-IDs der einzelnen Untermeshes genommen, das ist aber nicht die Textur-ID der Materialien.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 27, 2008 08:09 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Also zur Zeit mache ich das so:
Code:
  1.   for k := 0 to BodyModel.NumMaterials - 1 do
  2.   begin
  3.     glBindTexture(GL_TEXTURE_2D, BodyModel.Material[k].TextureID);
  4.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy);
  5.   end;
Das müsste doch richtig sein, oder?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 01, 2008 08:39 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
*push*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 01, 2008 10:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Verändert sich denn im Bild was? Zur Not schau einfach mal zur Laufzeit in die Variablen oder in den Quellen der gl3ds nach wie diese Werte befüllt werden. Also ob es tatsächlich die Textur ID ist. Denn ich benutze die gl3ds nicht, weil ich keinen Bedarf an Models habe. Also kann ich nicht sagen ob das richtig ist.

PS: Im übrigen immer das Maximum zu setzen ist nicht so gut. Denn das kann durchaus auch auf die Performance gehen. Deswegen so etwas idealerweise durch den Benutzer einstellbar. Bzw wenn die Filterung nicht verfügbar ist darfst du sie natürlich auch nicht setzen.


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 1 Gast


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.017s | 16 Queries | GZIP : On ]