校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 【HTML5】3D模型--百行代碼實(shí)現(xiàn)旋轉(zhuǎn)立體魔方實(shí)例

【HTML5】3D模型--百行代碼實(shí)現(xiàn)旋轉(zhuǎn)立體魔方實(shí)例

熱門標(biāo)簽:西寧智能外呼系統(tǒng)加盟 杭州營銷電銷機(jī)器人供應(yīng)商 電話機(jī)器人如何 電視購物電銷外呼系統(tǒng) 聯(lián)通400電話申請 貸款電銷人工和機(jī)器人哪個好 高德地圖標(biāo)注賓館位置 飛亞外呼系統(tǒng) 百應(yīng)電銷機(jī)器人產(chǎn)業(yè)

最近研究魔方的玩法,就突然想用HMTL5寫一個魔方的模型,由于魔方是一個3D的立方體,這次就試著用HTML5寫了一個簡單的3D模型。

下面是預(yù)覽畫面。

制作流程

首先你需要下載Html5開源庫件lufylegend-1.4.0

魔方分為6個面,每個面由9個小矩形組成,現(xiàn)在我把每個小矩形當(dāng)做一個類封裝起來,

因?yàn)楝F(xiàn)在建立的是一個3D魔方,所以要畫出每個小矩形,需要知道小矩形的4個定點(diǎn),而這4個定點(diǎn)會根據(jù)空間的旋轉(zhuǎn)角度而變換,所以為了計算出這4個定點(diǎn)坐標(biāo),需要知道魔方繞x軸和z軸旋轉(zhuǎn)的角度。

所以,建立矩形類如下

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];  
};  

pointA,pointB,pointC,pointD是小矩形的四個頂點(diǎn),angleX,angleZ分別是x軸和z軸旋轉(zhuǎn)的角度,color是小矩形的顏色。

魔方分為6個面,先看一下最前面的一面,如果以立方體的中心作為3D坐標(biāo)系的中心,那么9個小矩形的各個定點(diǎn)所對應(yīng)的坐標(biāo)如下圖所示

所以,前面這個面的9個小矩形可以由下面的代碼來建立

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);  
    }  
}  

其中backLayer是一個LSprite類,step是半個小矩形的長,同樣的道理,可以也得到其他5個面。

6個面都建立了,在繪制這6個面之前,首先要根據(jù)旋轉(zhuǎn)的角度來計算各個定點(diǎn)的坐標(biāo),看下面的圖

根據(jù)上面的圖,用下面的公式即可得到變換后的定點(diǎn)坐標(biāo)

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];  
};  

最后根據(jù)小矩形的四個定點(diǎn)坐標(biāo),來繪制這個矩形,

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);  
};  

其中drawVertices是lufylegend.js庫件中LGraphics類的一個方法,它可以根據(jù)傳入的定點(diǎn)坐標(biāo)數(shù)組來繪制一個多邊形。

最后,給出完整代碼,代碼很少,JS代碼一共91行。

一,index.html

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>3D魔方</title>  
</head>  
<body>  
<div id="mylegend">loading……</div>  
<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>  

二,Rect類

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];  
};  

三,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);  
   }  
}  

