PHP, HTML & JavaScript- Forum | | | | - page 1 - |
|  HofK | sur une appeler Tipp de IF hin, habe je mir la fois three.js [...] angeschaut. là [...] (entier unten) qui ersten Resultate. |
| | | | |
| | | | - page 2 - |
| | Unterthema: Informationsinteresse 3D Grafik? [...]  erzeugt. |
| | | | |
| |  HofK | là zum 1. Advent ici im Flachland encore toujours aucun einzige Schneeflocke dans Sicht ist, voulais je mir absolument une digitale Flocke gönnen.
on braucht alors un Schneeflockenbild comme Textur, ne...aucune Problem. dans den (englischen) Foren geschaut, Voir le texte source vereinfacht übernommen. aucun Schneeflocke dans Sicht mais Chrome gibt une Fehlermeldung:

jusqu'à presque zur Verzweiflung gesucht et qui wildesten Sachen ausprobiert, jusqu'à je zufällig statt dem sonst pour three.js bevorzugtem Chrome plus aus Versehen Firefox erwischt habe: là kam qui Schneeflocke!
quelque chose recherchiert. Es liegt wohl à den unterschiedlichen Sicherheitsstandards qui Browser, Einheitlichkeit wäre oui aussi trop fastidieux pour den Normalanwender.
seulement Firefox erlaubt magasin qui lokalen Dossier (Schneeflocke), aussi chez Opera ist aucun Flocke dans Sicht. qui Fehlermeldung ist seulement qui Folge, là sans qui Textur qui Maschen simple pas erzeugt volonté!
Stellt on qui Dossier ins Netz et ouvrez vous online avec den Browsern, peux on sich qui Flocke dans den verschiedensten Browsern dans Bewegung regarder. Sogar dans edge, si on Zeit hat trop attendre et qui Ruckelei pas stört! ici wird qui Dossier oui vom Server geladen, c'est toujours ok.
Irgendwie blöd, dass pas alle Browser erkennen, dass aussi cela JavaScript bistrot gespeichert et bistrot geladen wird.
mais depuis je cela Speicherchaos de Android 4.4 ergründet habe et toujours wieder versuche aussi edge une chance trop donner, wundert mich eigentlich rien plus dans Bezug sur qui Programmierqualitäten chez den "Großen".
là [...] bzw. [...] peux on Wintergefühle erhaschen et den kompakten Voir le texte source beschauen. une offline-variante ist ici eventuell verwirrend!
qui grand Flockenwirbel ist déjà dans travail! 
NACHTRAG: Im Beispiel Androide [...] wurde Revision 73 benutzt. là une bereits dans cette Version comme vieilli gekennzeichnete Verfahrensweise! |
| | | | |
| |  HofK | qui grand Flockenwirbel ist là.

30000 Schneeflocken je Schneeschauer tomber doucement. qui technologie derrière elle nannte sich chez Three.js einmal Partikelsystem, eh bien est vous Punktesystem.
cela Problem ist, dass on chez qui cherche presque ausschließlich sur quelque chose ältere Forenbeiträge bzw. Tutoriels stößt. cet nutzen qui vieille variante.
je voulais mais absolument qui aktuelle r82 benutzen! quel Begriff besser ist ? il y a Punkte, qui mais comme Quadrat une Taille avons (size) et une Textur conservé peut. c'est comment qui Knoten eines Körpers sans Kanten et Flächen. Es wird effectif gerendert. j'ai pas versucht 30000 Schneeflocken comme Körper (dans einer Boucle ersteimal programmtechnisch ne...aucune Problem) trop erstellen à Browser dans qui Knie aller trop laisser.
c'est comment toujours si on sait comme allez, entier simple. Seltsamerweise wird qui Taille (size) im matériel avec eingestellt.
// Schneeflocken (comme System de Punkten) pointCount = 30000; // Nombre de Punkte (Schneeflocken) points = new THREE.Geometry(); // une allgemeine Geometrie pour qui Punkte erzeugen var loader = new THREE.TextureLoader(); // un Lader pour qui Textur loader.load("schneeflocke.jpg", function(texture){ // Textur magasin et avec cela juste Punktesystem erzeugen pointsMaterial = new THREE.PointsMaterial({ size: 21, color: 0xcccccc, map: texture, transparent: vrai, opacity: 0.95 }); for (var p = 0; p < pointCount; p++) { // zufaellige Koordinaten erzeugen x = Math.random() * 4000 - 2000; y = Math.random() * 2000 - 500; z = Math.random() * 2000 - 2000; point = new THREE.Vector3(x, y, z); // individuel Punkt erzeugen (comme Ortsvektor seiner Koordinaten) points.vertices.push(point); // Punkt comme Knoten qui Punkte-Geometrie hinzufuegen } // System qui Punkte pointSystem = new THREE.Points( points, pointsMaterial); // entsprechend THREE.Mesh chez Koerpern // zur Szene hinzufuegen scene.add(pointSystem); pointSystem.rotation.x = 0.9; });
chez qui Animation wird cela Punktesystem zur Rotation gebracht et erzeugt so qui Schneeschauer.
là fällt qui Schnee: [...] bzw. [...] 
comment im vorherigen Beitrag bemerkt, ist une offline-variante ici pas très sinnvoll. |
| | | | |
| |  HofK | encore einmal Knoten: --------- Besser comme solche Schleifen!
Weiter dessus wurde qui Nummerierung qui Knoten avec einem zwar envoyons, mais konstruktiv aufwändigem Rohrdesign realisiert. qui Browser muss très viele geometrische Objekte verkraften - cela dauert ou bien zwingt manchen dans qui Knie!
c'est pourquoi habe je fois le technologie qui Schneeflocke (Textur) zur Nummerierung benutzt. qui transparenten .png Fichiers qui Les chiffres besoin lediglich etwa 2KB. qui grundlegende technologie einer durchsichtigen table ist presque identique. là mais toujours lediglich Bilder angepinnt volonté, ist qui Rechenlast deutlich geringer. c'est pourquoi juste trois Körper.

aussi qui Ausrichtung zur caméra dans qui xz plaine ist comment dessus realisiert.
là [...] bzw. [...] peux on qui l'affaire ergründen.
intéressant, dass chez qui THREE.SphereGeometry (Kugel) qui Pole et qui Nullmeridian pro Knoten scheinbar plusieurs Nummern besitzen. Zieht on une solche Knotennumer la fois comment une nez (siehe dessus) heraus, stellt on fest, cela qui unterschiedlichen Knoten seulement sur einer Position liegen.
avec cela peux on ensuite interessante Sachen faire, z.B. qui Kugel auffalten.
L'idée, qui Nummerierung dans selber Verfahrensweise avec einfachen 2D Sprites je Ziffer trop erledigen, funktioniert pas. cet Sprites richten sich ensuite einzeln automatisch toujours zur caméra aus. Schaut on de hinten, dreht sich z.B. 109 trop 901 - faux.
qui dans obigem Knotenbeitrag angesprochene source [...]  basé sur qui alten Revision 60 et erstellt droite compliqué seulement EIN Sprite pour qui komplette numéro! |
| | | | |
| |  HofK | bientôt ca va daran den Weihnachtsbaum trop schmücken. là habe je la fois quelques effektive Methoden ausprobiert - zumindest 3D virtuell.
simple une Weihnachtsbaumkugelkette richtig dans Schwung apporter et sur den arbre werfen. si vous ensuite austrudelt, ist qui arbre schick.

qui Kern qui l'affaire est un Punktesystem aus 600 Punkten. cet volonté dans qui Animation sur einer Spirale angeordnet. qui Punkte bewegen sich langsamer werdend sur qui Spirale. Pour einiger Zeit, si le Frequenz droite petite ist, wird qui Bewegung gestoppt. qui Kette hängt am arbre - fertig.
AUSZUG: JavaScript
// Punktesystem anzahlPunkte = 600; pointsGeometry = new THREE.Geometry(); for (var i = 0; i < anzahlPunkte ; i++) pointsGeometry.vertices.push( new THREE.Vector3(0,0,0) ); // ersteinmal alle Punkte im Ursprung texture = THREE.ImageUtils.loadTexture( 'redball.png' ); pointsMaterial = new THREE.PointsMaterial({color: 0xeee8aa, size: 50, map: texture, transparent: vrai, opacity: 0.7 , alphaTest: 0.5}); var pointSystem = new THREE.Points( pointsGeometry, pointsMaterial ); pointSystem.position.set(0, 85, 0); scene.add( pointSystem );
function spirale(a,f,t) { return new THREE.Vector3( a*f*t*Math.cos(f*t), 700-2*t, a*f*t*Math.sin(f*t) ); // x, y, z } function animate() { requestAnimationFrame( animate ); controls.update(); t = clock.getElapsedTime(); f = 1.8 - Math.atan(0.5+t); if (f>0.25){ for( var v = 0; v < pointsGeometry.vertices.length; v++ ) { pointsGeometry.vertices[v] = spirale(2, f, t + 1.2*v); // neue Koordinaten chaque individuel Punktes (v) } pointsGeometry.verticesNeedUpdate = true; // zur Aktualisierung qui Koordinaten qui Punkte notwendig } camera.position.x = 1800*Math.sin(0.1*t); renderer.render( scene, camera ); } Detail:

là [...] bzw. [...] peux on es anschauen et den gesamten Quellcode einsehen.
Problem im normalen vivre: comment bekommt on qui Kette derart dans Schwung et ist ensuite genug place im pièce um den arbre herum.  |
| | | | |
| |  HofK | Beim obigen Androiden Ring-Tennis habe je qui Wurf-et Stoß-Physik selbst dans qui Animation programmiert.
trop three.js gibt es mais aussi un passendes Physik-Plugin. [...] 
Allerdings bezieht sich qui dernier Changement qui Beispiele sur qui Revision 73 de three.js avant etwa einem l'an. Beim Versuch, Beispiele entsprechend selbst nachzuvollziehen erhielt je toujours wieder diverse Fehlermeldungen aus den Bibliotheken.
qui Verknüpfung de three.js et den weiteren Bibliotheken mais est droite komplex. qui Versionen - si là un Byte querliegt ...
Weiter gekramt, aussi dans qui Röhre:
là [...] findet on qui pour benutzte page "ICE code editor: [...] " ensuite findet on là qui three.js qui Revision 52 avant. en supplément convenable ensuite qui nécessaire Versionen qui Bibliotheken: physi.js ammo.js physijs_worker.js
avec cette älteren Version hat es ensuite sur Anhieb geklappt.
avec etwa 250 JavaScript Zeilen ließ sich eh bien un kleines, sûrement encore unvollständiges Spiel construire. qui Physik wird automatisch par qui Bibliotheken realisiert, dans qui Animation muss on seulement qui Abweichungen festlegen. Zum Beispiel, si qui balle de qui plaine fällt, soll il pas unendlich tief tomber. Stattdessen muss il ou bien un neuer balle de dessus herunterfallen.

qui physi.js schließt qui Objekte/ Materialien de three.js dans sich un et erweitert vous um physikalische Eigenschaften. cet volonté ensuite interne berechnet et animiert.
malheureusement "hängt" qui Physik dans cette Version zuweilen. Entweder encore Bugs dans cette Version, ou bien j'ai irgendeine notwendige Einstellung pas gemacht - schwer herauszubekommmen.
là [...] bzw. [...] peux on cela Spiel testen.
Zum offline spielen komplett avec den zusammenpassenden 4 Bibliotheken gemeinsam dans einem Dossier wohin vous aussi rester doit:
Herunterladen
là qui Physik pas entier aktuell ist, belasse je es seulement einmal chez diesem kleinen Beispiel en supplément.
Vom physi.js Autor gibt es encore une weitere, pas seulement sur three.js fixierte JavaScript Physik: [...] [...]  |
| | | | |
| |  HofK | THREEjs bietet une la quantité à vordefinierten geometrischen Objekten.
Um genauer trop regarder comment cela funktioniert, ist es quand même angebracht, la fois selber une simple eigene Konstruktion trop realisieren.
en supplément habe je avec perspective sur Silvester dans 14 Tagen un Raketenleitwerk gebastelt. Es besteht lediglich aus trois à einem Punkt zusammenhängenden Flächen.

qui Öffnung ist variable et wird animiert.
qui Geometrie-Objekte bestehen stets aus den Knoten (vertices) et den Flächen (faces). Dabei doit komplexere Fächen toujours dans Dreiecke zerlegt volonté, alors sogar un Rechteck par sa Diagonale dans deux Dreiecke, là quatre beliebige Punkte im espace pas absolument un ebenes Viereck ergeben. dans Beispielen plus dessus ist cela bien sichtbar.
materialLeitwerk = new THREE.MeshNormalMaterial({ side: THREE.DoubleSide}); leitwerkGeometry = new THREE.Geometry(); // une allgemeine Geometrie leitwerkGeometry.vertices = [ // Datenfeld qui Knoten, Koordinaten comme Ortsvektoren, index -> Flaechenbildung new THREE.Vector3( 0, 10, 0 ), // Knoten 0 dessus Mitte new THREE.Vector3( 10, 0, 0 ), // Knoten 1 Spitze trop +x new THREE.Vector3( 0, 0, -10 ), // Knoten 2 Spitze trop -z new THREE.Vector3( -10, 0, 0 ), // Knoten 3 Spitze trop -x new THREE.Vector3( 0, 0, 10 ), // Knoten 4 Spitze trop +z new THREE.Vector3( 0, 0, 0 ), // Knoten 5 unten Mitte (alle 4 Knoten avec vorerst identischen Koordinaten) new THREE.Vector3( 0, 0, 0 ), // Knoten 6 unten Mitte new THREE.Vector3( 0, 0, 0 ), // Knoten 7 unten Mitte new THREE.Vector3( 0, 0, 0 ), // Knoten 8 unten Mitte ]; //leitwerkGeometry.computeVertexNormals(); leitwerkGeometry.faces = [ // Datenfeld qui Flaechen (Knotennummern qui Ecken des Dreiecks dans positivem Drehsinn) new THREE.Face3( 0, 5, 1 ), // Leitflaeche trop +x new THREE.Face3( 0, 6, 2 ), // Leitflaeche trop -z new THREE.Face3( 0, 7, 3 ), // Leitflaeche trop -x new THREE.Face3( 0, 8, 4 ) // Leitflaeche trop +z ]; leitwerkGeometry.computeFaceNormals(); // Berechnung qui Normalen (Senkrechte Einheitsvektoren zur Flaeche -> MeshNormalMaterial) leitwerk = new THREE.Mesh(leitwerkGeometry, materialLeitwerk); scene.add(leitwerk); comment beim Pol qui Kugel THREE.SphereGeometry habe je plusieurs Eckpunkte sur une Koordinatenpunkt gelegt. chez qui Animation volonté cet Koordinaten modifié.
là [...] bzw. [...] peux on qui Animation et den kurzen Voir le texte source betrachten. |
| | | | |
| |  HofK | je wünsche allen Lesern des Themas 3D Grafik - WebGL avec three.js belle weiße Weihnachten. 
là cela pas chaque l'an et überall klappt, habe je oui vorgesorgt et wenigstens ici déjà la fois zum Advent den grand Flockenwirbel losgelassen.
trop Weihnachten gibt es pas seulement Schnee, non aussi encore Geschenke! de mir et meinen kleinen Helfern gibt es liebevoll verpackt et sous den arbre geschoben une exklusive, digital-virtuell gezüchtete perle!

là [...] bzw. [...] liegt cela Geschenk bereit. 
Beim Weihnachtsgeschenk ist qui Verpackung überaus important. Selbst gebastelt venez toujours bien à.
alors un Netz- et Flächenmodell pour une Würfel

comme objet erzeugt. en supplément alle Knoten avec ihren Koordinaten erzeugt.
// paquet bricoler paketGeo = new THREE.Geometry(); // une allgemeine Geometrie paketGeo.vertices = []; // Datenfeld qui Knoten, Koordinaten comme Ortsvektoren, index -> Flaechenbildung for(x=-30 ; x<51; x+=20){ paketGeo.vertices.push(new THREE.Vector3( x, 0,-10 )); // Knoten 0, 2, 4, 6, 8 paketGeo.vertices.push(new THREE.Vector3( x, 0, 10 )); // Knoten 1, 3, 5, 7, 9 } paketGeo.vertices.push(new THREE.Vector3( -10, 0,-30 )); // Knoten 10 paketGeo.vertices.push(new THREE.Vector3( 10, 0,-30 )); // Knoten 11 paketGeo.vertices.push(new THREE.Vector3( -10, 0, 30 )); // Knoten 12 paketGeo.vertices.push(new THREE.Vector3( 10, 0, 30 )); // Knoten 13 paketGeo.vertices.push(new THREE.Vector3( 40, 0, 0 )); // Knoten 14 viermal identische Koordinaten paketGeo.vertices.push(new THREE.Vector3( 40, 0, 0 )); // Knoten 15 paketGeo.vertices.push(new THREE.Vector3( 40, 0, 0 )); // Knoten 16 paketGeo.vertices.push(new THREE.Vector3( 40, 0, 0 )); // Knoten 17 paketGeo.computeVertexNormals();
ensuite alle Flächen (toujours Dreiecke!) par qui Knotennummern qui Eckpunkte festlegen.
paketGeo.faces = [ // Datenfeld qui Flaechen (Knotennummern qui Ecken des Dreiecks dans positivem Drehsinn de aussen) new THREE.Face3( 0, 2, 1 ), // 0 new THREE.Face3( 1, 2, 3 ), // 1 new THREE.Face3( 2, 4, 3 ), // 2 new THREE.Face3( 3, 4, 5 ), // 3 new THREE.Face3( 4, 6, 5 ), // 4 new THREE.Face3( 5, 6, 7 ), // 5 new THREE.Face3( 10, 11, 2 ), // 6 new THREE.Face3( 2, 11, 4 ), // 7 new THREE.Face3( 3, 5, 12 ), // 8 new THREE.Face3( 12, 5, 13 ), // 9 new THREE.Face3( 14, 7, 6 ), // 10 new THREE.Face3( 15, 6, 8 ), // 11 new THREE.Face3( 16, 8, 9 ), // 12 new THREE.Face3( 17, 9, 7 ) // 13 ]; paketGeo.computeFaceNormals(); // Berechnung qui Normalen (Senkrechte Einheitsvektoren zur Flaeche -> matériel)
qui Faltung des Würfels geschieht eh bien entier simple par passende Changement qui Koordinaten qui Knoten dans qui Animation, z.B. bringt geo.vertices[0].y = geo.vertices[1].y = 20*Math.sin( w ); dans qui Funktion qui deux Knoten 0 et 1 joli lente de 0 sur 20 hoch.
qui Animation hat zeitgesteuert 13 Phasen. Dabei wird pour qui Winkelfunktionen toujours un Viertelkreis, (1.57roue = 90°) je Phase erzeugt.
intéressant ist eh bien, quoi qui Browser daraus faire. Zum debuggen habe je le nombre qui rekursiven Aufrufe ausgegeben. si qui Schneemann cela paquet sous den arbre schiebt, ging cela dans meiner Firefox-offline de qui RAM-Disk Arbeitsumgebung gemächlich dans ca. 230 Tippelschritten knapp sous den arbre, online ensuite variable la fois seulement 210. chez Chrome et Opera ca va rasant avec ca.315 Schritten ab et cela paquet knallt vers den tronc d'abre! [...] 
chez "kleinweich" edge schafft es auparavant qui perle pas einmal dans cela paquet et qui Sachen liegen ensuite wild herum! voilà es seulement ca. 140. Erstaunlich: IE 11 packt es comment Chrome et Opera. quoi faire qui là?
sur meinem 4 Jahre alten Samsung Note 2 bringt mobiles Chrome seulement 119 ensuite la fois 150, beim Note 10.1 knallt cela paquet vers den Stamm.
Fazit: une so simple zeitgesteuerte Animation ist pas praktikabel, es muss weg-zeitabhängig realisiert volonté. |
| | | | |
| |  Michael W. | Cool, gleichfalls un frohes Noël.  |
| | | | |
| |  HofK | Kleidet on une Würfel dedans avec six zusammenhängenden Bildern comme Textur aus et mets qui caméra et une (bewegliche) Linse dans den Würfel, peux on qui Lichtbrechung simulieren.

là on solche Rundumbilder à peine selbst aufnehmen peux, habe je sur libre verfügbare zurückgegriffen:
Textur (Bilder) de Emil Persson: [...]  Creative Commons Lizenz Attribution 3.0
dans einem droite neuen livre de David J. Eck (Anfang 2016, free download, [...] ) ist im le chapitre 5 paragraphe 3 beschrieben, comme gemacht wird. là aussi qui Link le Bildern.
Allerdings ist cela Demo Beispiel im livre comment la plus part du temps chez den three.js Beispielen so überfrachtet, dass qui Débutant Probleme bekommt den wesentlichen Punkt pour sich richtig trop nutzen.
c'est pourquoi habe je radicale abgespeckt.
Andererseits gibt es dans qui Demo zwar plusieurs simple (pas bewegliche) Grundkörper, mais aucun Linse.
dans einer anderen Demo im livre wird gezeigt, comment Drehkörper erstellt volonté. après que Je l' Demos des Buches qui Revisionen 82 et qui brandneue 83 untergeschoben hatte, funktionierten mais quelques Beispiele comment gewohnt pas. au-dessous aussi qui Drehkörper.
cela hat aussi anderen Leuten déjà Probleme bereitet. un schönes jeu d'échecs wurde geschreddert, Bilder siehe: [...] 
qui Rotation erfolgt dans den neueren Revisionen um une autre Achse et statt eines dreikomponentigen Vektors wird eh bien einer avec seulement deux Werten erwartet. il y a mais keinen faute. cela Ergebnis des alten Codes ist seulement "eigen". Schaut on dans qui référence pour [...] wird es bien sûr: "The lathe rotate around le Y axis. ... LatheGeometry(points, segments, phiStart, phiLength) points — Array of Vector2s. The x-coordinate of each point must être greater than zero."
qui Linse besteht aus deux zur x-Achse symmetrischen partager eines Kreisbogens. Problem: là x>0 vorgegeben, gibt es pour qui Rotation dans qui Mitte un winziges Loch. qui Versuch es avec Werten comment 0.00001 auszutricksen était pas erfolgreich. qui wichtigsten Codepassagen:
Bildbox
//Bildboxtextur aus 6 Bildern, zusammenpassend à den Kanten, qui Reihenfolge im Datenfeld ist important! var textureURLs = []; textureURLs.push( "cubemap-textures/NissiBeach2/posx.jpg" ); textureURLs.push( "cubemap-textures/NissiBeach2/negx.jpg" ); textureURLs.push( "cubemap-textures/NissiBeach2/posy.jpg" ); textureURLs.push( "cubemap-textures/NissiBeach2/negy.jpg" ); textureURLs.push( "cubemap-textures/NissiBeach2/posz.jpg" ); textureURLs.push( "cubemap-textures/NissiBeach2/negz.jpg" ); // Textur - matériel skyboxTexture = THREE.ImageUtils.loadTextureCube( textureURLs, THREE.CubeRefractionMapping, render ); shader = THREE.ShaderLib[ "cube" ]; // enthaelt qui benoetigten Shader shader.uniforms[ "tCube" ].value = skyboxTexture; // données pour qui Shader shMaterial = new THREE.ShaderMaterial( { fragmentShader: shader.fragmentShader, // ShaderMaterial nimmt qui benutzerdefinierten Vertex et Fragment Shader vertexShader: shader.vertexShader, uniforms: shader.uniforms, // qui Texture ist partie cet Objekts //depthWrite: faux, side: THREE.BackSide // Rueckseite, d.h. Innenseite qui Box } ); // Bildbox ("Himmel") skybox = new THREE.Mesh( new THREE.BoxGeometry( 100,100, 100), shMaterial ); scene.add(skybox);
Linse
//Linse var points = []; // Punkte qui x-y plaine, qui à y- Achse rotiert volonté for ( var w = Math.PI; w > 1; w -= 0.02 ) { si ( 2*Math.sin( w ) -1.8 >0 ) points.push( new THREE.Vector2( 2*Math.cos(w), 2*Math.sin(w)-1.8 )); // Vector2(x, y) } for ( var w = 1; w < Math.PI; w += 0.02 ) { si ( 2*Math.sin( w ) -1.8 >0 ) points.push( new THREE.Vector2( 2*Math.cos(w), -(2*Math.sin(w)-1.8) )); //Vector2(x, y) } var geometry = new THREE.LatheGeometry( points, 32 ); // Drehteil (Drehung um y-Achse dans Revision 83) refMaterial = new THREE.MeshBasicMaterial({color: 0xffffff, envMap: skyboxTexture, refractionRatio: 0.8, wireframe:faux} ); // Refraction (Lichtbrechung) entre 0 et 1. // Default presque 1 - nahezu unsichtbares Glas. refMaterial.reflectivity = 0.99; // durchgelassener Lichtanteil: 0 undurchsichtig, 1 voll durchlaessig lens = new THREE.Mesh(geometry, refMaterial); scene.add(lens); lens.rotation.x = 1.57; là peux on par qui Linse regarder: [...] vous aussi bewegen et den rare Quellcode sowie qui Einzelbilder betrachten. |
| | | | |
| |  HofK | Fertige Fotos comme Textur comment im vorigen Beispiel sommes droite bequem.
comment allez cela mais avec selbst erstellten Texturen? en supplément muss on sich avec qui Frage beschäftigen, comment qui Grafik sur den Bildschirm venez. près de qui CPU gibt es là encore qui GPU (Graphic Processing Unit). cet arbeitet massif parallèle et bringt so überaus vite qui richtigen Farben sur alle Punkte des Displays.

près de three.js (JavaScript) braucht on en supplément encore weitere Skripte. cet volonté dans qui Discours GLSL (OpenGL Shading Language) pour Shader geschrieben (qui Discours C ähnlich).
j'ai versucht, qui l'affaire possible übersichtlich avec three.js trop kombinieren:
//GLSL Code aus den Shader Scripts einbinden vertexShaderCode = document.getElementById( 'vertexShader' ).textContent fragmentShaderCode = document.getElementById( 'fragmentShader' ).textContent ... usw. ... WIDTH = 1200; HEIGHT = 800; renderer.setSize(WIDTH,HEIGHT); // Zeichenflaeche shaderUniforms = { u_time: { type: "f", value: 1.0}, // "f" float u_resolution: { type: "v2", value: new THREE.Vector2() }, u_mouse: { type: "v2", value: new THREE.Vector2() } }; shaderUniforms.u_resolution.value.x = WIDTH; // = renderer.domElement.width; // Wert zum Shader donner shaderUniforms.u_resolution.value.y = HEIGHT; // = renderer.domElement.height; // Wert zum Shader donner // matériel aus dem Shader bilden shMaterial = new THREE.ShaderMaterial( { uniforms: shaderUniforms, vertexShader: vertexShaderCode, fragmentShader: fragmentShaderCode } );
Uniforms sommes qui Variablen, qui pour alle Punkte qui Zeichenfläche gelten, Kennung ici avec u_ . cela erste Beispiel, une komplett gelbe Surface, ist im Ergebnis fastidieux, pour wird qui Grundaufbau bien sichtbar et qui GLSL Kommentare überwiegen im Skriptcode. Einbindung qui Skripte:
<script src="../js/three.min.83.js"></script>
<script id="vertexShader" type="x-shader/x-vertex">
// GLSL Code (OpenGL Shading Language)
void main() {
// Standardausgabe Position
gl_Position = vec4( position, 1.0 );// Position 3D, vierte Komp. > 1.0 Ausschnitt
}
</script> <script id="fragmentShader" type="x-shader/x-fragment">
// GLSL Code (OpenGL Shading Language)
// uniform - données pour alle ausgeführten GPU Threads unique, seulement lesbar, vgl. unten chez three.js
uniform vec2 u_resolution;// Groesse qui Malfläche (canvas) dans Pixeln (Breite, Hoehe)
uniform vec2 u_mouse;// Mausposition sur qui Malfleache dans Pixeln (X, Y)
uniform float u_time;// Zeit dans Sekunden depuis dem Start des Bildaufbaus
//-----------------------------------------------------------
void main() {
// qui Verarbeitung erfolgt parallèle dans den Pipelines qui GPU (Graphic Processing Unit)
// Standardeingabe Fragmentkoordinaten: gl_FragCoord (vordefiniert avec allen x,y Koordinaten)
// Standardausgabe Fragmentfarbe: gl_FragColor (vordefiniert Fragmentfarbe trop allen Koordinaten)
// la couleur (Farbkanäle rouge, vert, bleu et Alpha) ergibt sich aus:
// Komponenten: 1 aus x Koordinate, 2 aus y Koordinate, 3 fix 0.0, 4 Deckkraft: 1.0
gl_FragColor = vec4(gl_FragCoord.xy, 0.0, 1.0);// Vektor avec 4 Komponenten
// alle Punkte des Fragments jaune,
// là Koordinaten pas kleiner 1 et Farbanteile 0.0 jusqu'à 1.0 erwartet (ne...aucune faute, >1 comment =1)
// Farbenspiele et Muster par Berechnungen avec gl_FragColor,
// qui une vec4 avec Werten entre 0 et 1 ergeben.
}
</script>
veux on quelque chose plus erreichen, muss on "nur" quelques Berechnungen anstellen:
// normalisierte Koordinaten bilden - Achse x, y entre 0.0 et 1.0
// en supplément: Fragment Koordinaten dividiert par Auflösung qui Zeichenfläche (je Achse!)
vec2 s = gl_FragCoord.xy / u_resolution.xy;// s hat qui deux Komponenten x et y
s *= 4.0;// Skalierung sur 0.0 jusqu'à 4.0 (je Achse)
s = fract(s);// fract (Nachkommastellen) --> ergibt 4 la fois jeweils 0.0 jusqu'à 1.0 je Achse
// Farbkomponenten pour umgewandelten x,y Koordinaten, dritter Anteil schwankt avec Zeit:
vec3 c = vec3( s.x, s.y, abs(sin(u_time)) );
// Standardausgabe Fragmentfarbe: gl_FragColor (vordefiniert)
gl_FragColor = vec4( c, 1.0 );// parallele Ausgabe - la couleur avec Deckkraft: 1.0
là [...] peux on erste simple Beispiele betrachten et den kommentierten Quellcode einsehen. ____________________________________________________________
une très bien verständliche introduction [...] en supplément gibt es im Online Buch [...] dans mehreren Sprachen, aussi allemande. ici peux on aussi unmittelbar qui Beispiele verändern. Sogar, indem on avec qui souris per un- ou bien zweidimensionalem Eingabebereich avec den Konstanten écoutes. cela Ergebnis ist tout de suite sichtbar, z.B. sur qui page [...] .
Spielen peux on aussi dans qui Sandbox [...] . entier simple z.B [...] mais aussi très komplex dauphin: [...]  Weihnachtsbaum: [...]  l'eau: [...]  pomme: [...]  |
| | | | |
| |  Michael W. | | | | | |
|
répondreOptions du sujet | 349.362 Views |
Themeninformationencet Thema hat 10 participant: |