AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte RiB - Reflect it Baby
Thema durchsuchen
Ansicht
Themen-Optionen

RiB - Reflect it Baby

Ein Thema von dizzy · begonnen am 9. Feb 2005 · letzter Beitrag vom 28. Aug 2009
Antwort Antwort
Seite 7 von 8   « Erste     567 8      
Benutzerbild von dizzy
dizzy
Registriert seit: 26. Nov 2003
Angestachelt von diesem hier hab ich mich auch mal dran gemacht.
Ziel des ganzen: Reflektion/Refraktion auch an Bezier-Splines, und additives Zeichenen um den Eindruck von Licht zu verstärken. Herausgekommen ist:

RiB
Reflect it Baby

Ein kompletter Szenen-Editor der derzeit folgende Objekte kennt:
  • Bezier-Spline-Segmente
  • Kreise
  • Emitter
Es sollen noch folgen:
  • Linien
  • Rechtecke
  • Polygone

Ein paar Hinweise zur Bedienung:
Ein selektiertes Objekt kann mit gedrückter linker Maustaste verschoben werden. Kontrollpunkte werden nicht verschoben. Das wiederum geht nur mit zusätzlich gedrückter Ctrl-Taste (dann wird der Cursor über Kontrollpunkten auch zur Hand).
Mit gedrückter Alt-Taste werden Objekte subpixelweise (1/4 Pixel) verschoben, zum Feintuning . (Lässt sich aber nicht mit Ctrl verbinden!)
Beim Emitter-Objekt ist's etwas ander: Verschieben bleibt gleich, auch das feine Verschieben, aber der Emitter lässt sich mit zusätzlich zur linken Maustaste gedrückter Ctrl-Taste drehen, und mit Shift lässt sich der Öffnungswinkel einstellen.

Nochmal in übersichtlich...
Code:
[b]Alle Objekte[/b]
[lMaus] + Ziehen         : Verschieben
[lMaus] + [Alt] + Ziehen : fein Verschieben

[b]Emitter-Objekte[/b]
[lMaus] + [Ctrl] + Ziehen : Drehen
[lMaus] + [Shift] + Ziehen: Öffnungswinkel

[b]Andere Objekte[/b]
[lMaus] + [Ctrl] + Ziehen : Zugriff auf Kontrollpunkte
Beim Bewegen der Maus über die Szene wird das Objekt, das mit einem Klick ausgewählt würde, markiert. Wenn man darunterliegende Objekte erreichen möchte, kann man mit Rechtsklicks durch alle an dieser Stelle liegenden Objekte durchschalten. Sobald das richtige markiert ist, wird es durch Linksklick selektiert.


Das Teil rechnet bei jeder Änderung der Szene alle Strahlen neu durch! Von daher sollte man sowohl mit der Strahltiefe, als auch mit der Anzahl der Strahlen aufpassen . (Leider zählt z.Zt. das bloße selektieren noch als Änderung der Szene, und löst somit ein Neuberechnen aus. Das wird noch gefixt.)

Bekannte Bugs:
  • Die Schnittpunktberechnung der Splines hat noch Schwierigkeiten mit absolut horizontalen/vertikalen Strahlen. Das hängt mit dem zu lösenden Gleichungssystem zusammen, und wird noch überarbeitet. Da der Fall aber recht selten auftritt, hat das nicht oberste Priorität.
  • Ganz selten kam es bei mir noch zu Divisionen durch Null. Deren Ursprung konnte ich noch nicht abschließend ausfindig machen, bin aber dran


Im Archiv sind Source + EXE. Viel Spaß beim Kaputttesten
Ach ja! Die Graphics32-Lib wird zum Kompilieren natürlich benötigt


Gruss,
Fabian
Miniaturansicht angehängter Grafiken
screenie_331.png  
Angehängte Dateien
Dateityp: zip rib_166.zip (252,5 KB, 609x aufgerufen)
INSERT INTO HandVonFreundin SELECT * FROM Himmel
 
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#61
  Alt 15. Mär 2007, 12:51
Wenn ich das richtig sehe, ist dein Verfahren der Kubischen Interpolation recht ähnlich. Eine recht interessante Seite dazu gibts auch auf Wikipedia. Was ich an stückweisen Bezier-Splines so elegant finde ist, dass man volle Kontrolle über die Kurve erlangt, da man eben das Tangentenverhalten sehr intuitiv und frei beeinflussen kann. Für eine vollautomatische Interpolation, die nur über die gegebenen Punkte laufen soll, eignet sich Hermite- oder Kubische Interpolation vermutlich sogar besser. Wobei man auch bei Bezier-Segmenten die Tangente in einem Punkt anhand seiner 2 Nachbarpunkte interpolieren, und die fehlenden Kontrollpunkte somit automatisch recht sinnvoll ergänzen kann. Dann hätte man nachher mehr Einfluss auf die Kurve. Alles eine Frage von "was will ich"
Fabian K.
  Mit Zitat antworten Zitat
alzaimar

 
Delphi 2007 Enterprise
 
#62
  Alt 15. Mär 2007, 12:58
dizzy, ich glaube, ich habe die kubischen Splines aus dem Gedächtnis hergeleitet. Das Verfahren ist mit Sicherheit nicht von mir.

Wenn Du übrigens die Eckpunkte deiner Spline mit den Kontrollpunkten verbindest und von der Strecke den Mittelpunkt nimmst und dann diese Mittelpunkte wieder verbindest und davon die Mitte nimmst und dann wieder und wieder und wieder, dann hast Du ...

... die Bezierkurve. Ganz ohne Polynom oder höhere Mathematik.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#63
  Alt 15. Mär 2007, 13:13
Das wollt ich ja garnicht untergraben . Ich wollt dem Kind nur nen Namen geben, damit Suchende ein Wort haben. Diese Wiki-Seite beschreibt ebenfalls die kubische Interpolation, und es ist in der Tat ziemlich genau das, was du gebaut hast.

Was die Beziers angeht, muss ich dich aber korrigieren, bzw. ergänzen. Was du beschreibst, ist eher das Corner-Cut Verfahren, wobei da als Teilungsverhältnis idR 1/4 angesetzt wird. Beim Bezier ist der "Trick", dass man das Teilungsverhältnis verschiebt. Der De Casteljau Algo macht genau dies, also Bezierpunkte über dieses Kontruktionsverfahren ermitteln, ohne je die Bezier Summenformeln gesehen zu haben. Lustigerweise wurden dieser Algo und die Bezier Formel nahezu gleichzeitig von 2 Franzosen getrennt entwickelt, ohne dass sie voneinander wussten. Sie haben sogar beide bei konkurrierenden Autoherstellern gearbeitet. Dass beide Verfahren exakt die selbe Kurve beschreiben, hat man erst nachher entdeckt. Find ich irre
Folglich nimmt man zur Analyse die Formeln, aber auf dem PC eigentlich ausschließlich die grafische Konstruktion (da sie auch weiiiit effizienter im Rechner ist).
Fabian K.
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

 
Delphi XE5 Enterprise
 
#64
  Alt 15. Mär 2007, 13:55
Zitat von dizzy:
RiB
Reflect it Baby
Mach doch ein rekursives Backronym draus:

"RiB it Baby"
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#65
  Alt 15. Mär 2007, 16:35
Zitat von Catbytes:
Zitat von dizzy:
RiB
Reflect it Baby
Mach doch ein rekursives Backronym draus:

"RiB it Baby"
Zuviel Wine geguckt, was?

Gibt es eigentlich so etwas wie eine maximale Strahllänge?
Warum kackt mein PC hierbei (Anhang) nicht in einer (nahezu) Endlosschleife ab?
Miniaturansicht angehängter Grafiken
rib_210.jpg  
Nikolai Wyderka
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#66
  Alt 15. Mär 2007, 17:29
In deinem Screenie steht schon die Antwort "Ray-Depth" gibt an, wie oft ein Strahl reflektiert werden darf. Standardeinstellung ist: Nach 32 Reflektionen/Refraktionen hört der Strahl einfach auf.
Fabian K.
  Mit Zitat antworten Zitat
KesseK

 
Delphi 7 Personal
 
#67
  Alt 16. Mär 2007, 14:43
Wieso wird bei "Ray-Depth" immer gleich der Wert für alle Emitter gesetzt? Das find ich etwas unglücklich.
Sammy
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#68
  Alt 16. Mär 2007, 16:31
Also dein RiB it Baby ^^ hat ein Problem bei einem 90° Spiegel (Also: |<---* : * = Emitter, <--- = Strahl, | = "Spline")...

Und zwar is dann nichts mit refelktieren
Miniaturansicht angehängter Grafiken
ribitbaby_156.gif  
Fabian
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#69
  Alt 16. Mär 2007, 16:33
Den gleichen Fehler konnte ich auch feststellen, allerdings auch bei 45°-Winkeln
Nikolai Wyderka
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#70
  Alt 16. Mär 2007, 16:36
Wie wäre es, wenn man das speichern könnte

PS: Der eine Strahl ist dann irgendwie "weg"... Andere Objekte brechen ihn net mehr (egal wohin)
Fabian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 8   « Erste     567 8      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz