Registriert: Mi Apr 30, 2003 14:00 Beiträge: 31 Wohnort: Wissen
Ok.......Erstmal Guten Abend, Nacht, Morgen; wie mans will. Mich hats aufgrund dreier Fragen mal wieder hierhingezogen:
1.Gibt es eine Möglichkeit die Sichtweite zu vergrößern?-Besonders bei Mcad fällt auf, dass ab einer gewissen Distanz zu Objekten leider letztere langsam durch die Hintergrundfarbe ersetzt werden.
2.Wie kann ich es anstellen Quake 3 Objekte (oder allgemein 3d-Objekte) zufällig in eine Richtung zu bewegen; also z.B. randomize mäßig bewegt sich das Objekt die ersten 3 sek nach norden; dann per Randomize ändert es die Richtung für die nächsten 3 Sekunden nach Südosten,usw.....?
3.Beispiel:Ich habe eine Szene und bei einem bestimmten Ereigniss soll für 2 sekunden ein Bild erscheinen. dass an den vier Eckstellen des Fensters ein Dreieck zeichnet. Der Rest des Fensters soll aber wieterhin zu sehen sein; und nach 2 sek soll sich das Bild wieder entfernen und die Szene zu sehen sein; die sich aber mittlerweile evtl. wieder verändert hat. Gibt es eine Möglichkeit das Bild zu Begin zu laden und es dann bei dem Ereignis mit einem Befehl ála Visible:=true sichtbar zu machen?-Wie gesagt, das Bild soll unabhängig von der Szene immer an den drei Eckpunkten des Fensters Rahmenmäßig 4 Dreiecke zeichen; wobei sich die aktuelle Szene gleichzeitig verändert.
Registriert: So Jan 26, 2003 15:57 Beiträge: 50 Wohnort: Hamminkeln
Hi,
zu 1: ja, die gibts. das ganze macht man normalerweise beim resizen des windows. Der Befehl dafuer lautet gluPerspective. da gibt man den Sichtwinkel (fovy), das Seitenverhältnis des Windows (Aspect), die vordere ClippingPlane (ZNear) und die hintere ClippingPlane (ZFar) an. letzteren Parameter brauchst du, damit das ganze funktioniert musst du die Szene allerdings noch mal mit gltranslatef auf der z-Achse verschieben. Der Wert beträgt -1 * zNear.
zu 2: Du hast doch im Grunde schon selbst deine Frage beantwortet, Randomize. nimm zwei Variablen in der einen wird die gueltigkeitsdauer der neuen Richtung gespeichert und in der andern die Richtung, die ja logischerweise auch aus 3 zufallszahlen besteht. Der zufällige Richtungsvektor bleibt so lange aktuell, bis die verstrichene Zeit >= der gültigkeitsdauer ist.
zu 3: Erklär das bitte nochmal.
mfg, Dennis.
_________________ Bush's on a highway to hell with the whole world blind, leading it straight into the flames.
Registriert: Mi Apr 30, 2003 14:00 Beiträge: 31 Wohnort: Wissen
Erstmal thx; das mit gluperspective werde ich gleich ma ausprobieren.
zu3:Ok....gestern wars spät; ich Versuchs nochmal:
Ich eine 3d-Welt und lauf die ganze Zeit rum.Wenn jetzt aber (z.B.) eine Kollision zustandekommt soll der äußere Teil des OGL_Fensters für 2 Sekunden durch ein Bild(z.B. einem Rahmen) ersetzt werden.
Dieses Bild(Rahmen) soll aber nach 2 Sekunden wieder verschwinden; und während das Bild(Rahmen) geladen ist, soll man sich in der 3d Welt weiterhin normal bewegen können, wobei das Bild sich nicht mitbewegt, sondern als Rahmen für die 2sek am äußernen Teil des OGL_Fensters vorhandenbleibt.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Das geht doch recht einfach : Du brauchst halt nur ne Variable in die du die verbleibende Darstellungszeit des "Overlays" (so nenn ich das was du willst mal ganz spontan) speicherst.Wenn dein Spieler also kollidiert, schreibst du in die Variable die Zeit für die dein Overlay angezeigt werden soll; idealerweie nimmst du dazu einen Fließkommawert und setzt ihn dann auf 2000 (ms). Dann machst du am Ende deiner Renderroutine (nach der 3D-Ansicht) eine Abfrage ob diese Variable größer 0 ist.Wenn dies der Fall ist, dann schaltest du in die orthagonale Ansicht (gluOrtho) und zeichnest ein Quad so groß wie dein kompletter mit gluOrtho gesetzter Viewport (also der ganze Schirm), und bindest vorher an dieses Quad den Rahmen.Damit dieser teilweise transparent ist, solltest du ihn natürlich in nem Bildbearbeitungsprogramm mit einem Alphakanal versehen. Bevor du den mit ner Alphamaske versehnen Rahmen zeichnen willst, musste natürlich nich das Alpamasking aktivieren : <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>glEnable(GL_ALPHA_TEST); glAlphaFunc(<span class='integer'>0.1</span>, GL_GREATER;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3--> Wenn du deine Szene nun gezeichnet hast, verringerst du die Variable in der du die Zeit gespeichert hast entsprechend der vom letzten Rendervorgang aus vergangenen Zeit in ms (Sprichwort : Timebased (Movement) -> Siehe Bombermantut Nr.2).Wenn dann nach knapp 2 Sekunden wieder ein Wert <= 0 in der Variable steht, wird der Rand ja aufgrund der Abfrage nicht mehr gezeichnet.
Registriert: Mi Apr 30, 2003 14:00 Beiträge: 31 Wohnort: Wissen
Hm....also ich hab das mal ausprobiert; nur hab ich jetzt folgendes Problem: Da ich die Funktion in ein MCad_Projekt einfügen will kann ich jetzt aber den Befehl gltranslate nicht mehr verwenden(was vermutlich daran liegt, dass ich die Kamera fest an ein Objekt gebunden habe).
Also gibt es evtl. noch einen anderen Weg (ohne GL_Ortho) oder eine Möglichkeit trotz dem Binden an ein Objekt den Rahmen an die Position zu bringen, wo er hin soll???
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Eigentlich braucht man für die Lösung die ich beschrieben hab doch gar kein glTranslatef :unsure: Wo genau liegt denn da dein Problem.Wenn du dein Quad doch an den festen Koordianten X =0...BildRand, Y=0..BildRand, Z=0 im orthagonalen Modus zeichnest, kommt doch nirgendwo ein glTranslate vor...
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.