Hi
Ich bin grad dabei mich ein bisschen in OpenGL einzuarbeiten. Im Moment benutze ich nur die 'OpenGL'-Unit. Jetzt hab ich schon öfter was von OpenGL12 oder OpenGL15 gelesen. Glaux kam auch oft vor. Wann brauche ich denn nun was? Von Geometry.dcu ist auch ganz oft die Rede...
Ich würd z.b. gerne MilkShape Models laden und rendern können, was brauch ich dafür?
Bei Geometry fällt mir ein: ich hab mir auf dieser Seite das Tut durchgelesen "Immer in die Guckrichtung bewegen" (jedenfalls in diesem Sinne ) und dort wurde das mit Vektoren gemacht. Ich hab das für mich jetzt allerdings mal so gemacht:
Code:
Hyp :=0;
Dreh :=2;
if ssShift in Shift then Dreh :=10;
if ssAlt in Shift then Dreh :=180;
if Key = VK_LEFT thendec(myAngleY,Dreh);
if Key = VK_RIGHT theninc(myAngleY,Dreh);
if Key = VK_UP then Hyp :=-1;
if Key = VK_DOWN then Hyp :=1;
if myAngleY > 360thendec(myAngleY,360);
if myAngleY < 0theninc(myAngley,360);
ifnot(Hyp =0)then
begin
AB :=DegToRad(frmMain.myAngleY);
Gk :=sin(AB)/Hyp;
Ak :=cos(AB)/Hyp;
frmMain.PosX:= frmMain.PosX+ Gk;
frmMain.PosZ:= frmMain.PosZ+ Ak;
end;
Funktioniert auch wunderbar, aber irgendwo muss doch da ein Nachteil sein, wenn man das sonst so kompliziert mit Vektoren macht oder?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bei den von dir aufgezählten Units musst du ein paar Unterscheidungen machen.
Interfaceunits (Generelle Schnittstelle zum Umgang mit OpenGL)
OpenGL (OpenGL Unit die bei Delphi dabei ist. ist auf dem Stand von OpenGL 1.1)
OpenGL12 (OpenGL Header von Mike Lischke auf dem Stand von OpenGL 1.2)
OpenGL15 (Alias dglOpenGL.pas ist von uns und wird permanent auf dem neusten Stand gehalten)
Ich persönlich empfehle dir auf jeden Fall, dass du dir die dglOpenGL.pas ziehst und mit dieser Unit arbeitest.
Die Glaux stecke ich in die Texturunits. Diese arbeiten normal mit einer Schnittstellenunit zusammen. Da die Glaux aber als Dll herkommt muss sie sich eine eigene Schnittstelle besorgt haben. Ich persönlich mag aber weder die glaux noch die Textures.pas (von Jan Horn) oder die glBMP (von Jason Allen). Deswegen habe ich selber eine Unit (glBitmap.pas) geschrieben in der (meiner Meinung nach) die Schwachstellen von den anderen Units ausgeglichen habe. Welche man davon verwendet ist jedem selbst überlassen. Es ist ja schließlich für jeden Geschmack etwas dabei. [edit] Eine Unit davon bräuchtest du um Texturen darstellen zu können. Du könntest diese aber auch von Hand laden.[/edit]
Die Geometry.pas ist eine Unit die normalerweise bei der OpenGL12 dabei ist. In dieser sind grundlegende Vektoroperationen implementiert. Auch hier gilt wieder. Jeder so wie er es mag. Das kannst du natürlich auch selber implementieren. Vektoren benutzt man aber hauptsächlich dann, wenn man im 3 dimensionalem Raum etwas berechnen möchte. Die entfernung zwischen zwei Punkten etc. Das kann recht einfach sein. Kann aber auch sehr komplex werden. Und da hast du keine große Wahl außer dies mit Vektoren zu berechnen. Abgesehen davon hast du fast überall Vektoren. (Flächennormale etc).
also ich hab jetzt die dglOpenGL-Unit. Ich muss aber die "normale" OpenGL-Unit trotzdem noch einbinden oder? jedenfalls kennt er sonst kein glTranslate.... und Geometrz ist auch irgendwie nicht dabei.. hm
Zu den Texturunits: ich bin komplett neu in Delphi. Aber bevor ihr jetzt sagt: Dann lass erst mal die Finger von OpenGL! : ich hab schon recht viel Programmiererfahrung mit VB und dort auch mit DirectX. so, aber jetzt zum Thema: Ich möcht mir keinen eigenen Loader schreiben, weil ich mich mich dann einfach verzettel, insofern wär's schön wenn mir da jemand eine aktuelle und auch bekannte Unit nennen könnte. Bekannt, weil ich ja immer wieder mal Hilfe brauchen werde, und das geht wohl besser wenn ich nicht irgendson noname-Ding hab, was keiner kennt. (Auch wenns vielleicht genauso gut ist!)
EDIT: Ach ja! Ich bräucht auch noch ne schöne Unit für Milkshape-Modelle
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Die Borland Unit OpenGL brauchst Du nicht mehr. glTranslate ist glTranslate3f. Die Unit Geometry gibt es in den verschiedensten Projekten und ist nicht Bestandteil von OpenGL. Sie enthält hauptsächlich mathematische Funktionen, zu finden z. B. auf der GLScene - Homepage oder auch bei einigen Projekten auf dieser Seite.
3DS und Milkshape werden z. B. von Noeskas Unit geladen und wird hier im Forum kräftig genutzt. Ansonsten gibt es einen Loader von GLScene, erfordert jedoch Konvertierungsaufwand um die Abghängigkeit zu GLScene aufzulösen. Habe diesen Weg genommen, da seiner Zeit die Unit von Noeska noch nicht vorhanden war.
Hm. Ich habe keine Funktion glTranslate3f gefunden.. ich hab jetzt nur dglOpenGL.pas eingebunden und dort auch mal manuell nach der Funktion gesucht, aber auch so nicht gefunden.
Und wie siehts mit ner Textureunit aus? Ich hab jetzt ein paar Mal gelesen Glaux sei nicht zu empfehlen, weil veraltet...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also die Methode die du sucht heißt glTranslatef. Dort befindet sich keine 3 im Namen, da immer nur 3 Parameter übergeben werden.
Für glVertex gibt es Methoden mit 2, 3 oder 4 Parametern. Deswegen befindet sich dort eine 2, 3 oder 4 im Namen. Also glVertex3f. Falls du wissen möchtest wie genau die Methode in der dglOpengl.pas heißt suche einfach nach dem ursprünglichen (aber falschen) Namen aus der unit OpenGL. (glVertex) Dann solltest du alle zutreffenden Methoden finden. Du musst dann lediglich auswählen wie viele Parameter du hast und welchen Typ diese besitzen.
Zu den TexturUnits
- Glaux ist veraltet. Das ist richtig. Abgesehen davon kommt diese in einer DLL daher was vollkommen über dimensioniert ist. (von dem rate ich auch ab)
- Die Textures.pas von Jan Horn wird auch nicht mehr weiter entwickelt ist aber aktueller als die glaux. In dieser Unit befindet sich lediglich eine Methode der du einen Datei (oder Resourcename) übergibst und sie liefert dir eine TexturID zurück. Alle Einstellungsmöglichkeiten sind fest in der Methode codiert.
- Die glBitmap.pas von mir ist komplett Klassenorientiert und bietet die größt mögliche Felxibilität bei geringem Programieraufwand. Da bin ich auch momentan dabei und überarbeite bzw. erweitere die Klassen.
Unparteiisch wie ich nun mal bin kann ich dir natürlich nur meinen Loader empfehlen.
Spaß bei Seite. Ich habe mir ja nicht ohne Grund die Arbeit gemacht und einen vollkommen neuen Header geschrieben. Es kommt darauf an was du machen möchtest. Wenn du dynamisch Texturen erzeugen möchtest, dann kannst du dies mittels der Functionsschnitstelle tun die in meinem Loader eingebaut ist. (wird momentan überarbeitet nur als Info). Wenn du nachträglich einen Alphakanal zu dem Bild hinzufügen möchtest, dann kannst du dies auch nur mit meinem Loader tun. Wenn du bilder aus Streams laden willst, dann geht das nur mit meinem.
Wenn du aber sagst ich habe keine besonderen Einstellungen für einzellne Texturen und will eine Methode aufrufen und dann eine Textur haben, dann solltest du den Laoder von Jan Horn nehmen.
Also ich hab mir mal die DGL-SDK.zip runtergeladen und installiert, da war ja doch einiges dabei (unter anderem ja auch deine glBitmap)
Was mich allerdings sehr stört: Ich hab zwar jetzt "alle" Units die ich brauch, aber ich weiß überhaupt nicht wie ich damit umgehen soll. Da sollte wohl noch eine ausführliche Dokumentation beigelegt werden, ansonsten hiflt einem die ja herzlich wenig... werd das gleich mal ins Feedback schreiben Außerdem gibts unter contribute den Ordner 3dsloader, aber da ist nix drin... und wie ich mit der _3ds.pas von Noeska umgeh weiß ich auch noch nicht... könnt ihr mir da ein paar Links anbieten?
Zu dem 3DS Loader gab es vor einiger Zeit mal einen ziemlichen langen Thread. Da müßte einiges drin stehen. Im Forum "Meinungen zu den Projekten" war das.
hm, tatsächlich es klappt. Ich mein aber, das mal irgendwo schon mal eingefügt zu haben, und weils nichts gebracht hat hab ichs wieder rausgenommen. Wahrschienlich stands an der falschen Stelle.. Also vielen Dank
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.