suchen
HeimWeb-FrontendH5-TutorialBeispiel für die Verwendung von HTML5 zum Zeichnen von 3D-Grafiken, die aus Punkten, Linien und Flächen bestehen. HTML5-Tutorial-Fähigkeiten

Ich spiele seit zwei oder drei Wochen mit Canvas und das Spielen mit flachen Objekten ist genauso, also habe ich angefangen, mit 3D herumzuspielen.

Da die Canvas-Leinwand immer noch flach ist, müssen Sie eine Z-Achse abstrahieren, wenn Sie 3D wünschen. Wandeln Sie dann die 3D-Koordinaten in 2D-Koordinaten um, zeichnen Sie sie auf die Leinwand und erzeugen Sie dann mithilfe von Rotations- und anderen Transformationseffekten ein 3D-Gefühl. Bei der Erstellung von 3D geht man im Allgemeinen von Punkten zu Linien und dann von Linien zu Flächen über.

【Punkt】

Wenn Sie darauf klicken, habe ich schon einmal einen Blog-Beitrag über 3D geschrieben. Das Parsen der 3D-Tag-Cloud ist eigentlich sehr einfach. In diesem Blog-Beitrag geht es zwar um die mit div implementierte 3D-Tag-Cloud, aber um die Grundursache Das Prinzip von 3D ist dasselbe, es ist das einfachste 3D, das aus Punkten besteht. Jedes Etikett ist ein Punkt. Sie können sich diese DEMO auch direkt ansehen:
2015512164236104.png (344×329)

3DBall
Es sind insgesamt fünfhundert Punktobjekte darin enthalten. Jedes Punktobjekt ändert seine Größe und Transparenz entsprechend seiner Z-Achse und verteilt es dann gleichmäßig auf der Kugel eine Punktkugel.

【Linie】

Sobald Sie wissen, wie man Punkte macht, wird die Linie einfach sein, verbinden Sie einfach die Punkte. Ich habe dazu noch keine DEMO gemacht, aber es ist wirklich nicht schwierig. Schleifen Sie einfach „moveTo“ und dann „lineTo“, und die Zeile wird ausgegeben.

【Nudeln】

In diesem Blogbeitrag geht es hauptsächlich um das Gesicht.
Lass uns ohne weitere Umschweife zuerst eine DEMO machen:
2015512164305697.png (170×168)

3D-Würfel

Um einen Würfel zu erstellen, habe ich drei Objekte verwendet: ein Punktobjekt, ein Flächenobjekt und den Würfel selbst:

Das Folgende ist ein Punktobjekt: x, y, z sind die dreidimensionalen Koordinaten des Punktes. Die _get2d-Methode konvertiert die dreidimensionalen Koordinaten in die zweidimensionale Ebene. fallLength ist die Brennweite.

XML/HTML-CodeInhalt in die Zwischenablage kopieren
  1. var Vektor = Funktion(x,y,z){
  2. this.x = x;
  3. this.y = y;
  4. this.z
  5. = z; this._get2d
  6. =
  7. function(){ var scale
  8. =
  9. fallLength/(fallLength this.z); var x =
  10. centerX
  11. this.x*scale; var y =
  12. centerY
  13. this.y*scale return {x:x, y:y};                                                                                                                                               

  14. Dann die Zielgruppe:

    Die Eigenschaftsseite des Gesichtsobjekts ist leicht zu verstehen. v1v2v3v4 sind die vier Eckpunkte des Gesichts. Es stellt die Ebene des Gesichts dar Dies muss „Ja“ sein, damit beim Zeichnen mit Leinwand diese Fläche vorne gezeichnet werden kann und nicht von anderen Flächen verdeckt wird. Der Wert von zIndex ist ebenfalls leicht zu verstehen. Er ist die durchschnittliche Z-Achsen-Koordinate des Scheitelpunkts, die tatsächlich die Z-Achsen-Koordinate des Mittelpunkts ist. Die Farbe ist die Farbe dieser Oberfläche.

    XML/HTML-CodeInhalt in die Zwischenablage kopieren
    1. var Gesicht = Funktion(vector1,vector2,vector3,vector4,color){   
    2.             this.v1 = vector1;   
    3.             this.v2 = vector2;   
    4.             this.v3 = vector3;   
    5.             this.v4 = vector4;   
    6.             this.color = color;   
    7.             this.zIndex = (this.v1.z   this.v2.z   this.v3.z   this.v4.z)/4;   
    8.             this.draw = function(){   
    9.                 ctx.save();   
    10.                 ctx.beginPath();   
    11.                 ctx.moveTo(this.v1._get2d().x , this.v1._get2d().y);   
    12.                 ctx.lineTo(this.v2._get2d().x , this.v2._get2d().y);   
    13.                 ctx.lineTo(this.v3._get2d().x , this.v3._get2d().y);   
    14.                 ctx.lineTo(this.v4._get2d().x , this.v4._get2d().y);   
    15.                 ctx.closePath();   
    16.                 // ctx.fillStyle = "rgba(" parseInt(Math.random()*255) "," parseInt(Math.random()*255) "," parseInt(Math.random()*255) ",0.2)";   
    17.                 ctx.fillStyle = this.color;   
    18.                 ctx.fill();   
    19.             }   
    20.         }  


      最后是立方体本身对象:

      因为立方体最后要旋转,所以,立方体对象里面不仅有面对象,还要有点对象,点旋转后才会引起面的旋转.length是立方体的边长,_initVector是初始化立方体的各个顶点,_draw方法就是把所有点形成面, 将面放入数组, 然后对面进行排序(就是根据面里的zIndex排序), 排序好后,调用每个面里的draw方法.立方体就出来了.

    XML/HTML-Code复制内容到剪贴板
    1. var Würfel = Funktion(Länge){   
    2.             this.length = length;   
    3.             this.faces = [];   
    4.             this.vectors = [];   
    5.         }   
    6.         Cube.prototype = {   
    7.             _initVector:function(){   
    8.                 this.vectors[0] = new Vector(-this.length/2 , -this.length/2 , this.length/2);   
    9.                 this.vectors[1] = new Vector(-this.length/2 , this.length/2 , this.length/2);    
    10.                 this.vectors[2] = new Vector(this.length/2 , -this.length/2 , this.length/2);    
    11.                 this.vectors[3] = new Vector(this.length/2 , this.length/2 , this.length/2);    
    12.                 this.vectors[4] = new Vector(this.length/2 , -this.length/2 , -this.length/2);   
    13.                 this.vectors[5] = new Vector(this.length/2 , this.length/2 , -this.length/2);   
    14.                 this.vectors[6] = new Vector(-this.length/2 , -this.length/2 , -this.length/2);   
    15.                 this.vectors[7] = new Vector(-this.length/2 , this.length/2 , -this.length/2);   
    16.             },   
    17.             _draw:function(){   
    18.                 this.faces[0] = new Face(this.vectors[0] , this.vectors[1] , this.vectors[3] , this.vectors[2] , "#6c6");   
    19.                 this.faces[1] = new Face(this.vectors[2] , this.vectors[3] , this.vectors[5] , this.vectors[4] , "#6cc");   
    20.                 this.faces[2] = new Face(this.vectors[4] , this.vectors[5] , this.vectors[7] , this.vectors[6] , "#cc6");   
    21.                 this.faces[3] = new Face(this.vectors[6] , this.vectors[7] , this.vectors[1] , this.vectors[0] , "#c6c");   
    22.                 this.faces[4] = new Face(this.vectors[1] , this.vectors[3] , this.vectors[5] , this.vectors[7] , "#666");   
    23.                 this.faces[5] = new Face(this.vectors[0] , this.vectors[2] , this.vectors[4] , this.vectors[6] , "#ccc");   
    24.   
    25.                 this.faces.sort(function(a , b){   
    26.                     return b.zIndex - a.zIndex;   
    27.                 });   
    28.                 this.faces.foreach(function(){   
    29.                     this.draw();   
    30.                 })   
    31.             }   
    32.         }  


      立方体做好了,接下来就可以让它动起来了。根据鼠标位置改变立方体转动的角度Mit rotateX und rotateY können Sie X drehen und Y drehen原理我在之前那个博文上好像有说过.。。。如果想了解更多, 可以自己去百度一下计算机图形学3 D变换.绕X轴和绕Y轴是最简单的旋转矩阵了.当然,如果有兴趣的还可以去搜一下绕任意轴旋转矩阵Wählen Sie rotateX Drehen Sie Y来了.

    XML/HTML-Code复制内容到剪贴板
    1. if("addEventListener" in window){   
    2.             window.addEventListener("mousemove" , function(event){   
    3.                 var x = event.clientX - canvas.offsetLeft - centerX;   
    4.                 var y = event.clientY - canvas.offsetTop - centerY;   
    5.                                     Winkel   
    6.             });   
    7.         }            else {   
    8.             window.attachEvent("onmousemove" , function(event){   
    9.                 var 
    10. x
    11.  = 
    12. event
    13. .clientX - canvas.offsetLeft - centerX;   
    14.                 var 
    15. y = event.clientY - canvas.offsetTop - centerY;   
    16.                    
    17.                 Winkel                });   
    18.         }  
    19.            
    20.   
    21.         function rotateX(vectors){   
    22.             var cos = Math.cos(angleX);   
    23.             var sin = Math.sin(angleX);   
    24.             vectors.foreach(function(){   
    25.                 var y1 = this.y * cos - this.z * sin;   
    26.                 var z1 = this.z * cos   this.y * sin;   
    27.                 this.y = y1;   
    28.                 this.z = z1;   
    29.             });   
    30.         }   
    31.   
    32.         function rotateY(vectors){   
    33.             var cos = Math.cos(angleY);   
    34.             var sin = Math.sin(angleY);   
    35.             vectors.foreach(function(){   
    36.                 var x1 = this.x * cos - this.z * sin;   
    37.                 var z1 = this.z * cos   this.x * sin;   
    38.                 this.x = x1;   
    39.                 this.z = z1;   
    40.             })   
    41.         }  
    42.   
    43.            
    44.   
    45.         Würfel = neu Würfel(80);   
    46.         cube._initVector();   
    47.         function initAnimate(){   
    48.             cube._draw();   
    49.   
    50.             animate();   
    51.         }   
    52.   
    53.         function animate(){   
    54.             ctx.clearRect(0,0,canvas.width,canvas.height)   
    55.                
    56.             rotateY(cube.vectors);   
    57.             rotateX(cube.vectors);   
    58.             cube._draw();   
    59.             if("requestAnimationFrame" in window){   
    60.                 requestAnimationFrame(animate);   
    61.             }   
    62.             else if("webkitRequestAnimationFrame" in window){   
    63.                 webkitRequestAnimationFrame(animate);   
    64.             }   
    65.             else if("msRequestAnimationFrame" in window){   
    66.                 msRequestAnimationFrame(animate);   
    67.             }   
    68.             else if("mozRequestAnimationFrame" in window){   
    69.                 mozRequestAnimationFrame(animate);   
    70.             }   
    71.             sonst {   
    72.                 setTimeout(animate , 16);   
    73.             }   
    74.         }   


    Ich werde nicht den gesamten Code veröffentlichen, Sie können ihn über die Konsole in der DEMO sehen. Ich habe nicht auf andere Frameworks oder ähnliches verwiesen, kopieren Sie es einfach und Sie können es verwenden.

    Nachdem Sie einen rotierenden Würfel schreiben können, können Sie auch mehrere rotierende Würfel erstellen.
    2015512164340019.png (484×463)

    Poke DEMO: Gesicht: 3D Cube 2 3D Cube Line (Ich finde das einfach cooler ohne Gesichter)

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
H5: Die Entwicklung von Webstandards und TechnologienH5: Die Entwicklung von Webstandards und TechnologienApr 15, 2025 am 12:12 AM

Webstandards und -technologien haben sich bisher aus HTML4, CSS2 und einfachem JavaScript entwickelt und haben erhebliche Entwicklungen erfahren. 1) HTML5 führt APIs wie Leinwand und Webstorage ein, die die Komplexität und Interaktivität von Webanwendungen verbessern. 2) CSS3 fügt Animations- und Übergangsfunktionen hinzu, um die Seite effektiver zu gestalten. 3) JavaScript verbessert die Entwicklungseffizienz und die Lesbarkeit der Code durch moderne Syntax von Node.js und ES6, wie z. B. Pfeilfunktionen und Klassen. Diese Änderungen haben die Entwicklung von Leistungsoptimierung und Best Practices von Webanwendungen gefördert.

Ist H5 eine Abkürzung für HTML5? Erforschen der DetailsIst H5 eine Abkürzung für HTML5? Erforschen der DetailsApr 14, 2025 am 12:05 AM

H5 ist nicht nur die Abkürzung von HTML5, sondern auch ein breiteres Ökosystem der modernen Webentwicklungstechnologie: 1. H5 enthält HTML5, CSS3, JavaScript und verwandte APIs und Technologien; 2. Es bietet eine reichhaltigere, interaktive und reibungslose Benutzererfahrung und kann nahtlos auf mehreren Geräten ausgeführt werden. 3. Mit dem H5 -Technologie -Stack können Sie reaktionsschnelle Webseiten und komplexe interaktive Funktionen erstellen.

H5 und HTML5: häufig verwendete Begriffe in der WebentwicklungH5 und HTML5: häufig verwendete Begriffe in der WebentwicklungApr 13, 2025 am 12:01 AM

H5 und HTML5 beziehen sich auf dasselbe, nämlich HTML5. HTML5 ist die fünfte Version von HTML, die neue Funktionen wie semantische Tags, Multimedia -Support, Leinwand und Grafiken, Offline -Speicher und lokaler Speicher bietet, die Ausdrucksfähigkeit und Interaktivität von Webseiten verbessert.

Worauf bezieht sich H5? Erforschen des KontextesWorauf bezieht sich H5? Erforschen des KontextesApr 12, 2025 am 12:03 AM

H5REFERSTOHTML5, ApivotaltechnologyInwebdevelopment.1) HTML5IntroducesNewelementsandapisrich, Dynamicwebapplications.2) ITSUPP ortsmultimediaWitHoutPlugins, BETHINGINGUSEREXPERICERCROSSDEVICES.3) SEMANTICELEMENTSIMPROVEPENTENTENTENTRUCTENTRUCTELUREANDSEO.4) H5'SRespo

H5: Tools, Frameworks und Best PracticesH5: Tools, Frameworks und Best PracticesApr 11, 2025 am 12:11 AM

Zu den Tools und Frameworks, die in der H5 -Entwicklung gemeistert werden müssen, gehören Vue.js, React und WebPack. 1.Vue.js eignet sich zum Erstellen von Benutzeroberflächen und unterstützt die Komponentenentwicklung. 2. Die Rendern des Seitenrenders über virtuelle DOM optimiert, geeignet für komplexe Anwendungen. 3.Webpack wird zur Modulverpackung und zur Optimierung der Ressourcenlast verwendet.

Das Erbe von HTML5: H5 in der Gegenwart verstehenDas Erbe von HTML5: H5 in der Gegenwart verstehenApr 10, 2025 am 09:28 AM

HTML5hassignificantlytransformedwebdevelopmentbyintroducingsemanticelements,enhancingmultimediasupport,andimprovingperformance.1)ItmadewebsitesmoreaccessibleandSEO-friendlywithsemanticelementslike,,and.2)HTML5introducednativeandtags,eliminatingthenee

H5 -Code: Zugänglichkeit und semantische HTMLH5 -Code: Zugänglichkeit und semantische HTMLApr 09, 2025 am 12:05 AM

H5 verbessert die Zugänglichkeits- und SEO -Effekte der Webseiten durch semantische Elemente und Aria -Attribute. 1. Verwendung usw., um die Inhaltsstruktur zu organisieren und SEO zu verbessern. 2. ARIA-Attribute wie ARIA-Label verbessern die Zugänglichkeit, und assistive Technologie-Benutzer können Webseiten reibungslos verwenden.

Ist H5 gleich wie HTML5?Ist H5 gleich wie HTML5?Apr 08, 2025 am 12:16 AM

"H5" und "HTML5" sind in den meisten Fällen gleich, haben jedoch möglicherweise unterschiedliche Bedeutungen in bestimmten Szenarien. 1. "HTML5" ist ein W3C-definierter Standard, der neue Tags und APIs enthält. 2. "H5" ist normalerweise die Abkürzung von HTML5, kann jedoch in der mobilen Entwicklung auf ein auf HTML5 basierendes Framework verweisen. Das Verständnis dieser Unterschiede trägt dazu bei, diese Begriffe in Ihrem Projekt genau zu verwenden.

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

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