cari
Rumahhujung hadapan webTutorial H5Contoh penggunaan HTML5 untuk melukis grafik 3D yang terdiri daripada mata, garisan dan surfaces_html5 kemahiran tutorial

Saya telah bermain dengan Kanvas selama dua atau tiga minggu, dan bermain dengan objek rata adalah sama, jadi saya mula bermain-main dengan 3D.

Kerana kanvas Kanvas masih rata, jadi jika anda ingin mempunyai 3D, anda mesti mengabstrakkan paksi Z. Kemudian tukar koordinat 3D kepada koordinat 2D, lukiskannya pada kanvas, dan kemudian gunakan putaran dan kesan transformasi lain untuk mencipta perasaan 3D. Melakukan 3D secara amnya melibatkan pergi dari titik ke garis, dan kemudian dari garis ke permukaan.

【Titik】

Jika anda klik padanya, saya telah menulis catatan blog tentang 3D sebelum ini Menghuraikan awan tag 3D sebenarnya sangat mudah Walaupun catatan blog ini bercakap tentang awan tag 3D yang dilaksanakan menggunakan div, tetapi punca utama ialah Prinsip 3D adalah sama, ia adalah 3D termudah yang terdiri daripada mata. Setiap label adalah titik. Anda juga boleh menonton DEMO ini secara terus:
2015512164236104.png (344×329)

3DBall
Terdapat sejumlah lima ratus objek titik di dalamnya. Setiap objek titik menukar saiz dan ketelusannya mengikut paksi Z mereka, dan kemudian mengagihkannya secara sama rata pada sfera sfera titik.

【Barisan】

Setelah anda tahu cara membuat titik, garisan akan menjadi mudah, hanya sambungkan titik. Saya tidak melakukan DEMO mengenai perkara ini, tetapi ia sebenarnya tidak sukar. Hanya gelung moveTo, kemudian lineTo, dan baris akan keluar.

【Mi】

Catatan blog ini terutamanya bercakap tentang wajah.
Tanpa berlengah lagi, mari buat DEMO dahulu:
2015512164305697.png (170×168)

Kiub 3D

Untuk membuat kubus, saya menggunakan tiga objek: objek titik, objek luas dan kubus itu sendiri:

Berikut ialah objek titik x, y, z ialah koordinat tiga dimensi bagi titik tersebut. fallLength ialah panjang fokus.

