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

Aktuelle Zeit: So Jul 20, 2025 22:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 16:23 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Hallo Leute, macht euch gefasst auf eine absolute Anfängerfrage. Ich hatte eigentlich nicht gedacht, dass ich noch einmal so eine simple Frage stellen müsste... :oops: Hier ist die Frage:

Wie kann ich OpenGL automatisch MipMaps erzeugen lassen?

Ich habe darüber schon einiges im Forum sowie im Wiki gelesen, jedoch habe ich es noch nie angewendet (oder angewandt? :wink: ). gluBuild2DMipmaps wollte ich erst gar nicht erst benutzen, da es ja bessere, hardware-beschleunigte Alternativen gibt. Also habe ich's *eigentlich* gemacht, wie überall empfohlen:
Code:
  1. glGenTextures(1, &glTextureID);
  2. glBindTexture(GL_TEXTURE_2D, glTextureID);
  3. glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
  4. glTexImage2D(GL_TEXTURE_2D, 0, // MipMap-Level
  5.              nComponents,
  6.              SizeX,
  7.              SizeY,
  8.              0,                // Breite der Grenze
  9.              GL_RGB, GL_UNSIGNED_BYTE,
  10.              Data);

Ob ich die dritte Zeile hinschreibe oder nicht, hat allerdings keinen Einfluss auf die Tatsache, dass ich keine Mipmaps zu sehen bekomme. :? Ich habe schon einiges herumprobiert, Zeilen vertauscht, zusätzliche TexParameter übergeben... Wahrscheinlich liegt es wie so häufig an ein bis zwei Zeilen Code, die fehlen oder so.

Ihr krümmt euch jetzt wahrscheinlich alle vor Lachen, wäre nett wenn ihr mir sagen könntet, warum genau. :)

Gruß mrtrain

ps: Ihr könnt euch damit ruhig etwas Zeit lassen, ich habe heute (eigentlich) gar keine Zeit mehr zum rumprobieren.
Play-Station 2: Gab es nicht mal eine Möglichkeit, hier im Forum Syntax-Highlighting für C++ zu verwenden?


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:27, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Dieser Aufruf vor glTexImage2D sollte dein Problem lösen:
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

greetings.

ps2: jaja, gab es … Dann starb sie bei einem Forenupdate … Und bisher wird (bevor wieder alles komplett neu reingefrickelt wird) nach einer Lösung gesucht, die möglichst auch über Updates hinweg funktioniert.

_________________
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: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 16:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Den von Lord Horazont erwähnten TexParameter hast du ja schon drin. Woran machst du den fest das du keine Mipmaps hast?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 16:33 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Hmm... selbst nachdem ich meinen und deinen Post genau miteinander verglichen habe, bin ich davon überzeugt, dass das schon in meinem Code steht... :lol:


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:27, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 16:35 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
@Coolcat: "Flimmer, flimmer", macht es beim heran- und wegzoomen. Und zwar genau auf die Art und Weise, wie wenn ich meine dritte Zeile auskommentiere.


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:27, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
[Edit: ....hier stand unsinn...]

Hm, kA also es gibt keinen Unterschied dazwischen ob die dritte Zeile jetzt da ist oder nicht? Render mal ein Schachbrett. Mit Mipmaps sollten die Schachfelder in der Entfernung grau werden. Des weiteren sollten die Übergänge zwischen den Mipmaps erkennbar sein. Ohne Mipmaps gibt es mit zu nehmender Entfernung Pixelsalat.

Edit2: Um die Übergänge zwischen den Mipmaps zu sehen muss GL_MAG_FILTER und GL_MIN_FILTER auf GL_LINEAR sein und nicht etwa GL_LINEAR_MIPMAP_LINEAR.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 17:07 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
So, das Schachbrett habe ich gerendert (ich meine *hust*, ich mach natürlich Hausaufgaben :wink: ). Die Filtereinstellungen sind wie in deinem Edit2 empfohlen. Ergebnis: Pixelsalat, Geflimmer und keine interpolierte graue Masse. Ich denke, du kannst mir glauben, dass das MipMapping nicht funktioniert. :wink:


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:28, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Autsch. Die Zeile hab ich nicht gesehen :D

greetings

_________________
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: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Falls du OpenGL 3.x benutzt hat GL_GENERATE_MIPMAP keine Wirkung mehr, du musst glGenerateMipmap(GL_TEXTURE_2D) benutzen.

Umgekehrt braucht GL_GENERATE_MIPMAP mindestens OpenGL 1.4.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 17:48 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ich benutze einen OpenGL 1.1 Header, den ich manuell mit einigen Extensions erweitert habe. Woran macht der Treiber denn eigentlich fest, welche Version ich gerade verwende? Reicht es, wenn ich mit eventuell irgendwo einen Funktionszeiger einer OpenGL 3.0 Funktion hole?


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:29, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 17:57 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Bei der Erstellung eines Contexts wird automatisch die höchste unterstützte Version < 3.0 verwendet (meistens 2.1). Für einen Context >= 3.0 muss man erst einen Hilfskontext mit 2.1 erstellen und dann mit einer Extension einen 3.0-Context erstellen. Genaueres gibts hier.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 18:14 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
OK, danke für die Belehrung. Dann benutze ich also einen Kontext mit OpenGL <3.0, daher müsste alles funktionieren. Tut es leider nicht... :(

Gruß mrtrain


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:29, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 18:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Dann benutze ich also einen Kontext mit OpenGL <3.0, daher müsste alles funktionieren.

Es kommt darauf an was der Treiber kann. Wenn der Treiber z.B. nur OpenGL 1.3 kann, wirst du auch nicht mehr rauskriegen. Da hilft dann nur ein neuer Treiber.

Edit: So kannst du die GL-Version testen:
Code:
const GLubyte* pVersion = glGetString(GL_VERSION);
if (pVersion == NULL) {
    std::cout << "You can't read OpenGL-Version before OpenGL is initialized!\n";
}
m_openGLVersion = atof((const char*)pVersion);

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: So Jun 20, 2010 18:58 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ne, ne. Der Treiber (Catalyst 10.6) unterstützt OpenGL 4.0, auf 'ner Radeon HD 5670. :lol: Daran soll es nicht scheitern. Ich habe die Version auch schonmal ausgelesen, damals war es noch 3.irgendwas.


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mip-Mapping
BeitragVerfasst: Mo Jun 21, 2010 11:04 
Offline
DGL Member

Registriert: Do Mai 20, 2010 10:54
Beiträge: 10
Programmiersprache: C/C++
hier ein kleines Codebeispiel:


Code:
if(MipMapping == TRUE)
   {
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, data);
         
      glEnable(GL_TEXTURE_2D);
      glGenerateMipmap(GL_TEXTURE_2D); 
   }
   else
   {
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);   
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);   
      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, data);   
   }


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 4 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.017s | 17 Queries | GZIP : On ]