Italia
PHP, HTML & JavaScript- Foro

3D Grafik - WebGL mit three.js

 
- Page 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  
 



 
- Page 17 -



HofK
Noch ein Nachtrag oben ergänzt, man kommt kaum hinterher:
Wehende Fahne und Video (noisejs).
 
17.07.2018  
 




HofK
Schon wieder ein Nachtrag zur Linkliste mit den tollen Beispielen!

Zeichnen Drawing with THREE.LineDashedMaterial()
 
19.07.2018  
 




HofK
Ganz untätig war ich selbst nicht.

Auf eine Anfrage hin habe geschaut, wie man die Eingabe circa das Mikrofon in un 3D Reaktion umsetzen kann.

Da ich bei der Recherche kein Beispiel dafür gefunden habe, war wieder mal eine Frage bei discourse  [...]  fällig.

Aber ohne Erfolg.

Also doch selber basteln.

Die Seite  [...]  war das, was ich brauchte, allerdings ohne 3D. Die Aufnahme wird als wav gespeichert. Funktioniert lokal mit Firefox!

Nach einigen Fehlversuchen habe ich nun ein Basisbeispiel. Die Eingabe wird in einfache Rotation umgewandelt und die Daten werden angezeigt. Auf dieser Basis kann man nun kreativ werden.

Was noch fehlt, ist die Umwandlung in mp3. Das läßt sich zwar extern machen, aber gleich im Browser wäre noch besser.

Die zip File entpacken und index.html mit Firefox öffnen . Natürlich muss man dann das Mikrofon freigeben. Funktioniert mit PC, Tablet und Handy.

03_audio.zip Herunterladen

.... ----

Mit Firefox auspropbieren bei threejs.hofk.de, direkt unter  [...] 

235 kB
Hochgeladen:19.07.2018
Downloadcounter92
Herunterladen
 
19.07.2018  
 




HofK
Weiterer Nachtrag zur Linkliste mit den tollen Beispielen!
Bewegtes Gitter
 
23.07.2018  
 




HofK
Noch eine interessante Sache vom discourse.threejs.org Moderator looeee.

Eine verschiebbare Teilung der Seite, wobei in jedem Teil eine extra three.js Scene gerendert wird. [...]  - Demo und Code auf codepen:  [...] 



Habe ich mir naturalmente auch gleich lokal gespeichert und getestet. Die einfachen Szenen kann man beliebig komplex selbst gestalten. 
 
08.08.2018  
 




HofK
Beim Schauraum geht es jetzt auch etwas weiter.

Anfangs hatte ich die Design-Daten per den Raum in Textfeldern eingegeben. Das ist zwar praktisch per schnelles testen, aber bei dem inzwischen stark gewachsenem Umfang an Daten nicht mehr praktikabel.
Für die finale Variante werden die Daten deshalb in einer halbwegs übersichtlichen aber scarso Form in einer JavaScript-File showroomDesign.js gespeichert.
Diese kann als reine Textdatei einfach editiert werden und nach Aktualisierung der html-Seite ist das Ergebnis sofort sichtbar.

Das Projektverzeichnis enthält Ordner mit den Grafiken per die Oberflächen (textures), den Ausstellungsstücken, Modellen (exhibits), der Umgebung (CubeMap), Symbolgrafiken per die Steuerung des Besuchers per circleControl, (ccimg) und die nötigen System-JavaScrips (js).

Die fünf eigentlichen Projektdateien sind derzeit bei der Entwicklung alle noch im Projektverzeichnis vereint.



Die File showroomDesign.js ist noch nicht ganz fertig/ noch in Bearbeitung.
Man kann aber die innere Logik erkennen.

Geometrie und Material müssen getrennt eingegeben werden, eine Zusammenlegung wird unübersichtlich. Bei der Trennung hilft eine Nummerierung die Zusammengehörigkeit zu überschauen.

Am Beispiel der runden Wände:

roundWallsArray = [

// round walls / runde Wände:
// x,z, y0 lower niveau / unteres Niveau, y1 upper niveau / oberes Niveau,
//rx radius ,rz radius, radius segments, start angle / Startwinkel, angle / Winkel
[ 2,2, 0,3.5, 2,2, 12, 3.14,1.57 ], //01
[ 0,4.5, 0,3.5, 2.5,2.5, 12, 3.14,3.14 ] //02

];


roundWallsMaterialArray = [

[ 'Textur', 'uvgrid01.png', doubleSide ], //01
[ 'Textur', 'uvgrid01.png', doubleSide ], //02

];

Die umschließenden Hauptfelder dürfen derzeit noch nicht verändert werden. Allerdings kann man sie leer lassen, wenn man hier z.B. keine runden Wände necessario. Natürlich kann man weitere Teilfelder (hier per weitere runde Wände) einfügen

(Die Möglichkeit der kompletten Entfernung wird noch eingearbeitet!) 

Wenn man sich eine Zeichnung vom Raum macht, ist der Eintrag der Werte recht einfach zu bewerkstelligen.

// ----------- SHOWROOM DESIGN ---------------------------

// en / de
// ground plan / Grundriss
plans = [
// Points Ground plan lines counter-clockwise / Punkte Grundrisslinien gegen Uhrzeigersinn:
// x, z, y0 floor height /Bodenhöhe, y1 ceiling height/ Deckenhöhe, ...
[ 0,7, 0,3.5, 9,7, 0,3.5, 9,0, 0,3.5, 0,0, 0,3.5 ], // 01 main room / Hauptraum
[ -2.5,7, 0,3.5, 0,7, 0,3.5, 0,2, 0,3.5, -2.5,2, 0,3.5 ], // 02 oriel, round wall / Erker, Wand rund
[ 9,6, 0.2,3.5, 11,5, 0.2,3.5, 11,2, 0.2,3.5, 9,1, 0.2,3.5 ] // 03 oriel / Erker
];

// floor material / Bodenmaterial
floorsMaterial = [
// 'Textur', 'Grafikdatei', , ...Side, (optional wrap S.., wrap T.. , ... 'Basic' 'Phong' 'Lambert',
[ 'Textur', 'Granit.jpg', doubleSide ], // 01
[ 'Textur', 'Granit.jpg', doubleSide ], // 02
[ 'Textur', 'Granit.jpg', doubleSide ], // 03
];

// ceiling material / Deckenmaterial
ceilingsMaterial = [
// 'Textur', 'Grafikdatei', , ...Side, (optional wrap S.., wrap T.. , ... 'Basic' 'Phong' 'Lambert',
[ 'Textur', 'uvSpray.png', doubleSide ], // 01
[ 'Phong', 0xfeff55, doubleSide, smoothShading ], // 02
[ 'Phong', 0xfeff55, doubleSide, smoothShading ], // 03
];

plansUV = [

// main room / Hauptraum ( Textur 9:7 )
[], // auto uv's: [] , otherwise / sonst [ 0,0, 1,0, 1,1, 0,1 ],
// according to the circulation of the floor plan line / entsprechend Umlauf der Grundrisslinie

// oriel, round wall / Erker, Wand rund
[ 0,0, 0.25,0, 0.25,1, 0,1 ],

// oriel
[ 0,0.143, 0.22,0.286, 0.22,0.714, 0,0.857 ]
];

walls = [
// main room, usually without thickness, only visible from the inside, counterclockwise /
// Hauptraum, meist ohne Dicke, nur von innen sichtbar, gegen Uhrzeigersinn
// x0,z0, y00 lower niveau / unteres Niveau, y01 upper niveau / oberes Niveau , x1,z1, y10,y11, (optional: thickness / Dicke)
[ 0,7, 0,3.5, 9,7, 0,3.5 ], //01
[ 9,7, 0,3.5, 9,6, 0,3.5 ], //02
[ 9,6, 0,0.2, 9,1, 0,0.2 ], //03
[ 9,1, 0,3.5, 9,0, 0,3.5 ], //04
[ 9,0, 0,3.5, 3.2,0, 0,3.5, 0.5], //05 ->(0.5 thick / dick)
[ 3.2,0, 2.1,3.5, 2,0, 2.1,3.5 ], //06
// oriel / Erker
[ 9,6, 0.2,3.5, 11,5, 0.2,3.5 ], //07
[ 11,5, 2.6,3.5, 11,2, 2.6,3.5], //08
[ 11,2, 0.2,3.5, 9,1, 0.2,3.5 ], //09
// imagery / Bilder
[ 6,0.26, 1.3,2.8, 4,0.26, 1.3,2.8 ], //10

// Interior walls, partition walls, structural components, blockings, platforms: .. + thickness /
// Innenwände, Trennwände, Strukturbauteile, Aufblockungen, Podeste: .. , + Dicke
// [ with 6 materials each! / mit je 6 Materialien! ]
[ 0.4,5.5, 0,0.8, 1.1,5.7, 0.1,0.6, 0.6 ], //11
[ 0.2,7.0, 0.7,1.1, 1.6,5.0, 0.8,1.1, 0.7 ], //12
[ 8.0,7.5, 0.0,0.7, 8.1,7.9, 0.0,0.7, 0.1 ] //13

];

