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

Aktuelle Zeit: Fr Jul 18, 2025 11:21

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Mo Jul 12, 2010 17:22 
Offline
DGL Member

Registriert: Mo Jul 12, 2010 13:19
Beiträge: 6
Also zunächst: Ich bin blutiger Anfänger was OpenGL angeht und möchte mir ein Textur-Viewer der mehrere Texturen gleichzeitig darstellt zur Arbeitserleichterung basteln. Das klappt alles ganz gut ABER leider nur mit quadratischen Texturen.
Alle Texturen sind POT. Aber sobald die maße beispielsweise 512x256 sind sieht das gerenderte Ergebnis furchtbar aus. Im Ahnhang findet Ihr ein Vergleich Original/MeinProgramm.

Hier mal der Codeschnipsel den ich zum Laden/Rendern benutze:

Code:
.
.
procedure TForm1.TexturAnzeigen(Sender: TObject);
var
  Pfad        : string;
  i             : byte;
  Texture   : TGLuint;
begin
  for i:= 1 to 8 do
  begin
    DeactivateRenderingContext;
    DestroyRenderingContext (RC[i]);
    ReleaseDC(TexturPanel[i].Handle, DC[i]);

    DC[i]:=GetDC(TexturPanel[i].Handle);
    RC[i]:=CreateRenderingContext(DC[i],
                             [opDoubleBuffered],
                             32,
                             24,
                             0,
                             0,
                             0,
                             0);
    ActivateRenderingContext(DC[i], RC[i]);

    If FileExists(Ordnerpfad[i]+OrdnerInhalt[n]) = true then
    begin
      glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
      LoadTexture(Ordnerpfad[i]+OrdnerInhalt[n], Texture, False);
      glEnable(GL_TEXTURE_2D);
      glBindTexture(GL_Texture_2D, Texture);
      glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_WIDTH,@W);
      glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_HEIGHT,@H);
      glViewport(0,0,256,256);
      glBegin(GL_QUADS);
        glTexCoord2i(0,0); glVertex2i(-1,1);
        glTexCoord2i(0,1); glVertex2i(-1,-1);
        glTexCoord2i(1,1); glVertex2i(1,-1);
        glTexCoord2i(1,0); glVertex2i(1,1);
      glEnd;
      SwapBuffers(DC[i]);
    end
.
.


Ich hab mal unwichtige sachen rausgelassen und Ihn auf das wesentliche reduziert. Durch Googeln bzw. Foren abklappern war leider nichts herauszufinden. Hab schon alles Mögliche probiert,bin aber mittlerweile ziemlich gefrustet. Und vergebt mir den schlechten Code ich mach das ganze erst seit 3 Tagen . Danke für die Hilfe.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 12, 2010 17:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Welche OpenGL-Version verwendest du?
Wenn die OpenGL-Version nicht mindestens 2.0 ist musst du schauen ob die Extension GL_ARB_texture_non_power_of_two verfügbar ist. Wenn du weder OpenGL 2.0+ noch die Extension hast dann kann deine Grafikarte bzw. der Treiber keine NPOT-Texturen. Da hilft dann nur die Texturen entsprechend zu vergrößern oder zu verkleinern.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 12, 2010 18:47 
Offline
DGL Member

Registriert: Mo Jul 12, 2010 13:19
Beiträge: 6
Also ich hab mal geschaut. Bei mir ist OpenGL 2.1 installiert.

Danke erstmal für die schnelle Antwort. Nur eine Frage: Alle Texturen sind bei mir POT nur halt nicht quadratisch. Also das Problem tritt wirklich nur auf wenn Höhe <> Breite ist. Kann das trotzdem damit zusammenhängen?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 12, 2010 19:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Was sagt den glGetString(GL_VERSION) ?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 12, 2010 21:10 
Offline
DGL Member

Registriert: Mo Jul 12, 2010 13:19
Beiträge: 6
glGetString(GL_Version) gibt "2.1.8494 Release" zurück.

