Autor |
Beitrag |
Andreas95
      
Beiträge: 36
|
Verfasst: Di 25.01.11 16:57
Ich möchte herausfinden wie man 3d graphiken (mit milkshape3d erstellt) in delphi einfügt, und dann auch rotieren kann usw.
Zum beispiel: im attatchment ist ein sonnensystem (sonne erde mond) und ich möchte statt die 3d-rechtecke meine eigene erstellten planeten benutzen.
Geht das? und wenn ja, wie?
bitte nicht nur irgendein loader, ich brauche auch eine anleitung bzw tutorial oder so.
danke
p.s. "shift" rotiert die "planete"
Einloggen, um Attachments anzusehen!
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 25.01.11 18:09
Hey,
für ne einfache Kugel würde ich mir nich extra n Model bauen, sondern ne einfache Methode, die ne Kugel zeichnet. Ein Tutorial hab ich jetzt auf Anhieb nicht gefunden. Ich glaube das es da auch nich wirklich viel gibt. Man kann sich nur mal die Dokumentation des Loaders ansehen, den man verwendet. Oder Bsp-Projekte, die beim Loader dabei waren um zu verstehen wie der funktioniert.
Ansonsten kannst du ja auch mit noeska con delphigl.com in Verbindung treten und ihn fragen ob er dir nen Crashkurz zu seinem glModel gibt
Oder du schreibst dir schnell selbst n Loader für das ASCII-Format von Milkshape.
MfG Bergmann.
p.s: die Erde hat iwie ne komische umlaufbahn 
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Andreas95 
      
Beiträge: 36
|
Verfasst: Di 25.01.11 18:35
hm ok, danke.. da ich mindestens schon 6 stunden in der suche für eine anleitung gesteckt habe, nimm ich dein rat und frag ihn mal persönlich für eine.. hoffentlich ist er so nett und hilft mir
und danke für den link für die kugel, hilft mir sehr, wird bestimmt ne weile dauern bis ich die logik dahinter verstehe, aber danke 
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 25.01.11 19:18
Nehm doch gleich ein Quadrc:
wiki.delphigl.com/index.php/gluSphere
Da kannst du dir das ganze einzelne Zeichnen schenken. Und du kannst es als Drahgittermodell zeichnen lassen
Auf das ganze kannst du dann noch deine Texturen drauflegen.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 25.01.11 21:02
Hey,
die hab ich auch erst gesucht. Die sin aber nich so beliebt, weil die unter Umständen langsamer sein können als eine selbst erstellte Prozedur: siehe hier unter Nachteile. Unter Vorteile steht aber auch das sie zum Testen ganz gut geeignet sind. Für die Dauer sollte das aber nicht die Lösung sein.
Das besste wäre hier natürlich ein VertexBufferObject, mit den Daten der Kugel. Das ist schnell und wenn es einmal erstellt ist recht unkompliziert. Dafür ist die Erstellung relativ schwer und nicht gerade etwas für jmd der gerade die 1. Schritte in OpenGL macht. Aber der Vollständigkeit wegen wollt ich das mal mit erwähnen
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Andreas95 
      
Beiträge: 36
|
Verfasst: Di 25.01.11 23:13
Also, ich habs mal mit glusphere versucht, und eigentlich funktioniert es recht gut. Nachteile seh ich eigentlich nicht, aber das kann daran liegen das ich nur 3 spheres rendern muss.
Ich habe dann auch mit gluquadrictexture texturen draufgeklebt.
Jetzt hab ich wieder ein Problem, und zwar wie gebe ich die drei verschiedenen kugeln jeweils eine andere textur?
wenn ich sie beim rendern beim zeichnen der jeweiligen kugel rein tuhe, dann haben alle planeten die textur die ich als letztes angegeben habe.
im render:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| inc(t); sun; moves; earthangle := earthangle + 1; moonangle := moonangle + 5; glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity; glpushmatrix; glTranslatef(dep, depp, deppp); glrotatef(rot,0,1,0); glPushMatrix; if t = 1 then LoadTexture(ExtractFilePath(ParamStr(0))+'\Sonne.TGA', MyTex, False); DrawSphere; glPushMatrix; glRotatef(EarthAngle, 0, 0, 1); glTranslatef(5, 0, 0); glScalef(0.5, 0.5, 0.5); DrawSphere; glPushMatrix; glRotatef(MoonAngle, 0, 0, 1); glTranslatef(2, 0, 0); glScalef(0.5, 0.5, 0.5); if t = 1 then LoadTexture(ExtractFilePath(ParamStr(0))+'\Erde.TGA', Tex, False); DrawSphere;
glpopmatrix; glpopmatrix; glpopmatrix; glpopmatrix; |
das inc(t) und if t = 1 then habe ich dafür eingesetzt, das die texturen nur einmal geladen werden->gibt es eine elegantere lösung?
und wie kann ich die kugeln jeweils eine andere textur geben?
mein programm hab ich mal angehängt damit ihr sieht, was ich vorhabe (das laden der sonne habe ich mal rausgelassen)
Einloggen, um Attachments anzusehen!
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 26.01.11 11:05
Das arbeiten mit den Texturen sieht bei mir so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Textures: array of TglBitmap2D;
... function LoadTexture(Path: String): integer; var A: integer; begin if FileExists(Path) then begin A:=Length(Textures); SetLength(Textures,A+1); Textures[A]:=TglBitmap2D.Create; Textures[A].LoadFromFile(Path); Result:=A; end; ... procedure ZeichneKugel(TexID: integer); begin if TexID<>-1 then begin Textures[TexID].Bind; end; |
Dazu brauchst du aber die glBitmap.pas von hier:
wiki.delphigl.com/index.php/Texture_Loader
Auch wenn ich normal nicht so schnell irgendwelche Units mir hole bei kleinen Problemen, kann ich sagen: Die ist gut 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 26.01.11 13:28
Hey,
die glBitmap-Unit is echt gut, die is auch sehr weit verbreitet. Des weiteren solltest du die Texturen nicht in jedem Renderdurchlauf neu Laden, das sprengt dir nach ein paar Minuten den Speicher (zumindest seh ich in dem Ausschnitt nicht, das du sie wieder frei gibst). Desweiteren sind Lade-Routinen relativ langsam und haben demzufolge auch nix in der Render-Prozedur zu suchen.
Beim Erzeugen der Anwendung die Textur laden, dann beim Zeichnen einbinden wenn benötigt und beim schließen der Anwendung wieder freigeben.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Andreas95 
      
Beiträge: 36
|
Verfasst: Do 27.01.11 22:08
Erstmal: Danke! ich wünschte es gäbe mehr hilfsbereite leute wie ihr bzw forums wie diese
Also, ich will jetzt nicht extra ein neuen thread aufmachen, also frag ich hier(wenn ich lieber einen neuen aufmachen soll, sagt bescheid  :
Ich bin zum thema blending und beleuchtung gekommen.
Also, ich übe, wie zuvor, mit das sonnensystem.
Ich habe jetzt, danke eurer hilfe, die sonne, mond, erde alle richtige texturen gegeben.
Jetzt möchte ich wissen, wie schaffe ich es, die sonne hell aufzuleuchten, und nur die zur sonne gerichtete seite der anderen planeten aufleuchten. Ich schaffe es, das die planeten genau so aufleuchten, wie sie sollten, aber die sonne ist nur teils geleuchtet.
Hat jemand eine idee, wie es funktioniert?
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 27.01.11 22:16
Eigentlich wäre das ein neues Thema, ja.
Ich bin mal nicht so:
Du verwendest vermutlich eine Punktlichtquelle. Diese sollte im Zentrum der Sonne platziert sein. Die Sonne musst du mit EmissionMaterial-Werten (GL_EMISSION statt GL_DIFFUS) zeichnen. Sie leuchtet zwar nicht (also beleuchtet keine anderen Objekte), wird aber immer hell gezeichnet. Die Beleuchtung kommt ja von der Punktlichtquelle.
Edit:
wiki.delphigl.com/in...p/Tutorial_Lektion_8
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 28.01.11 01:22
Hey,
wenn du die Sonne wirklich zum scheinen bringen willst kannst du folgenden Trick benutzen:
zu Zeichnest einfach ein Quad durch den Mittelpunkt der Sonne. Auf das Quad legst du eine Textur mit einem Kreis, der nach Außen immer dunkler wird (am bessten in schwarz weiß). Das ganze zeichnest du dann in der Farbe der Sonne. Dann sieht es so aus, als ob die Sonne einen Schein hat. Das Quad muss natürlich immer zur Kammera zeigen. Das nennt sich dann Billboard. Dazu gab es bei DelphiGL schonma n Topic. Wenn sich die Position der Sonne und der Kamera nicht ändert, dann kannst du dir das mit den Billboards auch sparen und dem Quad ne feste Position geben.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|