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

Aktuelle Zeit: Mi Jul 09, 2025 16:19

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Jan 09, 2004 00:23 
Offline
DGL Member

Registriert: Do Jan 08, 2004 23:57
Beiträge: 2
Bin völlig neu in der 3d-Programmierung, also bitte nicht gleich lachen, auch wenn meine Frage vollkommen basic ist: wofür ist OpenGL eigentlich geeignet? Ich hab in den letzten Tagen zwar eine Menge gelernt über OpenGL, DirektX und Raytracing, meine grundsätzlichen Fragen sind aber noch immer unbeantwortet, vielleicht könnt ihr mir ja helfen.

Ich möchte in einem Programm schöne und *fast* fotorealistische Bilder rendern. z.B. ein Diagramm, ein Chart und sowas. Ich hab also Quader Zylinder, Flächen und Linien, welche ich mit Texturen versehen möchte und vor einem Hintergrund dreisimensional rendern. Mit Licht und Schatten, Spiegeleffekten, verschiedenen Perspektiven und anti-aliased. Fotorealistisch eben. Rendern muß nicht in Realtime sein, es darf aber auch nicht mehrere Minuten dauern. Wichtig ist aber auch, daß das Programm auf möglichst vielen Windows-Rechnern, auch mit schwächerer Hardware läuft.

Ist OpenGL rein hardware-abhängig oder weichen die Treiber beim Fehlen von Funktionen auf Softwareimplementierung aus? Sprich: läuft das Ding mit einer alten Grafikkarte zumindest langsam oder stürzt es komplett ab? Auf welchen System kann ich das Funktionieren voraussetzen? Arbeiten bestimmte Funktionen nur mit neueren Karten und woher weiß ich, was ich lieber nicht nützen sollte, wenn ich kompatibel bleiben möchte?

Oder gibt es für Delphi andere 3D-Engines, die hierfür geeignet wären?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2004 07:27 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Auch wenn ich hier nicht der OpenGL Held bin kann ich soviel verraten:

Das was DU hier beschreiben hast, ist bei allen OpenGl fähigen Grafikkarten schon seit Jahren enthalten. Du solltest also auch auf etwas angegrauten Systemen keine Probleme haben. Da Du keine Video oder Echtzeitsachen machen willst (hab ich doch richtig verstanden oder!?) solltest du auch auf schmalbrüstigen Systemen nicht gleich an die Leistungsgrenze stoßen.

Und im allgemeinen: Ja OpenGL ist zum erzeugen von realistischen 3D Sachen geeignet. (Kennst Du Terminator 2? Die Flüssigmetaleffekte des T1000 waren mit OpenGL umgesetzt.)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2004 10:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Um eins erstmal klarzustellen (beziehe das auf deinen letzten Satz) : OpenGL ist KEINE 3D-Engine, sondern eine Abstraktionsschicht, die Hardwarefunktionen in standardisierte und leicht zugängliche API-Aufrufe kapselt (ähnlich der D3D-Komponente von DX). Allerdings wurde OpenGL (sowie D3D) primär für den Echtzeiteinsatz entwickelt, aber das Darstellen von realistischen Bildern, die qualitätstechnisch an Offline-Renderings herankommen dürfte nicht zuletzt durch die neu hinzugekommene glSlang-HLSL ohne weiteres möglich sein (wurde in den Specs zu glSlang übrigens auch explizit erwähnt, "Rendering offline-content (not necessary) in realtime").

Und nein, OpenGL weicht bei fehlenden Hardwarefeatures nur dann auf Softwarepfade aus, wenn dies explizit vom Hardwarehersteller im Treiber so eingebaut wurde. Unter OpenGL werden neurere Hardwarefeatures nämlich als Extensions offengelegt, und nur wenn eine Extension auch vom Grafikkartentreiber angeboten wird, kann diese genutzt werden. Ob diese Extension dann in Hardware läuft oder vom Treiber in Software ablaufen gelassen wird ist Sache der zugrundeliegenden Hardware bzw. des Treiberschreibers. Es ist z.B. so, das Fragmentprogramme/shader (aka Pixelshader under D3D) zwar auf alter Hardware z.B. über den Treiber emuliert werden können, allerdings ist dies so langsam das man das auf Consumerhardware normalerweise nicht machen würde.

Aber um dich zu ermutigen : Alle von dir genannten Effekte dürften auch auf älterer Hardware und dort (je nach Komplexität) sogar noch in Echtzeit ablaufen. Kommt halt drauf an wie du diese Techniken implementierst, da es da ja sehr viele verschiedene Ansätze gibt (bei Schatten z.B. projezierte Shadowmaps, Lightmaps, volumetrische Stencilschatten, fürs Licht z.B. OpenGLs Vertexbeleuchtung, per-Pixel-Beleuchtung via Shader/3D-Textur oder auch Lightmaps).
Im Endeffekt sind dir hier also kaum Grenzen gesetzt und besonders auf moderner Hardware (PS2.0, also Radeon ab 9500 und GeForce ab FX) lassen sich Szenen die vor kurzem nur offline in Programmen wie 3DSMax gerendert werden konnten in Echtzeit darstellen.

Allerdings wird der Weg dort hin recht lange und teilweise auch ziemlich schwer, besonders wenn man in diesem Bereich recht neu ist. Es empfiehlt sich also erstmal mit den Grundlagen anzufangen und sich langsam hochzuhangeln.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2004 10:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
OpenGL ist eine API mit der sich Hardware beschleunigte 2D u. vor allem 3D Grafik relativ leicht in Anwendungen intergrieren lassen. Im Gegensatz zu DirectX umfasst OpenGL nur grafische Funktionalität, es gibt also kein Äquivalent zu DirectPlay, DirectSound etc.