und schönen Dank nochmal. Achso und falls es was zur Sache tut, ich schreibsel mit Delphi 5.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 08:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich sags ja nur ungern aber ich denke nicht, dass das etwas mit NPOT zu tun hat. Denn sonst würdest du eigentlich eine weiße Fläche sehen. Das ist aber nicht der Fall. Sondern die Daten sind einfach nur schrott. Außerdem sind 512x256 vollkommen gültige Texturgrößen. Selbst mit OpenGL 1.2 ist das okay.

Ich vermute mal sehr stark, dass die Texturen eventuell MipMaps besitzen und eventuell auch eine spezielle Komprimierung? DDS ist eine Art Container für Formate. Dabei ist es problemlos möglich irgendwelche Sonderformate einzuhängen. Die glBitmap kann nur DXT1, 3, 5 und unkomprimierte RGB(A) in verschiedenen Kanaltiefen und zusammensetzungen. Es kann hier natürlich sein, dass für die Texturen jetzt eine Kompression verwendet wurde die für die glBitmap lesbar aussieht oder einfach ein entsprechendes Flag nicht ausgewertet wurde. Dann versucht die glBitmap das Format entsprechend dem Angenommenen einzulesen. Und dabei kann unter anderem dann auch so etwas passieren. Eigentlich sollte in solch einem Fall immer ein Fehler ausgelöst werden.

Da kann ich dich nur bitten, dass du mal das originale DDS anhängst. Dann kann ich mir das mal am lebenden Objekt anschauen. Allerdings kann ich dir schon jetzt sagen, dass es nicht in meinem Interesse liegt jegliches von dds mögliche Format zu unterstützen. Dann wäre so ein Loader eine Aufgabe bis ans Lebensende.

PS: Ich persönlich kann dir auch empfehlen, dass du nicht die Methode LoadTexture benutzt sondern direkt die Klasse TglBitmap2D. Damit hast du nach dem Laden noch solche Informationen wie Größe/Breite etc direkt noch. Auch würde beim Löschen der Instanz die Textur freigegeben werden. Was du sonst immer per Hand berücksichtigen musst.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 08:40 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hey Lossay, ich kenn die Codestruktur vom glBitmap jetzt nicht, aber kannst du es nicht ermöglichen, dass man - wenns wirklich nicht anders geht - einen eigenen Loader schreibt und denn in deine Klasse einhängt? Ist sowas prinzipiell möglich? Ich glaube nicht, dass das hier im Interesse von Hivez ist, aber rein vom Prinzip her.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 10:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nun ja. Möglich wäre das sicherlich. Allerdings frage ich mich ob der Nutzen davon so wirklich groß wäre. Bzw ob es überhaupt jemand nutzen würde. Und das ist ein Punkt den ich sehr stark anzweifeln möchte.
Wenn es rein nur darum geht, dass man eigene Bilddaten in die Instanzen der glBitmap bekommt, dann kann man das auch jetzt schon. Du kannst mit Create ein neues leeres Bild erstellen und anschließend mit Scanline auf die Pointer zugreifen. Wenn man dann also das Bild reingeschaufelt hat, kann man die Instanzen wie gewohnt benutzen. Die restliche Verwaltung übernimmt dann wieder die glBitmap.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 12:11 
Offline
DGL Member

Registriert: Mo Jul 12, 2010 13:19
Beiträge: 6
Gibt es eine Möglichkeit die Datei hier im Forum hochzuladen? Per post kommt die Nachricht, das dds nicht erlaubt sei.
Und Danke für den Hinweis mit TglBitmap2D. Werde das gleich mal ausprobieren. Hat LoadTexture sonst noch Nachteile? Hatte es verwendet weil es im Wiki als einfache Variante beschrieben stand.

Der Viewer sagt mir übrigens, dass es sich um das Format DXT3 handelt. Allerdings hört sich deine erklärung plausibel an, das es nur als solches erkannt wird aber dennoch anders auszulesen ist. Naja mal schauen.

