| Autor |
Beitrag |
BrainCracked
Hält's aus hier
Beiträge: 6
|
Verfasst: Sa 23.12.06 19:29
Hallo,
Folgende Situation:
Ich habe in meinem Programm ein Bild von einem Schribtisch, jetzt will ich, dass es so aussieht, also ob auf dem Tisch ein Blatt liegt, wo Text draufsteht (den sollte man während des Programmes ändern können). Dieses Blatt soll nun vom Tisch abheben und in den Vordergrund schweben, sodass man frontal auf das Blatt gucken kann und lesen kann, was dort draufsteht.
Aber wie realisiere ich das ganze am besten? 3d-Texturen?
MfG
BrainCracked
|
|
ich1506
      
Beiträge: 49
Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
|
Verfasst: Sa 23.12.06 20:07
Wenn du etwas Ahnung von OpenGl oder so hast, würde ich dir empfehlen es damit zu machen.
Die Idee von einem Blatt auf dem Schreibtisch, das hoch segelt, stell ich mir gut vor!
|
|
BrainCracked 
Hält's aus hier
Beiträge: 6
|
Verfasst: Sa 23.12.06 20:12
Ich habe mal vor langer Zeit mit OpenGL gearbeitet, aber das war noch in einer anderen Prgrammiersprache. Welche Library/Komponente wäre da jetzt am besten für Delphi gedacht? Es gibt ja mehrere...
MfG
|
|
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Sa 23.12.06 20:15
Ich empfehle dir www.delphigl.com
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
BrainCracked 
Hält's aus hier
Beiträge: 6
|
Verfasst: Sa 23.12.06 20:26
Ich hätte da noch mal ne Frage...
Mit OpenGL ist sicher die schönere Methode, aber sich da jetzt wieder einzuarbeite, da würde ne menge an Zeit draufgehn. Gibt es eigendlich die Möglichkeit Grafiken zu neigen, also dass es dann so aussieht, als ob die Grafik liegt? das würde mir ne Menge an Arbeit sparen...
|
|
BrainCracked 
Hält's aus hier
Beiträge: 6
|
Verfasst: Sa 23.12.06 20:58
Ich habe jetzt folgenden COde gefunden, weiß aber leider nicht, was ich damit machen soll -.-
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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
|
procedure DrawRotatedGraphic (aCanvas: TCanvas; aGraphic: TGraphic; aAngle: Double; aOffsetX, aOffsetY: Integer); var svMode: Integer; Mat, svMat: tagXFORM; si, co: Extended; begin svMode := SetGraphicsMode(aCanvas.Handle, GM_ADVANCED); if (svMode = GM_ADVANCED) then GetWorldTransform(aCanvas.Handle, svMat); FillChar (Mat, SizeOf(Mat), 0); Mat.em11 := 1.0; Mat.em22 := 1.0; Mat.eDx := -(aOffsetX + aGraphic.Width / 2); Mat.eDy := -(aOffsetY + aGraphic.Height / 2); SetWorldTransform(aCanvas.Handle, Mat); SinCos (aAngle * Pi / 180, si, co); FillChar (Mat, SizeOf(Mat), 0); Mat.em11 := co; Mat.em12 := si; Mat.em21 := -si; Mat.em22 := co; ModifyWorldTransform(aCanvas.Handle, Mat, MWT_RIGHTMULTIPLY); FillChar (Mat, SizeOf(Mat), 0); Mat.em11 := 1.0; Mat.em22 := 1.0; Mat.eDx := (aOffsetX + aGraphic.Width / 2); Mat.eDy := (aOffsetY + aGraphic.Height / 2); ModifyWorldTransform(aCanvas.Handle, Mat, MWT_RIGHTMULTIPLY); aCanvas.Draw(aOffsetX, aOffsetY, aGraphic); if (svMode = GM_ADVANCED) then SetWorldTransform(aCanvas.Handle, svMat) else SetGraphicsMode(aCanvas.Handle, svMode); end; |
|
|
ich1506
      
Beiträge: 49
Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
|
Verfasst: Sa 23.12.06 21:05
Ja, du hast teilweise Recht!
OpenGl ist nicht einfach, aber für diesen Fall denke ich nicht zu schwierig. Die Möglichkeit Grafiken zu neigen hat man so "einfach" denke ich nicht ein zweites Mal unter Delphi. Als ich mich mal mit mit OpenGl beschäftigt hab, hat es eine Stunde gedauert und ich hatte erste Resultate, aber davon andermal ^^
Man könnte es ja so machen... (Ich weiß ja nicht genau wie dein Programm aussieht...)
Man zeichnetdas Blatt per OpenGl auf ein Panel. Das Blatt hat man unbeschrieben als Grafik, die man läd und dann den Text per Textout oder so raufschreibt. Dann gibt man OpenGl die Grafik um sie "liegend" zu zeichnen. Dann wird ein Timer ausgelöst, der per OpenGl dann die Animation übernimmt.
Also das Blatt: (nachdem OpenGl initalisiert wurde...)
glBegin(GL_Quads);
// Grafik ; Figur
glTexCoord2f(0,0); glVertex3f(0, 0, 0);
glTexCoord2f(1,0); glVertex3f(1, 0, 0);
glTexCoord2f(1,1); glVertex3f(1, 1, 0);
glTexCoord2f(0,1); glVertex3f(0, 1, 0);
glEnd;
Oder du nimmst anstelle einer Grafik (ist dann auch leichter) nur einen hellen Gelb/Sandton als Farbe.
vor dem Zeichnen muss das Ganze per glRotatef entlang der x-Achse gedreht werden.
Ich kann ja viel erzählen, doch als ich eben versucht habe es selbst zu schreiben..., naja es ist doch etwas her, dass ich mich mit Opengl beschäftigt habe.
|
|
ich1506
      
Beiträge: 49
Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
|
Verfasst: Sa 23.12.06 21:51
Ich bins noch mal
Ich hatte Langeweile und hab mal versucht es zu programmieren, naja nicht schön, aber es zeit trotzdem worum es geht.
Aber wenn du das nicht möchtest, dann kann ich es auch schnell wieder löschen 
Einloggen, um Attachments anzusehen!
|
|
BrainCracked 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 25.12.06 14:50
Ah...dankeschön. Da kann ich jetzt schan was mit anfangen, aber ich habemir überlegt, ich lasse das erstmal mit OpenGL und mache dies erst in der nächsten Version, da dies doch sehr vil Zeit in anspruch nehmen würde.
Deswegen reicht es mir diesmal schon aus, wenn der Text einfach nur geneigt dasteht und nicht nimiert ist.
Dies sollte doch mit SetWorldTransform möglich sein. Aber wie wende ich das an?
MfG
BrainCracked
|
|
ich1506
      
Beiträge: 49
Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
|
Verfasst: Di 26.12.06 02:03
Mach wie du willst, ist ja dein Programm!
Damit habe ich mich noch nicht so stark beschäftigt. Ich weiß nur, dass du dann immer auf NT-Systeme (2k oder XP) angewiesen bist und nur zwei-dimensional arbeitest.
Du musst zuerst auch den erweiterten Grafikmodus aktivieren mit SetGraphicMode(Canvas.Handle, GM_Advanced).
Opengl scheint auf den ersten Blick schwierig, doch wenn man sich mal einen Tag mit den Grundzügen beschäftigt hat, klappen Kleinigkeiten wie diese recht leicht.
Vielleicht wissen andere EEler mehr^^ oder einfach mal goooogel.
|
|
|