這只是一個非常簡陋的3D模型,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:玉溪 撫州 邯鄲 牡丹江 煙臺 安慶 內(nèi)蒙古 晉中

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《【HTML5】3D模型--百行代碼實(shí)現(xiàn)旋轉(zhuǎn)立體魔方實(shí)例》,本文關(guān)鍵詞  HTML5,模型,百行,代碼,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《【HTML5】3D模型--百行代碼實(shí)現(xiàn)旋轉(zhuǎn)立體魔方實(shí)例》相關(guān)的同類信息!
  • 本頁收集關(guān)于【HTML5】3D模型--百行代碼實(shí)現(xiàn)旋轉(zhuǎn)立體魔方實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    精品久久国产字幕高潮| 国产一区二区主播在线| 欧美在线观看一区| 韩国一区二区在线观看| 亚洲精品久久7777| 欧美videossexotv100| 欧美视频精品在线观看| 99国产精品久久久久久久久久| 国产精品系列在线| 久久精品综合网| 亚洲视频在线观看一区| 亚洲精品欧美专区| 亚洲成av人片一区二区三区| 天堂蜜桃一区二区三区| 国产乱码一区二区三区| 99riav久久精品riav| 日韩视频一区二区三区| 天天av天天翘天天综合网色鬼国产| 91精品国产综合久久精品性色 | 亚洲国产中文字幕| 国产精品青草久久| 国产视频视频一区| 日韩免费看网站| 精品国一区二区三区| 4438x成人网最大色成网站| 欧日韩精品视频| 色av一区二区| 欧美日韩日日夜夜| 欧美日韩精品一区视频| 在线视频一区二区三区| 欧美午夜电影网| 欧美精品久久99| 91精品国产色综合久久| 精品国产污网站| 精品久久久久久无| 国产亚洲精品福利| 中文字幕日本乱码精品影院| 国产精品国产三级国产aⅴ无密码| 国产精品白丝在线| 天堂成人国产精品一区| 极品少妇xxxx精品少妇偷拍| 国产福利一区二区三区视频| 99精品欧美一区二区蜜桃免费 | 国产成人在线视频网站| 91亚洲国产成人精品一区二区三| 日本乱码高清不卡字幕| 69堂亚洲精品首页| 久久九九影视网| 亚洲精品成人悠悠色影视| 日韩激情一二三区| 91丨九色丨国产丨porny| 91视频在线看| 欧美一区二区三区日韩视频| 久久久久久久综合狠狠综合| 日韩久久一区二区| 蜜桃av一区二区三区电影| 成人激情动漫在线观看| 欧美美女一区二区在线观看| 欧美videofree性高清杂交| 最新国产成人在线观看| 久久国产成人午夜av影院| 色老汉av一区二区三区| 久久久久久99精品| 日韩精品五月天| 91黄色在线观看| 国产精品成人在线观看| 国内精品免费**视频| 欧美少妇性性性| 亚洲男人天堂一区| 国产成人免费视频网站 | 懂色av中文一区二区三区 | 欧美国产丝袜视频| 美洲天堂一区二卡三卡四卡视频| 欧美系列在线观看| 亚洲综合色成人| 99久久婷婷国产综合精品电影 | 在线观看视频一区| 一区二区三区中文在线观看| 色哟哟一区二区| 日本vs亚洲vs韩国一区三区二区| 国产成a人亚洲| 日本一区二区免费在线| 成人午夜电影小说| 亚洲欧美一区二区三区极速播放 | 日韩电影一区二区三区四区| 欧美性受极品xxxx喷水| 亚洲欧洲av在线| 欧美视频在线观看一区| 亚洲愉拍自拍另类高清精品| 欧美色精品在线视频| 日本不卡在线视频| 日韩欧美国产一区二区在线播放| 精品写真视频在线观看| 国产片一区二区| 91小视频在线免费看| 亚洲成av人片www| 久久精品欧美日韩| 色菇凉天天综合网| 蜜桃视频在线观看一区| 国产无遮挡一区二区三区毛片日本| 成人性色生活片| 亚洲a一区二区| 国产亚洲精品久| 91精品视频网| 欧美亚洲一区三区| 国产乱子伦一区二区三区国色天香| 国产欧美一区二区三区在线看蜜臀| 成人动漫av在线| 水蜜桃久久夜色精品一区的特点| 精品国产区一区| 色综合一区二区| 黑人精品欧美一区二区蜜桃| 亚洲日本在线看| 久久久亚洲国产美女国产盗摄| 欧美亚洲另类激情小说| 国产精品77777竹菊影视小说| 亚洲一区二区三区四区五区黄 | 国产精品亚洲第一| 午夜精品久久久久久久| 综合久久久久综合| 国产午夜精品一区二区三区四区| 欧美日韩在线播放一区| 91视视频在线观看入口直接观看www| 伦理电影国产精品| 人人狠狠综合久久亚洲| 亚洲一区日韩精品中文字幕| 成人免费在线播放视频| 亚洲国产岛国毛片在线| 久久免费电影网| 91.com视频| 日韩精品在线一区二区| 国产人成亚洲第一网站在线播放| 欧美伦理影视网| 欧美日韩在线电影| 欧美日韩精品欧美日韩精品一| 91麻豆自制传媒国产之光| 91蝌蚪porny| 在线影院国内精品| 欧美剧情片在线观看| 欧美一区二区三区日韩| 精品欧美一区二区在线观看| 精品国产伦理网| 国产精品青草久久| 一区二区三区美女| 日韩精品一二三四| 国产美女一区二区三区| 国产91对白在线观看九色| 91在线视频播放| 精品视频资源站| 日韩欧美国产三级电影视频| 久久久久久电影| 亚洲欧美激情在线| 久久国产三级精品| 91黄色在线观看| 久久久精品人体av艺术| 亚洲香肠在线观看| 风流少妇一区二区| 欧美日韩三级一区| 国产精品无圣光一区二区| 一区二区三区波多野结衣在线观看| 天天色综合天天| av电影在线观看一区| 日韩欧美一区在线观看| 中文字幕日本乱码精品影院| 韩国成人精品a∨在线观看| 欧美专区日韩专区| 中文字幕第一区综合| 日韩中文字幕亚洲一区二区va在线| 精品一区二区三区免费播放| 91国产成人在线| 亚洲丝袜另类动漫二区| 国产麻豆午夜三级精品| 欧美欧美欧美欧美| 亚洲综合成人网| 色av成人天堂桃色av| 国产精品丝袜久久久久久app| 奇米888四色在线精品| 欧美性视频一区二区三区| 欧美国产精品一区| 国产不卡视频在线观看| www欧美成人18+| 久久99日本精品| 精品精品国产高清a毛片牛牛| 青娱乐精品视频在线| 欧美一区二区三区男人的天堂| 亚洲老妇xxxxxx| 欧美视频精品在线观看| 亚洲成人av一区| 欧美一区二区在线看| 亚洲高清不卡在线观看| 欧美一区二区三区在| 日本一不卡视频| 亚洲精品在线观看视频| 国产精品18久久久久久久网站| 精品粉嫩超白一线天av| 国产成人在线看| 亚洲视频在线观看一区| 色婷婷综合激情| 蜜臀av一区二区| 国产精品久久午夜|