Wie immer Danke schonmal.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 12:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das zippe das Bild. Zips sollten möglich sein.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 12:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Code:
Gibt es eine Möglichkeit die Datei hier im Forum hochzuladen? Per post kommt die Nachricht, das dds nicht erlaubt sei.

Einfach mit ZIP packen, dann sollte es gehen.

Zitat:
Der Viewer sagt mir übrigens, dass es sich um das Format DXT3 handelt.

Vielleicht kann der Viewer das auch nicht richtig. Was sagen den z.B. die NVIDIA Texture Tools dazu? (*)

Edit: Die Tools werden in der Kommandozeile benutzt, z.B. "nvddsinfo texturfile.dds"
( http://code.google.com/p/nvidia-texture ... dLineTools )



(*) NVTT ist sowieso das beste zum DDS/DXT komprimieren, wenn deine Grafikkarte CUDA kann. Da dauert das komprimieren dann nicht mehr Minuten sondern nur noch Sekunden. Leider kann die Windows-Variante kein PNG-Format lesen...daher muss man Quellbilder immer erst in z.B. TGA konvertieren. (JPG als Quelle ist keine gute Idee weil dann JPG-Artefakte und DXT-Artefakte im Bild sind.)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 12:40 
Offline
DGL Member

Registriert: Mo Jul 12, 2010 13:19
Beiträge: 6
Da schau mal einer guck. Die Zip Datei ist oben.
Also, der Viewer ist von der Nvidia Seite und ein zweiter Viewer spuckt genau das Gleiche aus. Aber ich schau mir mal die Tools da an.

@Lossy eX: Keine Angst, ich erwarte nicht, dass du die glBitMap deswegen meinen wünschen anpasst. Wenn's nicht geht, dann gehts halt nicht. Würd mich aber freuen, wenn's irgendwie einen Weg "von hinten durch die Brust" gäbe. Wie Gesagt: Das Programm soll am Ende keinen Preis gewinnen, sondern mir nur Arbeit abnhemen.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 13:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Code:
[coolcat@q9300 ~]$ nvddsinfo a_bear2_boot1.dds
Flags: 0x000A1007
   DDSD_CAPS
   DDSD_PIXELFORMAT
   DDSD_WIDTH
   DDSD_HEIGHT
   DDSD_LINEARSIZE
   DDSD_MIPMAPCOUNT
Height: 512
Width: 256
Depth: 0
Linear size: 131072
Mipmap count: 10
Pixel Format:
   Flags: 0x00000004
      DDPF_FOURCC
   FourCC: 'DXT3'
   Swizzle: ''
   Red mask: 0x00000000
   Green mask: 0x00000000
   Blue mask: 0x00000000
   Alpha mask: 0x00000000
Caps:
   Caps 1: 0x00401008
      DDSCAPS_COMPLEX
      DDSCAPS_TEXTURE
      DDSCAPS_MIPMAP
   Caps 2: 0x00000000
   Caps 3: 0x58534444
   Caps 4: 0xFFFFFFFF
[coolcat@q9300 ~]$



Kommt glBitmap vielleicht nicht mit den Mipmaps klar?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 13:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Such mal als Alternative nach einem DDS-Loader von Mars, der den hier vor längerer Zeit ins Forum gestellt hat. Der ist zwar viel rudimentärer als Lossys glBitmap, aber sollte mit so ziemlich allen DDS-Varianten klarkommen, da er afaik anhand der DDS-Specs geschrieben wurde.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 13, 2010 13:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Mein DDS-Loader (den ich nicht rausgeben darf) basiert letztlich auf diesem hier von Andreas Jonsson, wobei ich den quasi komplett umgeschrieben habe um ihn bei mir integrieren zu können. Er kann nur die DXT-Formate...dafür sind es aber auch nur 150 Zeilen.

_________________
Yeah! :mrgreen:


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 » OpenGL


Wer ist online?

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