suchen
HeimWeb-FrontendH5-Tutorial[HTML5] 3D-Modell – ein Beispiel für die Implementierung eines rotierenden dreidimensionalen Zauberwürfels mit hundert Zeilen Code

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.

[HTML5] 3D-Modell – ein Beispiel für die Implementierung eines rotierenden dreidimensionalen Zauberwürfels mit hundert Zeilen Code

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

[HTML5] 3D-Modell – ein Beispiel für die Implementierung eines rotierenden dreidimensionalen Zauberwürfels mit hundert Zeilen Code

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

[HTML5] 3D-Modell – ein Beispiel für die Implementierung eines rotierenden dreidimensionalen Zauberwürfels mit hundert Zeilen Code

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)!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
HTML -Audio und Video verstehen: Attribute und ZugänglichkeitHTML -Audio und Video verstehen: Attribute und ZugänglichkeitMay 16, 2025 am 12:05 AM

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

Mastering Microdata: Eine Schritt-für-Schritt-Anleitung für HTML5Mastering Microdata: Eine Schritt-für-Schritt-Anleitung für HTML5May 14, 2025 am 12:07 AM

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

Was ist neu in HTML5 -Formen? Erforschen der neuen EingangstypenWas ist neu in HTML5 -Formen? Erforschen der neuen EingangstypenMay 13, 2025 pm 03:45 PM

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

H5 verstehen: Die Bedeutung und BedeutungH5 verstehen: Die Bedeutung und BedeutungMay 11, 2025 am 12:19 AM

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.

H5: Zugänglichkeits- und Webstandards KonformitätH5: Zugänglichkeits- und Webstandards KonformitätMay 10, 2025 am 12:21 AM

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.

Was ist das H5 -Tag in HTML?Was ist das H5 -Tag in HTML?May 09, 2025 am 12:11 AM

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.

H5 -Code: Ein Anfängerhandbuch zur WebstrukturH5 -Code: Ein Anfängerhandbuch zur WebstrukturMay 08, 2025 am 12:15 AM

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.

H5 -Codestruktur: Inhalte zur Lesbarkeit organisierenH5 -Codestruktur: Inhalte zur Lesbarkeit organisierenMay 07, 2025 am 12:06 AM

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.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heißer Artikel

Nordhold: Fusionssystem, erklärt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Englische Version

SublimeText3 Englische Version

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

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen