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

Aktuelle Zeit: Do Mär 28, 2024 11:41

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



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Blender-Files in OpenGL importieren
BeitragVerfasst: So Apr 20, 2014 23:36 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
Hallo,

wie kann ich in Blender erstellte Szenen (.obj/.mtl-Files) in OpenGL importieren ? Geht das irgendwie mit OpenGL direkt oder muss ich das mit einem "externen" Paket in meiner Programmiersprache erledigen.

Ich möchte eine in meinem Python3-Programm gerechnete 3D-Grafik in einer in Blender erstellten Szene darstellen.

Grüße
v :wink:

P.S.: Wie kann ich in diesem Forum bei Bedarf Images an Beiträge anhängen ? Habe keinen Webspace ...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Apr 20, 2014 23:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

virtuosus hat geschrieben:
wie kann ich in Blender erstellte Szenen (.obj/.mtl-Files) in OpenGL importieren ? Geht das irgendwie mit OpenGL direkt oder muss ich das mit einem "externen" Paket in meiner Programmiersprache erledigen.
Dafür gibt es in OpenGL nichts fertiges, dafür brauchst du einen Wavefront-Obj-Loader für Phyton. Zur Not kannst du dir auch selber einen schreiben, das Format ist nicht alzu schwer. Im Normalfall solltest du (oder die verwendete Bibliothek) die Daten aus dem OBJ-File in ein VBO packen.

virtuosus hat geschrieben:
Ich möchte eine in meinem Python3-Programm gerechnete 3D-Grafik in einer in Blender erstellten Szene darstellen.
Das ist jetzt genau der umgedrehte Weg. Ein guter OBJ-Loader sollte auch das Speichern von VBOs in OBJ-Files unterstützen. Dann kannst du diese Datei wieder im Blender importieren und anzeigen. Allerdings musst du die Daten die im VBO sind ja auch erst irgendwie auf die Grafikkarte hochgeladen haben. Es wäre also einfacher die Daten gleich vor dem hochladen in ein OBJ-File zu konvertieren.
Falls du allergings eine Möglichkeit suchst, Geometry zu exportieren, die mit glBegin und glEnd gerendert wurde, muss ich dich leider enttäuschen, soetwas gibt es nicht. Denn bei Zeichenaufrufen mit glBegin und glEnd wird die Geometrie nur temporär auf der Grafikkarte gespeichert und nach dem zeichnen wieder gelöscht.

virtuosus hat geschrieben:
P.S.: Wie kann ich in diesem Forum bei Bedarf Images an Beiträge anhängen ? Habe keinen Webspace ...
Unter dem "Antwort erstellen" Fenster findest du eine Box "Dateianhang hochladen". Dort kannst du beliebige Bilddatein anfügen. Die werden dann auch automatisch im Post angezeigt. Allerdings ist die Größe der Datein begrenzt. Zur Not musst du die noch etwas verkleinern.

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 21, 2014 00:45 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
Da schein ich im Moment wohl das Problem zu haben, dass ich mich nicht verständlich ausdrücken kann :oops: :

Nein, ich möchte nicht von meinem Programm nach Blender exportieren, nur den Weg andersherum, Szene in Blender erstellen und zusammen mit meiner gerechneten Grafik in meinem Programm darstellen. D.h., die Szene soll immer gleich bleiben und meine gerechnete Grafik soll darin gezeichnet werden.

OK, aber die obj-Files muss ich dann wohl selber parsen. Texte parsen gehört so zu meinem absoluten Lieblingsbeschäftigungen beim Programmieren :shock: . GsD geht das in Python etwas cooler als in z.B. Java oder so...

Grüße
v

P.S.: Beispiel-Grafik kann ich momentan nicht anfügen, da aus unerfindlichen Gründen mein Programm auf einmal nicht mehr funzt :o Grrrr ! Und meine Blender-Szene habe ich auch noch nicht parat, weil ich gerade das erste Mal versuche, mit diesem sehr komplexen Blender-Programm mit seinen tausenden von unbekannten Begriffen und Funktionen zurecht zu kommen. Gesten habe ich es gerade mal glücklich geschafft, einen Frauen- und einen Männer-Kopf aus freien obj-Files vom Internet um ein paar vertices und edges zu reduzieren und gleich groß zu machen :D .


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 21, 2014 10:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Wenn dir das OBJ-Format nicht passt, kannst du dir auch deinen eigenen Blenderexporter schreiben (in Python!). Siehe dazu auch im Wiki:
Blenderexporter
Blenderscript

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 21, 2014 17:12 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
Wäre natürlich auch ne Möglichkeit. Dann hätte ich aber direkt 2 Baustellen.

Eigentlich hatte ich davon geträumt, dass es, um Blendergrafiken in ein Python-Programm (oder Game) zu bekommen, schon irgendwas Fertiges gibt und man dafür nicht alles "zu Fuß" selber machen muss. Das ist aber kein Problem von OpenGL sondern von Python, wo es bislang wohl noch nicht so die vollständige Paket-Ausstattung bei der Version 3 gibt. Wenn ich das gewusst hätte, wäre meine Versionswahl sicherlich anders ausgefallen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Apr 22, 2014 07:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hey,

schau dir mal Assimp (http://assimp.sourceforge.net/) an. Eine lib zum Laden verschiedenster 3D Formate (u.a. obj). Und angeblich mit Pyhton bindings. Aber dazu kann ich dir leider nix erzählen :)

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Apr 22, 2014 21:56 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
cool ! Mit diesen Infos komme ich erst mal ein paar Kilometer weiter...

Danke Euch !


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 24, 2014 00:02 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
Ok ! Habe jetzt mal Assimp ausprobiert (ein paar Beispiele). Das funktioniert ja prächtig mit dem Import (in jede Menge von Formaten) !

Allerding habe ich keine Ahnung, wie ich eine damit importierte Szene aus Blender in mein Programm basteln soll (alte Schule, Displaylisten, keine Schader und Buffer) . :? Mit dem objloader vorher bekam ich eine glList, die ich einfach nur aufrufen musste.

Nach vielem Lesen habe ich heute gelernt, dass die Art, wie ich bis jetzt OpenGl programmiert habe, deprecated sein soll http://stackoverflow.com/questions/4113989/why-were-display-lists-deprecated-in-opengl-3-1. Für das, was ich machen will (eine statische, gerechnete 3D-Scene mit "tapezierten" Kugeln in einer Szene mit Wiese und Himmel, die man drehen und zoomen kann) reicht das aber meiner Ansicht nach vollkommen aus (meine kleine lüfterlose Nvidia-Grafikkarte kann sowieso nur OpenGL 2.1 und Shader-Language-Version 1.3). Das mit den Kugeln funktioniert ja auch schon sehr gut. Aber ohne eine "Szene" sieht das ziemlich langweilig aus.

Aus Assimp bekomme ich meshes, materials und textures. Wie bekomme ich die denn jetzt in eine glList ? Die Technik mit den Shadern erscheint mir hochkompliziert. Da muss man ja drauf studiert haben ! :shock:

Oder nicht ?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 24, 2014 13:04 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Kompliziert es relativ. Ich persönlich finde die alte Pipeline komplizierter, weil es einfach noch viel schwieriger zu überblicken ist. Shader sind viel pragmatischer und einfacher vom Umfang. Ich würde die aber wenigstens VBOs für die Daten empfehlen. Man braucht dafür alleine noch nichtmal Shader, auch wenn sich durch sie 1000 mal mehr Möglichkeiten hat und ich dir sie langfristig schon ans Herz legen würde.
Für nur VBOs mit der depraceted Pipeline gibt es sogar ein Tutorial:
http://wiki.delphigl.com/index.php/Tutorial_Vertexbufferobject
http://wiki.delphigl.com/index.php/VBO_ohne_glInterleavedArrays

Für effizientes Rendering sind auch noch Index-Buffer interessant, um Vertices Speicher- und Recheneffizient wiederverwenden zu können. Siehe zb. hier:
http://openglbook.com/the-book/chapter-3-index-buffer-objects-and-primitive-types/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 24, 2014 20:34 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
Das war es, was ich gesucht habe: Eine vernünftige Anleitung zum aktuellen OpenGL !

Was ich bisher schon alles gelesen habe, hat mich eher verwirrt ! Man beliebt ja auch bei den Tutorials nur sehr selten zu erwähnen, um welche Versionen es sich handelt. Jedenfalls habe ich seit zwei Wochen nichts anderes gemacht als OpenGL-Tuts zu lesen, Programme in C++ oder Python auszuprobieren und mich an Blender zu gewöhnen. Am Ende wusste ich jedenfalls gar nicht mehr, wo es sinnvollerweise lang gehen soll.

Gestern hat es sogar geklappt, meine Spheres an den gerechneten Positionen und ein durchsichtiges Objekt aus Blender gemeinsam darzustellen (mit der alten Pipiline). Leider waren die Texturen für die Kugeln weg und die Farben stimmten absolut nicht mehr.

Werde mich also jetzt noch mal ganz von vorne mit der Sache befassen und mal schaun, wie denn das Ganze mit VBOs und Shadern funktioniert.

Danke für die weiterführenden Links und den Hinweis, dass die Sache mit Shadern auch kein Hexenwerk ist, bzw. evtl. sogar einfacher !

Also: Der Weg ist das Ziel !


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 24, 2014 21:15 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Nur noch angemerkt:
"Aktuelles OpenGL" wird in der Regel mit OpenGL 3.3 (Core) aufwärts definiert. Das kannst du also vergessen, wenn du deine Grafikkarte(Oder ist es so eine grottige IGPU?) das noch nichtmal unterstützt. Viele interessante Features die mehr oder weniger notwendig sind, um das alte erst vollkommen restlos abzulösen, kamen erst im Laufe von OpenGL 3 (Uniform Buffer und Texture Swizzle zb.) und der Syntax der Shader hat sich leicht geändert, deshalb wirst du mit OpenGL 2.1 nicht wirklich "modernes OpenGL" betreiben können. Trotz alledem nicht die unperformantesten uralt-Features wie Display Listen oder Immediate Mode zu nutzen, ist natürlich trotzdem eine gute Idee. ;-)

Im Forum geht es ja seit Kurzem viel um Ogl 3, aber hier nochmal ein paar Tutorialempfehlungen, wie du wirklich mit OpenGL 3.3 arbeitest, ganz ohne depraced Funktionalität: (Nur für den Fall das du irgendwann komplett umsteigen willst/kannst)

Was OpenGL 3.3 anbetrifft ist leider das Wiki hier noch nicht auf dem neusten Stand.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 24, 2014 21:32 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
*hust*

http://www.arcsynthesis.org/gltut/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 24, 2014 22:46 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
@ phlegmatiker
wieso *hust* ???

@OpenglerF
ich habe ne lowest end GeForce 210 für 23 Teuronen.... Und danke für die Tuts-Empfehlungen !

Nee, wenn ich schon was Neues anfange, dann schon basierend auf dem neuesten Stand (ogl >= 3, natürlich abwärtskompatibel). Jetzt habe ich gerade Python neu gelernt, muss halt noch ne Shadersprache (GLSL) dazu ... in C habe ich schon einiges gemacht ... Und von 3D-Programmierung war ich schon früher angefixt, allerdings auf, von heute aus betrachtet, promitivem Niveau. Da dauerte das Rechnen einer 3D-Kristallstruktur-Grafik ne ganze Nacht ! (habs immer schon mit Kugeln gehabt - Billard gehört auch dazu ... :lol: )

Was die Grafikkarte angeht, da denke ich im Moment über eine ATI Radeon R7 240 nach. Weil ich kein Gamer bin, dürfte die erst mal ausreichen für das, was ich vor habe. Vielleicht bekomme ich für das Vorhaben ja direkt auch ne Budgetfreigabe für einen schicken kleinen i5-Rechner von meiner Regierung (meine Frau :lol: ). Meine Kiste gehört eigentlich eher ins Museum (HPdc7600/8GB/HDD/SSD) :(

Es gibt viel zu lernen ! Packen wir es an ! :D


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Apr 25, 2014 00:15 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Wenn du mit OpenGL experimentieren willst, würde ich dir eine Nvidia empfehlen. Die Treiber sind wesentlich besser. Insbesondere unter Linux aber auch unter Windows. Siehe dazu folgenden relativ aktuellen Vergleich auf Basis von Tests einer OpenGL Beispielsammlung der Seite:
www.g-truc.net/doc/OpenGL status 2014-02.pdf

Wie man unschwer erkennen kann, ist Nvidia bei den OpenGL Treibern voraus.

Zitat:
Natürlich Abwärtskompatibel

Ich weiß nicht ob es die Mühe Wert ist. Effektiv musst du den gesamten OpenGL Code doppelt schreiben, sowohl auf Shader als auch auf Clientseite. Die uralt Grafikkarten werden bald restlos aussterben.

Wenn du mal genau wissen willst, was es nicht mehr gibt, schau in die OpenGL 3.3 Spec.auf Seite 343 - 347.

Zufälligerweise habe ich in meinen alten Rechner die selbe Grafikkarte, die bei mir OpenGL 3.3 unterstützt. (Beweis)
Hast du mal die Treiber geupdatet(Ich konnte so schonmal meine alte Graka von 3.2 auf 3.3 weiterbringen) und den "GL_VENDOR"/"GL_RENDERER" überprüft ob nicht möglicherweise versehentlich ohne dein Wissen eine IGPU mit niedrigeren Featurelevel genutzt wird? (Das Problem hatte ich schonmal)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Apr 25, 2014 13:55 
Offline
DGL Member

Registriert: Fr Apr 18, 2014 17:11
Beiträge: 19
Programmiersprache: Python Java
Ja, da hast Du recht ! Hab noch mal in den Specs nachgeschaut -> OpenGL 3.3

Deswegen hatte ich sie ja auch gekauft. Damals wollte ich Unity3D in Ubuntu 12.04 ans Laufen bekommen.

Jetzt habe ich Manjaro-Linux KDE und da wird die Graka wohl nicht korrekt erkannt bzw. die falsche GLX-Version aktiviert. Der Treiber ist der Neueste Original von NVidia und beherrscht auch GLX 3.

Aber eine neue Graka sollte trotz dem her. Ich brauche jetzt Ogl 4. Also doch ne NVidia ? 610 oder 630 ?

Hatte aus Testberichten geschlossen, dass die ATI besser ist....

.


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 35 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.463s | 19 Queries | GZIP : On ]