Chris hat geschrieben:Es sei dir verziehen... Aber wir erwarten eine umfassende Erläuterung, wenn nicht sogar ein Tutorial...
Dein Wunsch geht in Erfüllung:
Halbtutorial zu:
Wie baue ich einen
Level
of
Detail
Berechner (LoDB) in einem Programmteil, den ich nicht durchblicke....
1. Vorgedanken:
Als erstes sollte man sich klar machen, was man überhaupt will. In meinem Fall ist das eine Xpressoschaltung, die dynamisch die Winkelunterteilung eines Splines verändert, abhängig von der Entfernung. Besonderes Schmankerl soll die Winkelabhängigkeit sein, der Winkel soll sich auf 90° setzen, sobald das Objekt aus dem Blickfeld verschwindet. Wenn man einfach so mal drauflosnodet, kommt man nicht zum Ziel, weil man nicht weiß wie es den Aussehen soll.
2. Anfangen:
Äußerst wichtig sind Skizzen. Macht euch einen Plan, wie ihr machen würdet, hättet ihr Nodes die gar nicht existieren. Kein Schaltplan! Vor allem Skizzen von Sonderfällen, wie etwa bestimmte Entfernungen oder Winkel sollten beachtet werden. Schreibt euch auf, was ihr wollt, etwa "a>b ist gut; a<b ist schlecht" Sowas hilft ungemein, wenn man irgendwo steckt, wo man nicht weiterweis.
3. Richtig anfangen:
Wenn man glaubt, die Kernprobleme erfasst zu haben, kann man anfangen. Lasst euch Zeit, macht zuerst das einfache, etwa die Entfernungsberechnung. Sammelt Erfolgserlebnisse, die euch helfen, in schwierigen Momenten weiterzumachen. Die Entfernungsberechnung gehört dazu, da sie beim durchschauen der verfügbaren Nodes eigentlich ins Auge springt. Man benötigt die Globale Position der Kamera, und die des Zielobjekts, dem Spline. Hier vor allem auf die Zentralisation der Objektachse achten, sonst gibts sehr schnell Probleme. Die globalen Positionen fließen in einen Abstandsnode. Es geht auch ein Subtraktionsnode, aber da treten Probleme auf sobald man einen der drei Werte (Pos X, Y und Z) ins negative kehrt, bzw wenn das Abgezogene Objekt von Wert kleiner ist als das Abzuziehende Objekt.
Der Wert des Abstandes kommt in einen Bereichswandler. Die Eingangswerte werden als 1-1000 empfangen, mit einem Umwandlungsbereich von 1-10000, raus gehen Grad, 5°-90°. Am Spline kann geschraubt werden, aber da der Polygonverlust auch so exponentiell zur Graderhöhung liegt, kann der Graph auch linear bleiben.
4. Schwierigkeiten erfolgreich lösen.
Wer glaubt, er würde den simplen Entfernungsberechner nicht hinbekommen, brauch eigentlich auch nicht mit dem Winkelschalter anfangen. Hier muss man ein Dreieck konstruieren, aus dem man dann den Winkel an der Kamera auslesen kann. Das Dreieck wird durch die Kamera, das Zielobjekt, und einem Nullobjekt in einer festen Linie definiert. Um eine feste Position in Bezug auf die Kamera zu bekommen, ordnet man das Hilfsobjekt der Kamera unter und setzt es um eine beliebige Strecke nach vorne. Soweit einfach, jetzt kommt Xpresso ins Spiel. Um den Winkel auszulesen braucht man trigonometrie, in der Schule furchtbar langweilig, hier aber absolut notwendig. Ich bin daran gescheitert. Trotz etlicher Stunden Versuches und Irrtums bin ich nicht darauf gekommen und habe Hilfe gesucht. Im CGNetworkforum habe ich sie gefunden, der User "Bobtronic" hatte eine solche Schaltung, mit der man einem Winkel auslesen kann, erstellt. An diese habe ich dann einen Bereichswandler angeschlossen, der Werte in Radians annimmt und in Werten zwischen 1 und 2 ausgibt. Hier benötigt man den Spline, es dürfen nämlich keine Werte mit Nachkommawerten auftreten. Mithilfe des Splines ebendies gemacht. Dann ewig probiert. Multiplikation, Addition, jeweils mit dem Wert des Abstandes von Kamera zu Ziel. Gestern erneuter Versuch diesmal klappte es, weil ich nach dem Abstandsberechner noch einen Bereichswandler gesteckt hatte, der die Werte von
1-10000 auf 1-2 mit Begrenzung in beide Richtungen "kodiert" hat. Multiplikator, Danach ein Bereichswandler, Eingang 1-2, Ausgang in Grad, wieder 5°-90°. An den Spline angeschlossen, fertig.
Trotz meiner Warnungen oben habe ich vor allem Trial and Error verwendet und bin nie weitergekommen. Macht also nicht den gleichen Fehler, sondern denkt erst und nodet dann.
Ein Wunsch von mir: Falls jemand Bobtronic in einem Forum sieht, in dem er selbst angemeldet ist, könnt ihr ihm schöne Grüße, einen großen Dank und die Frage, ob ich seine Arbeit hier einfach so verwenden darf, ausrichten. Bin kein Multiforer und wills eigentlich auch nicht werden. Wäre nett von euch, Jungs.
Abschließend noch die Schaltung als Bild:

Daten sind, wenn nicht gesondert angegeben, Standart.
- Punktprodukt: Datentyp Normale
- trigonometrisch: Datentyp Acos
Bereichswandlerdaten sind oben angegeben

(müschtda suchn!)
Is des ein Text
Alternative Übersetzungsmöglichkeit zu LoDB: Lord of de Bier....
Hör ja schon auf mitm OT
Und ganz am Schluss: @Chris: Ich plane sowieso ein Tutorial zu Polygonsparen, aber dann mit Modelling.
lg karl