Kod XML/HTMLSalin kandungan ke papan keratan
  1. var Vektor = fungsi(x,y,z){
  2. ini.x = x;
  3. ini.y = y
  4. ini.z = z;
  5. ini._get2d
  6. = fungsi(){ var
  7. skala
  8. = fallLength/(fallLength this.z); var x
  9. =
  10. centerX ini.x*skala var y
  11. =
  12. centerY ini.y*skala kembali {x:x, y:y};
  13.                                                                 
  14.                                                                                 

  15. Kemudian khalayak sasaran:

    Halaman sifat objek muka mudah difahami Muka adalah segi empat sama, v1v2v3v4 ialah empat bucu muka Atribut zIndex adalah sangat penting luar atau dalam. Ini mestilah Ya, supaya apabila melukis dengan kanvas, permukaan ini boleh dilukis di bahagian hadapan dan tidak akan ditutupi oleh permukaan lain. Nilai zIndex juga mudah difahami Ia ialah koordinat paksi-z purata bagi puncak, yang sebenarnya ialah koordinat paksi-z bagi titik tengah. Warna adalah warna permukaan ini.

    Kod XML/HTMLSalin kandungan ke papan keratan
    1. var Muka = fungsi(vector1,vector2,vector3,vector4,color){   
    2.              ini.v1 = vektor1;   
    3.              ini.v2 = vektor2;   
    4.              ini.v3 = vektor3;   
    5.              ini.v4 = vektor4;   
    6.             warna ini = warna;   
    7.             ini.zIndex = (ini.v1.z   ini.v2.z   ini.v3.z   ini.v4.z)/4;   
    8.              ini.draw = fungsi(){   
    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()*th2.5. "," parseInt(Math.random()*255) "," parseInt(Math.random()*255) ",0.2)";   
    17.                 ctx.fillStyle = ini.warna;   
    18.                 ctx.fill();   
    19.             }   
    20.         }  


      最后是立方体本身对象:

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

    Kod XML/HTML复制内容到剪贴板
    1. var Kiub = fungsi(panjang){   
    2.             ini.panjang = panjang;   
    3.             ini.muka = [];   
    4.             ini.vektor = [];   
    5.         }   
    6.         Kiub.prototaip = {   
    7.             _initVector:function(){   
    8.                 this.vectors[0] = new Vector(-this.length/2 , -this.length/2 , this.length/2);   
    9.                 vektor ini[1] = Vektor baharu(-ini.panjang/2 , ini.panjang/2 , ini.panjang/2);    
    10.                 ni.vektor[2] = vektor baharu(ini.panjang/2 , -ini.panjang/2 , ini.panjang/2);    
    11.                 vektor ini[3] = Vektor baharu(ini.panjang/2 , ini.panjang/2 , ini.panjang/2);    
    12.                 ni.vektor[4] = vektor baharu(ini.panjang/2 , -ini.panjang/2 , -ini.panjang/2);   
    13.                 ni.vektor[5] = vektor baharu(ini.panjang/2 , ini.panjang/2 , -ini.panjang/2);   
    14.                 vektor ini[6] = Vektor baharu(-ini.panjang/2 , -ini.panjang/2 , -ini.panjang/2);   
    15.                 vektor ini[7] = Vektor baharu(-ini.panjang/2 , ini.panjang/2 , -ini.panjang/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.                     kembali b.zIndex - a.zIndex;   
    27.                 });   
    28.                 this.faces.foreach(function(){   
    29.                     this.draw();   
    30.                 })   
    31.             }   
    32.         }  


      立方体做好了,接下来就可以让它动起来了。根据鼠标位置改来就可以让它动起来了。根据鼠标位置改来就可以让它动起来了。根据鼠标位置改召位置改让它动起来了。 X和rotateY方法就是让所有点绕X轴旋转以及绕Y轴旋转。这个的原理我在之前那个博文上好像有说过。。。。如果想了解更多,可以自己去瀾中度过了变换。绕X轴和绕Y轴是最简单的旋转矩阵了。当然,如果有兴趣的还可以去搜一下绕任意轴旋转矩阵。。。这个有点复杂, 我本来想用它来做个魔方, 不过遇到一些问题, 暂时还没解决。好吧, 扯远了。通过 Rotatex和rotateY两个方法可以让每个点获得下一帧的位置,在动画循环中重绘。这样得下一帧的位置,在动画循环中重绘。这样,佬小的罬小了。

    Kod XML/HTML复制内容到剪贴板
    1. if("addEventListener" dalam tetingkap){   
    2.              window.addEventListener("mousemove" , function(event){   
    3.                 var x = acara.clientX - kanvas.offset Kiri; -    
    4.                 var y = acara.clientY - canvas.offsetTopY; -    
    5.                 sudutY = x*0.0001;   
    6.                 angleX = y*0.0001;   
    7.             });   
    8.         }   
    9.         lain {   
    10.             window.attachEvent("onmousemove" , function(event){   
    11.                 var x = acara.clientX - kanvas.offset Kiri; -    
    12.                 var y = acara.clientY - canvas.offsetTopY; -    
    13.                 sudutY = x*0.0001;   
    14.                 angleX = y*0.0001;   
    15.             });   
    16.         }  
    17.            
    18.   
    19.         fungsi rotateX(vektor){   
    20.              var kos = Matematik.cos(angleX);   
    21.              var dosa = Math.sin(angleX);   
    22.             vectors.foreach(function(){   
    23.                 var y1 = ini.y * cos - ini;.z * dosa   
    24.                 var z1 = ini.z * cos   ini;.y * dosa   
    25.                 ini.y = y1;   
    26.                 ini.z = z1;   
    27.             });   
    28.         }   
    29.   
    30.         fungsi putarY(vektor){   
    31.              var cos = Math.cos(angleY);   
    32.              var dosa = Matematik.sin(angleY);   
    33.             vectors.foreach(function(){   
    34.                 var x1 = ini.x * cos - ini;.z * dosa   
    35.                 var z1 = ini.z * cos   ini;.x * dosa   
    36.                 ini.x = x1;   
    37.                 ini.z = z1;   
    38.             })   
    39.         }  
    40.   
    41.            
    42.   
    43.         kiub = baharu Kiub(80);   
    44.         kubus._initVector();   
    45.         fungsi initAnimate(){   
    46.             kubus._draw();   
    47.   
    48.             bernyawa();   
    49.         }   
    50.   
    51.         fungsi menghidupkan(){   
    52.              ctx.clearRect(0,0,canvas.width,canvas.height)   
    53.                
    54.             putarY(kubus.vektor);   
    55.             rotateX(cube.vectors);   
    56.             kubus._draw();   
    57.             jika("requestAnimationFrame" dalam tetingkap){   
    58.                 permintaanAnimationFrame(animate);   
    59.             }   
    60.             lain jika("webkitRequestAnimationFrame" dalam tetingkap){   
    61.                 webkitRequestAnimationFrame(animate);   
    62.             }   
    63.             lain jika("msRequestAnimationFrame" dalam tetingkap){   
    64.                 msRequestAnimationFrame(animate);   
    65.             }   
    66.             lain jika("mozRequestAnimationFrame" dalam tetingkap){   
    67.                 mozRequestAnimationFrame(animate);   
    68.             }   
    69.             lain {   
    70.                 setTimeout(animate , 16);   
    71.             }   
    72.         }   


    Saya tidak akan menyiarkan semua kod, anda boleh melihatnya melalui konsol dalam DEMO. Saya tidak merujuk mana-mana rangka kerja lain atau apa-apa seperti itu, hanya salin dan anda boleh menggunakannya.

    Selepas anda boleh menulis kiub berputar, anda juga boleh membuat berbilang kiub berputar.
    2015512164340019.png (484×463)

    Poke DEMO: Muka: 3D Cube 2 3D Cube Line (Saya rasa ini lebih sejuk tanpa muka)

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
H5: Evolusi piawaian dan teknologi webH5: Evolusi piawaian dan teknologi webApr 15, 2025 am 12:12 AM

Piawaian dan teknologi web telah berkembang dari HTML4, CSS2 dan JavaScript mudah setakat ini dan telah menjalani perkembangan yang ketara. 1) HTML5 memperkenalkan API seperti kanvas dan webstorage, yang meningkatkan kerumitan dan interaktiviti aplikasi web. 2) CSS3 menambah fungsi animasi dan peralihan untuk menjadikan halaman lebih berkesan. 3) JavaScript meningkatkan kecekapan pembangunan dan kebolehbacaan kod melalui sintaks moden node.js dan ES6, seperti fungsi anak panah dan kelas. Perubahan ini telah mempromosikan pembangunan pengoptimuman prestasi dan amalan terbaik aplikasi web.

Adakah H5 adalah singkat untuk HTML5? Meneroka butiranAdakah H5 adalah singkat untuk HTML5? Meneroka butiranApr 14, 2025 am 12:05 AM

H5 bukan sekadar singkatan HTML5, ia mewakili ekosistem teknologi pembangunan web moden yang lebih luas: 1. H5 termasuk HTML5, CSS3, JavaScript dan API dan Teknologi yang berkaitan; 2. Ia menyediakan pengalaman pengguna yang lebih kaya, interaktif dan lancar, dan boleh berjalan dengan lancar pada pelbagai peranti; 3. Menggunakan timbunan teknologi H5, anda boleh membuat laman web responsif dan fungsi interaktif yang kompleks.

H5 dan HTML5: Istilah yang biasa digunakan dalam pembangunan webH5 dan HTML5: Istilah yang biasa digunakan dalam pembangunan webApr 13, 2025 am 12:01 AM

H5 dan HTML5 merujuk kepada perkara yang sama, iaitu HTML5. HTML5 adalah versi kelima HTML, membawa ciri -ciri baru seperti tag semantik, sokongan multimedia, kanvas dan grafik, penyimpanan luar talian dan penyimpanan tempatan, meningkatkan ekspresi dan interaktiviti laman web.

Apa yang dirujuk oleh H5? Meneroka konteksApa yang dirujuk oleh H5? Meneroka konteksApr 12, 2025 am 12:03 AM

H5referstohtml5, apivotaltechnologyinwebdevelopment.1) html5introducesnewelementsandapisforrich, dynamicwebapplications.2) itsupp ortsmultimediawithoutplugins, enhancusexperienceaceacrossdevices.3) SemantikelementsImproveContentstructureandseo.4) H5'srespo

H5: Alat, Rangka Kerja, dan Amalan TerbaikH5: Alat, Rangka Kerja, dan Amalan TerbaikApr 11, 2025 am 12:11 AM

Alat dan kerangka yang perlu dikuasai dalam pembangunan H5 termasuk Vue.js, React dan Webpack. 1.vue.js sesuai untuk membina antara muka pengguna dan menyokong pembangunan komponen. 2. Leact mengoptimumkan rendering halaman melalui DOM maya, sesuai untuk aplikasi yang kompleks. 3.WebPack digunakan untuk pembungkusan modul dan mengoptimumkan beban sumber.

Warisan HTML5: Memahami H5 pada masa kiniWarisan HTML5: Memahami H5 pada masa kiniApr 10, 2025 am 09:28 AM

Html5hassignificlylylectransformedwebdevelopmentbyintroducingsemanticelements, enhancingmultimediasupport, andimprovingperformance.1) itmadewebebsitesmoreaccessibleandseo-friendlywithSemhyViVeShive, dan

Kod H5: Kebolehcapaian dan HTML SemantikKod H5: Kebolehcapaian dan HTML SemantikApr 09, 2025 am 12:05 AM

H5 meningkatkan kebolehaksesan laman web dan kesan SEO melalui unsur -unsur semantik dan atribut ARIA. 1. Gunakan, dan lain -lain untuk mengatur struktur kandungan dan meningkatkan SEO. 2. Atribut Aria seperti ARIA-Label meningkatkan kebolehcapaian, dan pengguna teknologi bantuan boleh menggunakan laman web dengan lancar.

Adakah H5 sama dengan HTML5?Adakah H5 sama dengan HTML5?Apr 08, 2025 am 12:16 AM

"H5" dan "HTML5" adalah sama dalam kebanyakan kes, tetapi mereka mungkin mempunyai makna yang berbeza dalam senario tertentu tertentu. 1. "HTML5" adalah standard yang ditentukan oleh W3C yang mengandungi tag dan API baru. 2. "H5" biasanya merupakan singkatan HTML5, tetapi dalam pembangunan mudah alih, ia boleh merujuk kepada rangka kerja berdasarkan HTML5. Memahami perbezaan ini membantu menggunakan istilah ini dengan tepat dalam projek anda.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.