OpenGL ist 1992 oder so enstanden und im Gegensatz zu Direct3D prozedural anstatt objektorientiert aufgebaut. Es ist nicht allein auf Windows Systeme beschränkt sondern plattformunabhängig, es gibt Implementationen für Unix, Linux usw...
Die Urfassung von OpenGL wird eher unregelmäßig aktualisiert. Mittlerweile sind wir bei Version 1.5 während DirectX in weit weniger Zeit 9 Majorversionen verabschiedet hat. Dank dem System der Extension ist es aber möglich neue Funktionen der Grafikkarten-Treiber (die als OpenGL-Extension verfügbar gemacht werden) auch sofort in seine Programme zu verbauen.
Welche OpenGL-Funktionalität auf einzelnen Rechnern zur Verfügung stehen, hängt also vor allem von der installierten Grafikkarte und den Treibern ab. Alles was du für deine Aufgaben brauchst sollte auch auf älterer Hardware unterstütz sein bzw emuliert werden können.

Soviel erstmal dazu, was OpenGL ist!
Ich persönlich kann dir OpenGL nur empfehlen. Die Syntax ist recht einfach zu verstehen, erste Erfolge sind schnell erzielt. In Sachen Geschwindigkeit und Bildqualität gibt es nichts zu meckern. (Bei D3D aber auch nicht) Ein weiterer Bonus ist die sehr umfangreiche Dokumentation. OpenGL ist in meinen Augen die perfekte API um 3D-Programmierung zu lernen und zu verstehen. Im Vergleich zu DirectX ist OpenGL allerdings etwas rudimentärer - viele Sachen die in Direct3D einfach enthalten sind, müssen in OpenGL noch selbst implementiert werden. (Laden von Meshes, Normalenberechnung etc)
Beide sind aber keine 3D-Engines - wenn es das ist was du suchst, würde ich dir einen Blick auf GlScene empfehlen!

Grüße,
-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2004 11:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Du kannst mit OpenGL mittels Mesa übrigens auch auf einen reinen Softwarepfad ausweichen, der dann überall läuft und die neuesten Features inkludiert.

Wenn es aber wirklich fast photorealistisch sein soll (mit echter Lichtbrechung, Linseneffekten, mehrfache Spiegelungen von Objekten, ...) tust du dir mit einem Raytracer eventuell leichter, als mit einer API, die eher auf Polygonzentrierte Echtzeitgrafik ausgelegt ist (mit Vertex- und Fragmentprogrammen kann man zwar viel machen, auf älterer Hardware werden diese jedoch nicht unterstützt).
Wenn du deine Primitivetypen (für Diagramme werden es ja so viele nicht sein) direkt implementierst (also nicht auf Unmengen von Dreiecken ausweichst), kann auch ein Raytracer recht flott unterwegs sein, du könntest als Experiment ja auch Daten für POV-Ray generieren und diesen automatisch aufrufen - dieser ist sehr weit fortgeschritten, stark optimiert und eventuell bereits schnell genug für das, was du vorhast.

Da POV-Ray Freeware ist, hättest du es dann bereits geschafft :wink: .

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2004 16:38 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich würde da eher zu OpenGL raten, weil man dann sich die ganzen Lichter usw.. in Echtzeit einstellen kann und so direkt ein Ergebnis sieht. Viele ARB Extensions wie z.B. ARB_fragment_program mit denen sich eine Qualität ähnlich wie bei Raytracern erreichen läßt, laufen auf älteren Karten von NVidia und ATI auch im Softwaremodus. Allerdings sind die für dieses Anwendungsgebiet gar nicht unbedingt notwenig. Auch mit den normalen OpenGL Lichtern, die ab der GeForce 1 direkt durch die HW unterstützt werden, und daher sehr schnell sind, kann man z.B. bei Diagrammen schöne Effekte erzielen.
Von GLScene kann ich abraten, weil man mehr dazu lernt, wenn man direkt mit OpenGL arbeitet und dann nicht von einem externen Programpacket abhängig ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 14, 2004 12:27 
Offline
DGL Member

Registriert: Do Jan 08, 2004 23:57
Beiträge: 2
Danke für alle Ratschläge. Mir scheint auch OpenGL in der einfachen Version (nicht GLScene) die beste Lösung zu sein.
PovRay hab ich mir ebenfalls angesehen, aber nach einem Wochenende Rumspielen bin ich noch immer fast so blöd wie vorher. Das Ding ist mir fast zu oversized, außerdem hätte ich die 3D-Szenen gerne in meinem Programm gerendert.

Ich hab in der Zwischenzeit versucht, ein paar Programmbeispiele zu modifizieren, damit sie mit der Mesa 3D Library laufen, statt OpenGL. Soweit ich das verstanden habe, ist Mesa eine rein softwareseitige Implementation von OpenGL und damit von der Graphikkarte unabhängig. Es ist zwar unheimlich langsam im Vergleich zu OpenGL, aber für meine Zwecke noch schnell genug. Kann ich damit nicht Funktionen softwareseitig überbrücken, falls die Hardware zu schwach ist? Wäre kein großer Aufwand, die OpenGL.pas so zu modifizieren, daß sie zur Laufzeit umschaltbar ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 14, 2004 21:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Gnau das mache ich z.B. in Carad (dort können beliebige OpenGL Treiber auch zur Laufzeit geladen werden - ich habe es sogar mit einem Wrapper unter DirectX laufen lassen, als ich es noch auf einer ATI Rage Mobility entwickelte) - die dglOpenGL.pas (oder auch die BaseGraph OpenGL.pas) musst du dafür überhaupt nicht modifizieren.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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