Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL Probleme (https://www.delphipraxis.net/43008-opengl-probleme.html)

sniper_w 28. Mär 2005 15:08

Re: OpenGL Probleme
 
Loaden von Texturen...Ganz einfach. :zwinker:
Wichtig : Die folgende Procedure ist nicht von mir ! (von einem DGL Supporter)

Delphi-Quellcode:
procedure LoadTextureFromBitmap(bmp:TBitmap);
var
 data:PByteArray;
 i,w:integer;
 b:PByteArray;
begin
 bmp.PixelFormat:=pf32bit;
 getmem(data,bmp.width*bmp.height*4);

 w:=bmp.Width;
 for i:=0 to bmp.Height-1 do
 begin
  b:=bmp.ScanLine[i];
  move(b^,data^[i*w*4],w*4);
 end;

 gltexparameteri(GL_TEXTURE_2D,GL_Texture_min_filter,GL_LINEAR);
 gltexparameteri(GL_TEXTURE_2D,GL_Texture_mag_filter,GL_LINEAR);

 gluBuild2DMipmaps(GL_TEXTURE_2D,gl_RGBA8,bmp.width,bmp.Height,GL_BGRA,gl_unsigned_byte,data);
 //glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,bmp.width,bmp.Height,0,GL_BGRA, GL_UNSIGNED_BYTE, Data);
 FreeMem(data);
end;

// aufruf ist von mir  :mrgreen:
procedure TForm1.Button1Click(Sender: TObject);
 var MyResBitmap : TBitmap;
     TextID : Cardinal;
begin
 MyResBitmap := TBitmap.Create;
  MyResBitmap.LoadFromResourceName(HInstance, 'MyBitmap' );
  glGenTextures(1,@TextID);
  glBindTexture(GL_TEXTURE_2D,TextID);
  LoadTextureFromBitmap(MyResBitmap);
 MyResBitmap.Free;
end;

3_of_8 28. Mär 2005 16:11

Re: OpenGL Probleme
 
Danke. Damit wärens also nur noch 4 offene Fragen...

Phobeus 29. Mär 2005 11:17

Re: OpenGL Probleme
 
Naja, mit Verlaub, Du setzt Dich hier auch wie ein kleines Buddha hin und wartest, dass man Dir Lösungen präsentierst.
Gerade was das mit den 3D-Modellen angeht, ist die Frage schlichtweg zu ungenau gestellt. Was für Formate den eigentlich? Die gibt es wie Sand am mehr. Bei uns auf der Seite findest Du einen alten Loader für MS3D und einen für AC3D, im Forum gibt das Mitglied Noeska, der einen 3DS-Loader bereit stellt. Für die meisten Projekte empfiehlt es sich ein eignes simples Format zu "erstellen" und andere Modellformate dafür zu verwenden. Solltest Du Python mächtig sein und Blender nutzen, bringt das von Haus aus einige Klasse funktionen im die Geometry so zu exportieren wie man es gerne mag.
Ich denke auch, dass ich die Texturen nicht über eine Ressourcendatei einbinden würde. Gerade zur Entwicklungszeit würde ich eher davon abraten. Sollte dann bei einem Release wirklich davon abgesehen werden, würde ich auch hier eher zu einer simplen eigen Kreation neigen. Einer Datei mit voranstellender Liste und ein paar Offsets, gefolgt von den eigentlich Nutzendaten. Das hätte z.B. den Vorteil, dass Du in der Liste auch eigene Namen vergeben könntest und eine leichtere Integration in einen Textur-Manager gewährleisten könntest.
Ich denke das Phänomen mit den Linien, dass Du beschreibst ist vollkommen normal. Anti-Aliasing könnte dort helfen. Ein entsprechendes Festsetzen geht über eine WGL-Funktion, die ich nicht zur Hand habe. Versuchs einfach mal über deinen Treiber hochzudrehen. Bringt es etwas? Versuche auch einmal mit glLineWidth die Linien dicker zu machen. Bringt dieser Effekt bereits eine Linderung? Ebenfalls nicht bei mir im Kopf... es gibt Verfahren um mit Hilfe von Blending eine Kantenglättung zu erreichen (http://wiki.delphigl.com/index.php/GlBlendFunc. Sehe dazu auch das jemand bei uns im Wiki etwas verfaßt hat, dass mir ebenfalls bisher unbekannt war. Vielleicht hilft auch das weiter: http://wiki.delphigl.com/index.php/Antialiasing
Ich denke, dass sollte erstmal genug Ansatz bzw. Stoff für weitere Recherchen sein.

3_of_8 29. Mär 2005 17:07

Re: OpenGL Probleme
 
Ich denke ein Forum ist dazu da, Fragen zu stellen, und schließlich stelle ich nicht nur Fragen, sondern versuche auch anderen zu helfen.

Antialiasing habe ich bereits mit GLENABLE(GL_LINE_SMOOTH) und (GL_POLYGON_SMOOTH) aktiviert.
Das mit den Modellen lasse ich dann doch lieber, sieht ziemlich kompliziert aus und schließlich weiß ich erst seit 4 Tagen, was OpenGL ist, außerdem schmiert Blender ständig ab.

Über den Treiber hochschrauben, meinst du unter Eigenschaften von Anzeige\Einstellungen\Erweitert...?

Bei mir bringts nichts.

Für die Vorschläge danke, werds mal ausprobieren.

Khabarakh 29. Mär 2005 17:24

Re: OpenGL Probleme
 
Zitat:

Zitat von 3_of_8
... außerdem schmiert Blender ständig ab.

Oh. Die 2.36-Version läuft bei mir außer labilen Plugins ziemlich stabil, der ATI-Bug ist AFAIK auch behoben.

Phobeus 29. Mär 2005 19:01

Re: OpenGL Probleme
 
Zitat:

Zitat von 3_of_8
Ich denke ein Forum ist dazu da, Fragen zu stellen, und schließlich stelle ich nicht nur Fragen, sondern versuche auch anderen zu helfen.

Genau. Aber mit einigen Punkten am Satzende klingen deine Fragen recht vorwurfsvoll.

Zitat:

Antialiasing habe ich bereits mit GLENABLE(GL_LINE_SMOOTH) und (GL_POLYGON_SMOOTH) aktiviert.
Nein, IMAO bewirkt das nur etwas wenn man breite Linien zeichnet und auch nur OpenGL intern. Für FSAA (was ich hätte korrekterweise so hätte nennen sollen) mußte man IMAO eine WGL-Funktion verwenden. Ist lange her und ich würde nicht solange danach suchen, da ich denke, dass das Ergebnis nur minimal besser sein wird.

Zitat:

Das mit den Modellen lasse ich dann doch lieber, sieht ziemlich kompliziert aus und schließlich weiß ich erst seit 4 Tagen, was OpenGL ist, außerdem schmiert Blender ständig ab.
Ja, dann würde ich erstmal die Finger davon lassen. Modelle sind meistens doch etwas komplexere Sache, wo häufiger etwas schief gehen kann und das gerade am Anfang sehr schnell frustrierend werden kann. Nimm einfach erstmal ein Prototype (Quadrat) und nutze das erstmal, eine spätere Intergration ist dann leicht möglich. Das Blender abschmiert, würde mir ehrlich gesagt sehr zu denken geben und ich würde dringend einmal das System,Speicher überprüfen oder mal schauen, dass eine neue Version aufs System kommt. Habe selten eine so stabile Anwendung gesehen ;-) Und gerade durch das Python-Skripting kann man einige tolle Dinge machen ... und sei es nur, dass man sich seine Szene als "OpenGL-Funktionen" ausgeben läßt oder als Array für einen VertexBufferObject. Damit kann man sich ne Menge kummern mit den Loadern sparen.

Zitat:

Über den Treiber hochschrauben, meinst du unter Eigenschaften von Anzeige\Einstellungen\Erweitert...?
Bei mir bringts nichts.
Keine Ahnung ;) Verwende kein Windows, allerdings denke ich, dass man es dort finden sollte. Aber wie gesagt der erreichte Effekt wird bei Linien wohl auch eher minimal sein. Ich denke die Linien einen Tick breiter zu machen wird in den meisten Fällen gute Ergebnisse bringen. Zumindest konnte ich mich bisher nicht sonderlich darüber beklagen ;)

3_of_8 29. Mär 2005 19:26

Re: OpenGL Probleme
 
Ich denke nicht, dass man aus einigen Punkten am Satzende einen Vorwurf schließen kann, und so war es auch nicht gemeint.

Linien breiter machen hilft gar nichts. Hab ich schon versucht.

Ich habe keine Ahnung, wie ich WGL oder GLU Funktionen/Prozeduren benutze, bzw. welche Units/DLLs ich dazu einbinden muss. In der Wikipedia hab ich dazu auch nichts gefunden.

Phobeus 29. Mär 2005 19:49

Re: OpenGL Probleme
 
Nicht, Wikipedia ;)
Die WGL-Funktionen sollten in deinen Headern erhältlich sein. Allerdings habe ich gerade einmal Google angeschmissen. Nicht wirklich gelesen, aber überflogen. Es scheint auch inzwischen eine ARB_Lösung zu geben (Ja... man fühlt sich immer schon so alt.)
http://www.joachimrohde.com/Nehe/ogltut46d.html
Das das dicker machen der Linien nichts bringt, fällt mir schwer zu glauben, dass sie den Effekt eigentlich sogar erheblich abschwächen sollten. Poste nochmal bitte ein Screen. Ansonsten musst Du wirklich versuchen mit Hilfe eines Blending verfahrens die Kanten gezielt abzuschwächen.

3_of_8 30. Mär 2005 17:06

Re: OpenGL Probleme
 
Wie gesagt: Ich habe null Ahnung von OpenGL. Ich weiß, wie man Blending bastelt und hab mir auch deine Tutorials durchgesehen (Respekt!), aber wie man aus Blending einen AntiAliasing Effekt bastelt, kann ich mir nicht denken.

Und was ist ein Header? In der Wikipedia hab ich nachgeschaut, ob da drinsteht, wie man WGL kriegt. Wenn ich die Linien dicker mache, lässt der Effekt zwar nach, aber dann wirken sie hinten immer noch viel dünner als vorne und man sieht das Aliasing noch mehr als zuvor.

Der Link ist zwar genau das richtige aber: Wenn du mich fragst in C oder C++, und ich kann nur Object Pascal. Hilft mir also auch nicht wirklich weiter. Ich hab jetzt aber das ganze ziemlich gut hinbekommen, in dem ich eine 32*32 Textur für die Gitterlinien hergenommen hab und das ganze kachele. Ungefähr so:

Delphi-Quellcode:
glbegin(GL_QUADS);
gltexcoord(0,0);
glvertex3f(-5,-5);
gltexcoord(10,0);
glvertex3f(5,-5);
gltexcoord(10,10);
glvertex3f(5,5);
gltexcoord(0,10);
glvertex3f(-5,5);
glend;
Sieht wirklich gut aus, auch wenn der Roboter nur ein Quader ist und deshalb ziemlich besch...eiden aussieht.

Phobeus 30. Mär 2005 18:42

Re: OpenGL Probleme
 
Erstmal danke für das Lob ;) Schau in ein paar Monaten nochmal vorbei, zahlreiche der alten Tutorials (und das ist eines) werden grundlegend überarbeitet.
@blendaliasing: Ich weiß es auch nicht genau, da ich es nie gemacht habe. Ich vermute auch, dass das Ergebis nicht mehr ganz zeitgemäß sein wird. Im Wiki sind die Blendfactoren vermerkt, die dafür eigentlich gedacht sind. Die Idee besteht halt darinne die Seiten so farblich abzuschwächen, dass die Treppenbildung abnimmt. Da Du ja aber nicht über Treppen klagst, sondern über die Dicke... und das ist ja auch verständlich, dass sie hinten hin abnimmt. Aber ich denke auch, dass eine Textur dort wohl ein besseres Ergebnis bringen wird, zumal man so leicht noch das ganze ein wenig grafisch aufpeppen könnte.
@header: OpenGL wird aus DLLs bezogen. Diese kommen im "IdealfalL" von NVIDIA oder ATI (und besser nicht von MS *g). Die Header sind quasi die Schnittstelle zu der DLL und werden in Form einer Unit geliefert, die die Funktionen mit denen der DLL verbinden. Borland lieferte von Haus aus eine "opengl.pas". Diese sollte man allerdings meiden wie die Pest, da diese nicht nur fehlerhaft ist, sondern Funktionen teilweise sogar anders heißen. Es gibt dann einige Versionen von Mike Lischke sowie den Jedis, die meist auf dem Namen "opengl12.pas" hört. Diese sind eigentlich einwandfrei und man gut damit arbeiten. Wenn Du dann allerdings Features von OpenGL 1.5 benötigst (das aktuellste) empfehle ich Dir die Header zu verwenden, die ein eingefleischtes Team unseres Forums erzeugt hat. Diese hören auf den Namen "dglopengl.pas" und sind im Gespräch als künftige JEDI-Header. Darauf zu setzen wird also sicherlich kein Nachteil sein. In diesen Headern sollten die WGL-Funktionen enthalten sein. (Also OpenGL-Funktionen, die es NUR unter Windows gibt und z.B. das Pixelformat setzen etc. Unter Linux bzw. X-Servern heißen diese GLX_)
@c/c++: Ach komm ;) OpenGL unterscheidet sich doch in den meisten Sprachen nicht sonderlich :-) Allerdings solltest Du sobald wie möglich einen kleinen "Crashkurs" in C/C++ belegen, damit Du zumindest die wichtigsten Datentypen und Syntax beherrscht. NVIDIA und Ati veröffentlichen Ihre Beispiele meist nur in diesen Sprachen und es wäre schade, wenn man damit nichts anfangen könnte ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz