


Als ich kürzlich lernte, wie man den Zauberwürfel spielt, wollte ich plötzlich HMTL5 verwenden, um ein Zauberwürfelmodell zu schreiben. Da es sich beim Zauberwürfel um einen 3D-Würfel handelt, habe ich dieses Mal versucht, ein einfaches 3D-Modell mit HTML5 zu schreiben.
Das Folgende ist der Vorschaubildschirm.
Produktionsprozess
Zuerst müssen Sie die HTML5-Open-Source-Bibliothek lufylegend-1.4.0 herunterladen
Der Zauberwürfel ist in 6 Flächen unterteilt, jede Fläche besteht aus 9 kleinen Rechtecken.
Weil ich jetzt einen 3D-Zauberwürfel baue Sie müssen es zeichnen. Für jedes kleine Rechteck müssen Sie die 4 Fixpunkte des kleinen Rechtecks kennen. Diese 4 Fixpunkte werden entsprechend dem Rotationswinkel des Raums transformiert, um die Koordinaten dieser 4 Fixpunkte zu berechnen Punkte müssen Sie den Drehwinkel des Zauberwürfels um die x-Achse und die z-Achse kennen.
Erstellen Sie also eine Rechteckklasse wie folgt:
function Rect(pointA,pointB,pointC,pointD,angleX,angleZ,color){ base(this,LSprite,[]); this.pointZ=[(pointA[0]+pointB[0]+pointC[0]+pointD[0])/4,(pointA[1]+pointB[1]+pointC[1]+pointD[1])/4,(pointA[2]+pointB[2]+pointC[2]+pointD[2])/4]; this.z = this.pointZ[2]; this.pointA=pointA,this.pointB=pointB,this.pointC=pointC,this.pointD=pointD,this.angleX=angleX,this.angleZ=angleZ,this.color=color; } Rect.prototype.setAngle = function(a,b){ this.angleX = a; this.angleZ = b; this.z=this.getPoint(this.pointZ)[2]; };
PunktA, PunktB, PunktC, PunktD sind die vier Eckpunkte des kleinen Rechtecks , angleX, angleZ ist der Drehwinkel der x-Achse bzw. der z-Achse und color ist die Farbe des kleinen Rechtecks.
Der Zauberwürfel ist in 6 Flächen unterteilt. Schauen wir uns zunächst die Vorderseite an. Wenn die Mitte des Würfels als Mittelpunkt des 3D-Koordinatensystems verwendet wird, dann die Koordinaten, die jedem festen Punkt entsprechen Die 9 kleinen Rechtecke sind wie in der Abbildung unten dargestellt
Die 9 kleinen Rechtecke auf der Vorderseite können also mit dem folgenden Code erstellt werden
for(var x=0;x<3;x++){ for(var y=0;y<3;y++){ z = 3; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-step + x*2*step,-3*step + y*2*step,-3*step + z*2*step], [-step + x*2*step,-step + y*2*step,-3*step + z*2*step],[-3*step + x*2*step,-step + y*2*step,-3*step + z*2*step],0,0,"#FF0000"); backLayer.addChild(rect); } }
Unter diesen ist backLayer eine LSprite-Klasse und step ist die Länge eines halben kleinen Rechtecks. Auf die gleiche Weise können auch die anderen fünf Flächen erhalten werden.
Es wurden sechs Flächen erstellt. Bevor diese sechs Flächen gezeichnet werden, müssen zunächst die Koordinaten jedes Fixpunkts anhand des Drehwinkels berechnet werden
Verwenden Sie gemäß dem obigen Bild die folgende Formel, um die transformierten Festpunktkoordinaten zu erhalten
Rect.prototype.getPoint = function(p){ var u2,v2,w2,u=p[0],v=p[1],w=p[2]; u2 = u * Math.cos(this.angleX) - v * Math.sin(this.angleX); v2 = u * Math.sin(this.angleX) + v * Math.cos(this.angleX); w2 = w; u = u2; v = v2; w = w2; u2 = u; v2 = v * Math.cos(this.angleZ) - w * Math.sin(this.angleZ); w2 = v * Math.sin(this.angleZ) + w * Math.cos(this.angleZ); u = u2; v = v2; w = w2; return [u2,v2,w2]; };
Schließlich gemäß den vier Festpunkten Koordinaten des kleinen Rechtecks, um dieses Rechteck zu zeichnen,
Rect.prototype.draw = function(layer){ this.graphics.clear(); this.graphics.drawVertices(1,"#000000",[this.getPoint(this.pointA),this.getPoint(this.pointB), this.getPoint(this.pointC),this.getPoint(this.pointD)],true,this.color); };
wobei drawVertices eine Methode der LGraphics-Klasse in der lufylegend.js-Bibliothek ist, die dies kann Basierend auf dem eingehenden Festpunktkoordinaten-Array wird ein Polygon gezeichnet.
Abschließend wird der vollständige Code angegeben. Es gibt nur sehr wenig Code und insgesamt 91 Zeilen JS-Code.
1. index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>3D魔方</title> </head> <body> <p id="mylegend">loading……</p> <script type="text/javascript" src="../lufylegend-1.4.0.min.js"></script> <script type="text/javascript" src="./Main.js"></script> <script type="text/javascript" src="./Rect.js"></script> </body> </html>
2. Rect-Klasse
function Rect(pointA,pointB,pointC,pointD,angleX,angleZ,color){ base(this,LSprite,[]); this.pointZ=[(pointA[0]+pointB[0]+pointC[0]+pointD[0])/4,(pointA[1]+pointB[1]+pointC[1]+pointD[1])/4,(pointA[2]+pointB[2]+pointC[2]+pointD[2])/4]; this.z = this.pointZ[2]; this.pointA=pointA,this.pointB=pointB,this.pointC=pointC,this.pointD=pointD,this.angleX=angleX,this.angleZ=angleZ,this.color=color; } Rect.prototype.draw = function(layer){ this.graphics.clear(); this.graphics.drawVertices(1,"#000000",[this.getPoint(this.pointA),this.getPoint(this.pointB), this.getPoint(this.pointC),this.getPoint(this.pointD)],true,this.color); };Rect.prototype.setAngle = function(a,b){ this.angleX = a; this.angleZ = b; this.z=this.getPoint(this.pointZ)[2]; }; Rect.prototype.getPoint = function(p){ var u2,v2,w2,u=p[0],v=p[1],w=p[2]; u2 = u * Math.cos(this.angleX) - v * Math.sin(this.angleX); v2 = u * Math.sin(this.angleX) + v * Math.cos(this.angleX); w2 = w; u = u2; v = v2; w = w2; u2 = u; v2 = v * Math.cos(this.angleZ) - w * Math.sin(this.angleZ); w2 = v * Math.sin(this.angleZ) + w * Math.cos(this.angleZ); u = u2; v = v2; w = w2; return [u2,v2,w2]; };
Drei, Main.js
init(50,"mylegend",400,400,main); var a = 0,b=0,backLayer,step = 20,key = null; function main(){ backLayer = new LSprite(); addChild(backLayer); backLayer.x = 120,backLayer.y = 120; //后 for(var x=0;x<3;x++){ for(var y=0;y<3;y++){ z = 0; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-step + x*2*step,-3*step + y*2*step,-3*step + z*2*step], [-step + x*2*step,-step + y*2*step,-3*step + z*2*step],[-3*step + x*2*step,-step + y*2*step,-3*step + z*2*step],0,0,"#FF4500"); backLayer.addChild(rect); } } //前 for(var x=0;x<3;x++){ for(var y=0;y<3;y++){ z = 3; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-step + x*2*step,-3*step + y*2*step,-3*step + z*2*step], [-step + x*2*step,-step + y*2*step,-3*step + z*2*step],[-3*step + x*2*step,-step + y*2*step,-3*step + z*2*step],0,0,"#FF0000"); backLayer.addChild(rect); } } //上 for(var x=0;x<3;x++){ for(var z=0;z<3;z++){ y = 0; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-step + x*2*step,-3*step + y*2*step,-3*step + z*2*step], [-step + x*2*step,-3*step + y*2*step,-step + z*2*step],[-3*step + x*2*step,-3*step + y*2*step,-step + z*2*step],0,0,"#FFFFFF"); backLayer.addChild(rect); } } //下 for(var x=0;x<3;x++){ for(var z=0;z<3;z++){ y = 3; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-step + x*2*step,-3*step + y*2*step,-3*step + z*2*step], [-step + x*2*step,-3*step + y*2*step,-step + z*2*step],[-3*step + x*2*step,-3*step + y*2*step,-step + z*2*step],0,0,"#FFFF00"); backLayer.addChild(rect); } } //左 for(var y=0;y<3;y++){ for(var z=0;z<3;z++){ x = 0; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-3*step + x*2*step,-3*step + y*2*step,-step + z*2*step], [-3*step + x*2*step,-step + y*2*step,-step + z*2*step],[-3*step + x*2*step,-step + y*2*step,-3*step + z*2*step],0,0,"#008000"); backLayer.addChild(rect); } } //右 for(var y=0;y<3;y++){ for(var z=0;z<3;z++){ x = 3; var rect = new Rect([-3*step + x*2*step,-3*step + y*2*step,-3*step + z*2*step],[-3*step + x*2*step,-3*step + y*2*step,-step + z*2*step], [-3*step + x*2*step,-step + y*2*step,-step + z*2*step],[-3*step + x*2*step,-step + y*2*step,-3*step + z*2*step],0,0,"#0000FF"); backLayer.addChild(rect); } } backLayer.addEventListener(LEvent.ENTER_FRAME,onframe); } function onframe(){ a += 0.1 , b += 0.1; backLayer.childList = backLayer.childList.sort(function(a,b){return a.z - b.z;}); for(key in backLayer.childList){ backLayer.childList[key].setAngle(a,b); backLayer.childList[key].draw(backLayer); } }
Das Obige ist der Inhalt des [HTML5] 3D-Modells – hundert Zeilen Code zur Implementierung eines rotierenden dreidimensionalen Zauberwürfels. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). .php.cn)!

Html5audioandvideoelementSenHanceFunctionality und Accessibility ThroughSpecificAttributes.1) Die'Controls'attributeaddsStandardPlaybackControls, while'aria-label'imProvesscreenReAccessibilität.2) Die I-l-l-label'improvesscesreaderAccessibilität und'poster'attributeeneenexperien und '' '

Microdatainhtml5enhancesseoandUseRexperienceByProvidingStructuredDatoSearchEngines.1) UseItemScope, ItemType und ItempropattributestOMarkupContent-ProductsoreEvents.2) testMicrodatawithtoolsgoogle-likegoogle-strukturiert

Html5IntroducesnewinputTyphatenhanceUSeRexperience, SimplifyDevelopment und undimproveAccessibility.1) automatisch ValidateSeMailFormat.2) optimizesFormobile -Withanumererikeypad.3) und SimplifyDimeIndtimeInput, reduzieren, reduzieren, umthenedporcustomesedomsolionen zu reduzieren.

H5 ist HTML5, die fünfte Version von HTML. HTML5 verbessert die Ausdruckskraft und Interaktivität von Webseiten, führt neue Funktionen wie semantische Tags, Multimedia -Unterstützung, Offline -Speicher- und Leinwandzeichnung ein und fördert die Entwicklung der Webtechnologie.

Die Zugänglichkeit und die Einhaltung von Netzwerkstandards sind für die Website von wesentlicher Bedeutung. 1) Barrierefreiheit stellt sicher, dass alle Benutzer den gleichen Zugriff auf die Website haben, 2) Netzwerkstandards folgen, um die Zugänglichkeit und Konsistenz der Website zu verbessern.

Das H5-Tag in HTML ist ein Titel in fünfter Ebene, mit dem kleinere Titel oder Untertitel gekennzeichnet werden. 1) Das H5 -Tag hilft, die Inhaltshierarchie zu verfeinern und die Lesbarkeit und SEO zu verbessern. 2) In Kombination mit CSS können Sie den Stil anpassen, um den visuellen Effekt zu verbessern. 3) Verwenden Sie H5 -Tags vernünftigerweise, um Missbrauch zu vermeiden und die strukturelle logische Inhaltsstruktur sicherzustellen.

Zu den Methoden zum Erstellen einer Website in HTML5 gehören: 1. Semantische Tags, um die Webseitenstruktur zu definieren, z. B. usw.; 2. Einbetten Sie Multimedia -Inhalte, Verwendung und Tags ein; 3. Anwenden Sie fortschrittliche Funktionen wie die Formularüberprüfung und die lokale Speicherung an. In diesen Schritten können Sie eine moderne Webseite mit klarer Struktur und reichhaltigen Funktionen erstellen.

Eine vernünftige H5 -Codestruktur ermöglicht es der Seite, sich von vielen Inhalten abzuheben. 1) Verwenden Sie semantische Beschriftungen wie usw., um Inhalte zu organisieren, um die Struktur klar zu machen. 2) Steuern Sie den Rendering -Effekt von Seiten auf verschiedenen Geräten über CSS -Layout wie Flexbox oder Grid. 3) Responsive Design implementieren, um sicherzustellen, dass sich die Seite an verschiedene Bildschirmgrößen anpasst.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen
