Heim Web-Frontend H5-Tutorial Beispiel für die Verwendung von HTML5 zum Zeichnen von 3D-Grafiken, die aus Punkten, Linien und Flächen bestehen. HTML5-Tutorial-Fähigkeiten

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

May 16, 2016 pm 03:46 PM
html5

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)

Erklärung dieser Website
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

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

Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

See all articles