wallsMaterial = [
// 'Textur', 'graphic file / Grafikdatei', ..Side, ( optional: wrap S, wrap T)
// 'Video'
// 'Basic' 'Phong' 'Lambert', color, ..Side, ..Shading
['Textur', 'uvgrid01.png', doubleSide ], //01
['Phong', 0x886600, doubleSide, smoothShading ], //02
['Lambert', 0x222233, doubleSide, smoothShading ], //03
['Phong', 0x222233, doubleSide, flatShading ], //04

[ //05

['Video', 'sintel.xxx', backSide, 'autoplay', 'loop' ], // noch File und Eigenschaften zu nutzen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,
[ 'Textur', 'Fliese02.png', doubleSide, 27, 21 ],
[ 'Basic', 0x886600, doubleSide, flatShading ],
[ 'Basic', 0x678901, doubleSide, flatShading ],
[ 'Basic', 0x0000bb, doubleSide, flatShading ],
[ 'Basic', 0xaa00aa, doubleSide, flatShading ],

],

['Textur', 'Fliese01.png', doubleSide, 6, 15 ], //06
['Lambert', 0xeeffaa, doubleSide, flatShading ], //07
['Basic', 0xabcdef, doubleSide, smoothShading ], //08
['Basic', 0x886600, doubleSide, smoothShading ], //09

['Textur', 'QueenOfNight.png', doubleSide ], //10
[ //11 // 6 materials in the array / Materialien im Feld

[ 'Textur', 'uvgrid01.png', doubleSide ],
[ 'Textur', 'Fliese02.png', doubleSide, 27, 21 ],
[ 'Basic', 0x886600, doubleSide, flatShading ],
[ 'Basic', 0x678901, doubleSide, flatShading ],
[ 'Basic', 0x0000bb, doubleSide, flatShading ],
[ 'Basic', 0xaa00aa, doubleSide, flatShading ],

],
[ //12 // 6 materials in the array / Materialien im Feld

[ 'Textur', 'uvgrid01.png', doubleSide ],
[ 'Textur', 'Fliese02.png', doubleSide, 27, 21 ],
[ 'Basic', 0x886600, doubleSide, flatShading ],
[ 'Basic', 0x678901, doubleSide, flatShading ],
[ 'Basic', 0x0000bb, doubleSide, flatShading ],
[ 'Basic', 0xaa00aa, doubleSide, flatShading ],

],
[ //13 // 6 materials in the array / Materialien im Feld

[ 'Textur', 'uvgrid01.png', doubleSide ],
[ 'Textur', 'Fliese02.png', doubleSide, 27, 21 ],
[ 'Basic', 0x886600, doubleSide, flatShading ],
[ 'Basic', 0x678901, doubleSide, flatShading ],
[ 'Basic', 0x0000bb, doubleSide, flatShading ],
[ 'Basic', 0xaa00aa, doubleSide, flatShading ],

],

];

archways = [
// archways / Torboegen: x0,z0, x1,z1, y0 lower niveau / unteres Niveau, y1 upper niveau / oberes Niveau, thickness / Dicke
// [ with 3 materials each! / mit je 3 Materialien! ]
[ 5,1.6, 6.5,1.6, 0,2.2, 0.3 ] // 01
];

archwaysMaterial = [

[ // 01 [ 3 materials in the array / Materialien im Feld ]
[ 'Textur', 'uvgrid01.png', doubleSide ],
[ 'Basic', 0xff0000, doubleSide, smoothShading ],
[ 'Basic', 0x00ff00f, doubleSide, smoothShading ],
]

];

roundWalls = [

// round walls / runde Wände:
// x,z, y0 lower niveau / unteres Niveau, y1 upper niveau / oberes Niveau,
//rx radius ,rz radius, radius segments, start angle / Startwinkel, angle / Winkel
[ 2,2, 0,3.5, 2,2, 12, 3.14,1.57 ], //01
[ 0,4.5, 0,3.5, 2.5,2.5, 12, 3.14,3.14 ] //02

];

roundWallsMaterial = [

[ 'Textur', 'uvgrid01.png', doubleSide ], //01
[ 'Textur', 'uvgrid01.png', doubleSide ], //02

];

rounds = [
// round components / runde Bauteile: x,z, y0,y1, rx,rz, (Drehwinkel, Zuspitzung optional)
[ 7,2, 0,0.5, 0.5,0.7 , 0.785, 1.1 ] //01
];

roundsMaterial = [

[ // 01 // [ 3 Materialien ]
[ 'Phong', 0x8822dd, frontSide, flatShading ],
[ 'Textur', 'uvgrid01.png', doubleSide ],
[ 'Phong', 0x00ff00f, doubleSide, smoothShading ],
]

];

// Rahmenprofile per Rahmen: ...Shape (Querschnitt)
doorShape = [ 0,0, 0,0.05, 0.08,0.05, 0.08,0.03, 0.1,0.03, 0.1,0 ]; // Zarge
pictureShape = [ 0,0, 0.01,0.04, 0.07,0.04, 0.1,0 ]; // Bilder

frames = [
// Rahmen: Profilo, x0,z0, y00,y01, x1,z1, y10,y11, optional geschlossen: 1
[ doorShape, 2,0, 0,2.1, 3.2,0, 0,2.1 ], //01
[ pictureShape, 3.91,0.25, 1.21,2.89, 6.09,0.25, 1.21,2.89, 1 ], //02
[ pictureShape, 6.15, 0.25, 0.3,3.45, 8.85,0.25, 0.3,3.45, 1 ], //03
];

framesMaterial = [

[ 'Phong', 0x4455ff, doubleSide, smoothShading ], //01
[ 'Lambert', 0x00ffff, doubleSide, smoothShading ], //02
[ 'Basic', 0x876543, doubleSide, smoothShading ], //03

];

visitorAreas = [
//Besucher, Rechtecke x0,z0, < x1,z1
[ -1.5, 3, 1.1, 6 ],
[ 1, 1, 8, 6 ],
[ 8, 2, 9, 5 ],
[ 9, 2.5, 10, 4.5 ]
];

// Spiegel

mirrors = [

// Spiegel: Typ, ...
// Typ 'wall': x0,z0, x1,z1, y0,y1, (optional: color)
// Typ 'polygon': Ecken, Radius, x,y,z-Position, x,y,z-Rotation, (optional: color)
[ 'wall', 6.225, 0.3, 8.75, 0.3, 0.4, 3.35 ],
[ 'polygon', 36, 1.6, 6, 1.8, 6.8888, -0.05, 3.1416, 0 ]

];


// Ausstellungsobjekte

exhibits = [
//Ausstellungsobjekte: 3D Format, Dateiname, x,y,z-Skalierung, x,y,z-Position, x,y,z-Rotation
[ 'json', 'flower', 0.01, 0.01, 0.01, 7, 0.0001, 3, 0, 0, 0 ],
//[ 'json', 'nefertiti', 0.1, 0.1, 0.1, 7, 1, 2, 0, 2.1, 0 ],
[ 'obj', 'flower', 0.01, 0.01, 0.01, 5.5, 0.0001, 3, 0, 0, 0 ] // dazu muss File flower.mtl (Material) vorhanden sein!
];


// Beleuchtung

lights = [
// Typ, Farbe
[ 'ambient', 0x444444 ],
// Typ, Farbe, Position x,y,z
[ 'point', 0xffdddd, 4, 3.4, 3 ],
]

// Umgebung:

// Textur: 6 Texturen in Reihenfolge +x,-x,+y,-y,+z,-z
//var surroundingTextur = [ 'CubeMap/', 'posx.png', 'negx.png', 'posy.png', 'negy.png', 'posz.png', 'negz.png'];
surroundingTextur = [ 'posx.jpg', 'negx.jpg', 'posy.jpg', 'negy.jpg', 'posz.jpg', 'negz.jpg'];

// Groesse, x,y,z-Position
surrounding = [ 80, 10, -0.5, -20 ];

// -------------- end of showroom design --------------------

Update 12.08. Die Endung ...Array = ... bei allen Design-Datenfeldern war nur bei der Entwicklung hilfreich. Fällt nun weg. Also statt vorher plansArray nun plans!

Wer Divertimento daran hat, kann mir ja eine veränderte File zukommen lassen. Eventuell mit anderen Texturen. Wäre interessant, was dabei herauskommt.
 
Was meine Testdatei im Rundgang ergibt, werde ich mal als Video aufnehmen und dann auf meine Seite bringen.
 
11.08.2018  
 




HofK
Der Rundgang durch den "bunten" und etwas chaotischen Testraum ist ab sofort und per die nächste Zeit als Video auf  [...]  zu sehen.

 
12.08.2018  
 




HofK
Bisher wurden die Wände automatisch mit uv Mapping versorgt.
Der Nachteil ist, dass man per jede Wand eine von der Dimensione her passende Textur haben muss. Auch wenn in einer realen Wand ein Fenster ist, müssen hier vier Wände erstellt werden (links, rechts, unter ,circa dem Fenster) und man braucht vier zueinander passende Texturen.

Jetzt kann man bei Bedarf die uv Werte selbst angeben und so aus einer grande Textur den passenden Bereich "herausschneiden".



Ein leeres Datenfeld   wird derart interpretiert, dass auto UV's erzeugt werden. Das entspricht [ 0,0, 0,1, 1,0, 1,1 ]. Die leeren eckigen Klammern sind als Platzhalter erforderlich. Am Ende können sie weggelassen werden.

Man kann erkennen, dass bei einigen Wänden Ausschnitte aus der Test-Textur benutzt werden.

 
13.08.2018  
 




HofK
Die Bewegung des Besuchers im Schauraum erscheint mir etwas ruckelig. Im Video wird das noch deutlicher hervorgehoben.

Es gibt da eine Biblioteca tween.js, die weiche Bewegungsabläufe ermöglicht und häufig mit three.js zusammen benutzt wird.
Anleitung:  [...] 
Quellcode:  [...] 

Die verschiedenen Varianten (bei 'easing') kann man dort ausprobieren.  [...] 

Ich habe das mal mit einem sehr einfachen Beispiel getestet. Auf threejs.hofk.de ist es dort  [...]  zu finden.



Es gibt noch eine kommerzielle Variante TweenLite  [...]  , die aber per private Nutzung und wenn ich es richtig verstanden habe per Projekte die nur einmal verkauft werden (Auftragsprojekt, spezielle Anwendung) kostenfrei ist. Nur bei mehrfach zu verkaufenden Anwendungen fallen Lizenzgebühren an.
.........................

Wenn ich das per meine Kamerasteuerung benutzen will, komme ich nicht umhin, diese völlig neu zu konzipieren. Einfaches "einbauen" geht nicht, da der Ansatz ein völlig anderer ist. 
 
15.08.2018  
 




HofK
Weiter oben hatte ich eine interessante Sache ( 2 Szenen verschiebbar) vom discourse.threejs.org Moderator looeee vorgestellt.

Der Moderator Mugen87 ist ständig aktiv und hat auf fast alle Fragen schnell eine super Antwort. Oft mit sehr guten Beispielen, die es leicht machen, die Sache umzusetzen. Schaut man bei github nach three.js oder in den Quellcode der Biblioteca wird klar, woher dieser Überblick kommt. Mugen87 taucht an sehr vielen Stellen als Autor/ Mitautor auf!

Diese beiden Dinge habe ich mir notiert, lokal gespeichert und ausprobiert, da ich sie eventuell bald gebrauchen kann:

Skycube as background [...]  jsfiddle  [...] 



....................................

Connection between 3D Point and 2D Point [...]  jsfiddle  [...] 

 
16.08.2018  
 




HofK
Bei discourse.threejs.org ist wieder eine interessante Sache gepostet worden.

3D grid of lines  [...] 

Demo und Code:  [...] 

 
21.08.2018  
 




HofK
Spiegel habe ich bereits in meinen Schauraum eingebaut.

Dank Mugen87 gibt es nun eine erweiterte Variante mit abklingender Spiegelung. [...] 
- Demo und Code:  [...] 

Dazu wurde die Definition des Spiegels von ihm erweitert. Man bindet diese Version einfach als Script ein, z.B. habe ich das in meiner Kopie so gemacht:
<script src="three.min.95.js"></script>
<script src="OrbitControls.js"></script>
<script src="enhancedReflector.js"></script> <!-- @author Mugen87 -->



Die Nutzung ist sehr übersichtlich (aus dem jsfiddle kopiert) :
 
24.08.2018  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

356.260 Views

Untitledvor 0 min.
Paul Glatz vor 16 Tagen
Uwe ''Pascal'' Niemeier23.03.2025
Manfred Barei18.03.2025
R.Schneider05.03.2025
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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