Deutsch
PHP, HTML & JavaScript- Forum

3D Grafik - WebGL mit three.js

 
- Seite 1 -



HofK
Auf einen heißen Tipp von IF hin, habe ich mir mal
three.js  [...]  angeschaut. Da  [...]  (ganz unten) die ersten Resultate.
 
31.01.2016  
 



 
- Seite 28 -



p.specht

Muss man da in Kugelkoordinaten umrechnen?
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
10.10.2019  
 




HofK
Bei der BufferGeometry von three.js sind die Eckpunkte der Dreiecke in kartesischen Koordinaten anzugeben. Sie werden in einem Float32Array  [...]  abgelegt. Die Dreiecke werden mittels Indizes definiert. Sie geben die beteiligten Eckpunkte an. Indizes sind in Uint32Array zu halten.
g.indices = new Uint32Array( faceCount * 3 );
g.positions = new Float32Array( posCount * 3 );
g.setIndex( new THREE.BufferAttribute( g.indices, 1 ) );
g.addAttribute('position', new THREE.BufferAttribute( g.positions, 3 ) );

Für die Berechnung nutzt man dann wie üblich trigonometrische Funktionen. Siehe oben. Auch um die Platzierung des Lochs zu erreichen, benötigt man Trigonometrie.
// rotate around z axis
xb = xa * Math.cos( theta ) - ya * Math.sin( theta );
yb = xa * Math.sin( theta ) + ya * Math.cos( theta );
// rotate around y axis
x = -xb * Math.cos( phi ) + za * Math.sin( phi );
z = xb * Math.sin( phi ) + za * Math.cos( phi );
y = yb;// for storing and checking bounds
g.positions[ posIdx     ] = x;
g.positions[ posIdx + 1 ] = y;
g.positions[ posIdx + 2 ] = z;

------------------------------------------------------------------------

zum Problem "Wenn der in die Schnittlinie passende Zylinder über die Kugel hinausragt"

Man findet recht leicht Abhängigkeiten zwischen x, y und z, aber bisher habe ich keine brauchbare Parametrisierung erzeugen können.





Deshalb begrenze ich die Exzentrizität erst einmal.
 
13.10.2019  
 




p.specht

Ist ja bei normalen flachen Ellipsen schon schwer, den Umfang zu bestimmen. Wie schwer muss das erst bei ´Pringelloiden´ sein ...
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
15.10.2019  
 




HofK
Bei einem Test mit mehreren verschieden großen kreisförmigen Löchern und einem mittels Punkten definiertem Loch in der Kugel gab es einen Fehler.

Was bei allen vorherigen Tests nicht auftrat, war nun geschehen! Die aktuelle Front überlief sich selbst. Bei der Kugel ohne Löcher ist der Test auf Überlappung weiterhin nicht nötig (ist auch von E.Hartmann so dargestellt).

Beim Zylinder ist er eigentlich immer in Aktion.

Also habe ich den Test checkDistancesToSplit( m ); und die zugehörigen Programmteile ergänzt.

Auf GitHub gibt es in einer extra Datei THREEi_ONLY_SphereWithSomeHoles.js exclusiv die Version mit weniger Aufwand. Sie reicht ja für viele Fälle aus, man kann es austesten.

Auf Discourse  [...]   [...]  und meiner Seite  [...]  wurden die Änderungen bereits vorgenommen.
 
18.10.2019  
 




p.specht

Gut beschreiben, wann was benötigt wird - dann klappt es auch bei anderen Anwendern.
Gruss
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.10.2019  
 




HofK
HofK (13.10.2019)
Deshalb begrenze ich die Exzentrizität erst einmal.


Es hat mir keine Ruhe gelassen.

Eine Parametrisierung über die Bogenlänge führt bei einfachen Beispielen schon zu sehr aufwändigen Integralen, die schwer oder überhaupt nicht geschlossen lösbar sind. Im Netz findet man immer nur das primitivste Paradebeispiel.

Deshalb habe ich nach einer iterativen Lösung gesucht. Das Problem ist der Drehwinkel, der sich nichtlinear passend verändern muss. Da ich nur eine ungefähre Seitenlänge der Dreiecke erzeugen muss, taste ich mich mit von Teilstrecke zu Teilstrecke variabler Winkeldifferenz voran und breche ab, wenn die Länge etwa erreicht ist.
while ( rdc0 >= 0 && phi < phiMax ) {

    phi0 = phi;
    sqlen0 = 0;

    while ( sqlen0 < 0.81 * dd ) {

        phi += dPhi;
        rdc0 = rex + 2 * r * exc * Math.cos( phi );
        x = r * Math.cos( phi );
        y = Math.sqrt( rdc0 );
        z = r * Math.sin( phi );
        dx = x - x0;
        dy = y - y0;
        dz = z - z0;
        sqlen0 =  squareLength( dx, dy, dz );

    }

    ...

Dabei ist noch der Anstieg xz zu y Math.sqrt( dx * dx + dz * dz ) / dy zu beachten. Um letztlich das Ende ohne minimales Reststück zu absolvieren, wird ab 2,4 facher ungefährer Seitenlänge je nach Anstiegsvariante passend geteilt.

Der Algorithmus funktioniert mit allen Lagevarianten und erzeugt die Punkte für ein Viertel. Der Rest wird dann einfach gespiegelt.







 
23.10.2019  
 




p.specht

Wow!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
23.10.2019  
 




HofK
Wieder mal ein "wunderbarer" Fehler, aber im Prinzip klappt es.





So ist es besser.



Knappe Sache.

 
27.10.2019  
 




p.specht

Das sind ja Halskrausen gemäß Spanischem Hofzeremoniell!  [...] 
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
28.10.2019  
 




HofK
Die Möglichkeiten sind schier unbegrenzt! ---

Aber jetzt erst einmal das Gegenstück zur Kugel. Der Zylinder mit passender Öffnung für die Kugel.



Das ging auch nicht gleich fehlerfrei. Statt eines Loches eine Füllung. Was man damit wohl anstellen könnte? 



Zusammengefügt erkennt man die exakte Passung.



 
30.10.2019  
 




HofK
Das Zusammenfügen von zwei Zylindern funktioniert nun auch exzentrisch. Sowohl seitliches Loch, als auch oben und unten.



Fehlt noch die exzentrische Schnittlinie für die Kugel oben und unten. Sie kann recht einfach von der Kugelvariante übernommen werden.
 
31.10.2019  
 




p.specht

Hmmm... wie könnte man einen "Wasserspiegel" in einem solchen Gefäß steigen lassen?
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
31.10.2019  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

333.543 Betrachtungen

Unbenanntvor 0 min.
HofK vor 26 Tagen
Rschnett24.08.2024
Michael W.28.03.2024
Thomas Zielinski17.02.2024
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie