1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      HTML5怎么實現(xiàn)3D迷宮

      這篇文章主要講解了“HTML5怎么實現(xiàn)3D迷宮”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“HTML5怎么實現(xiàn)3D迷宮”吧!

      成都一家集口碑和實力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團隊和靠譜的建站技術(shù),10余年企業(yè)及個人網(wǎng)站建設(shè)經(jīng)驗 ,為成都數(shù)千家客戶提供網(wǎng)頁設(shè)計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,同時也為不同行業(yè)的客戶提供做網(wǎng)站、網(wǎng)站制作的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)。

      功能描述:

      左右方向鍵控制玩家的方向,上下方向鍵控制玩家的前進和后退。

      效果預(yù)覽:

      HTML5怎么實現(xiàn)3D迷宮

      實現(xiàn)原理:

      在上面的效果預(yù)覽中,可以看到右邊是2D的平面地圖,而左邊的則是***人稱的3D視圖,這兩幅圖的關(guān)系是非常密切的,實質(zhì)上,實現(xiàn)3D視覺的過程,就是依據(jù)2D地圖把地圖轉(zhuǎn)換成***人稱視覺的過程。

      在之前的一篇文章:《javascript實現(xiàn)3D房間》中,3D效果的實現(xiàn)只局限于平面(意思是從側(cè)面看沒有立體效果),在這種有局限性的3D效果中,我們以一個個物體為單位,通過不同物體平面之間的視覺差實現(xiàn)3D。而在這次的效果中,為了使物體從不同角度看都能具有立體效果,我們把單位從平面改成線。

      首先,我們創(chuàng)建一個叫視覺平面的東西,它像一面鏡子,把實物投影到一個平面上,首先初始化該平面的尺寸:

      screenSize:[320,240],//視覺屏幕尺寸

      之后,我們可以以1像素為單位,只要知道物體每個像素在該視覺平面上顯示出來的高度,就可以繪制出物體在***人稱視覺上的效果。

      以視覺平面上的***個像素線段為例,根據(jù)比例可得知:玩家到視覺平面的距離/玩家到物體的實際距離=物體在視覺平面上的高度/物體的實際高度。由于玩家到視覺平面的距離和物體的實際高度我們可以自己定義,因此我們只要知道玩家到物體的距離,就可以知道物體該像素在視覺平面的高度。

      怎樣知道玩家到物體的實際距離呢?這時我們就需要借助和3D視覺圖密切相關(guān)的2D地圖了。首先,我們定義玩家的***視覺角度為60度(意思是玩家的視覺范圍角度),由于我們現(xiàn)在處理的是平面的***條像素線,因此該像素線相對于玩家的角度就為-30度。在地圖上,我們可以知道玩家的X,Y位置和玩家的方向,因此我們就可以知道***條像素線在地圖上的方向。

      在2D地圖上怎么表示3D視覺平面上的一條像素線呢?其實仔細想想就可以發(fā)現(xiàn),3D視覺平面中的一條像素線,相當于2D地圖上特定方向上發(fā)出的一條射線,射線與物體的交點就是3D視覺平面中的那條像素線的內(nèi)容。因此,只要我們計算出該射線的長度(起點:玩家位置 終點:射線和物體相交的位置),就可以知道玩家與物體的距離,從而求得改像素的物體在視覺平面上的高度。

      ***只要循環(huán)遍歷視覺平面上的每一條1px寬的像素線,并根據(jù)2D地圖上對應(yīng)射線的長度,就可以求得視覺平面上所有視覺范圍內(nèi)的物體每一像素的高度,形成3D視覺效果。

      代碼分析:

      主要看實現(xiàn)的核心代碼,循環(huán)遍歷視覺平面上每條像素線,繪制出該像素線上的物體內(nèi)容:

      var context=this.screenContext;       context.clearRect(0,0,this.screenSize[0],this.screenSize[1]);      context.fillStyle="rgb(203,242,238)";      context.fillRect(0,0,this.screenSize[0],this.screenSize[1]/2);      context.fillStyle="rgb(77,88,87)";      context.fillRect(0,this.screenSize[1]/2,this.screenSize[0],this.screenSize[1]/2);

      由于該效果需要兩個canvas(一個顯示地圖,一個顯示3D視覺圖),因此我們首先獲取3D視覺圖上的canvas,并繪制地面和天空。

      //cnGame.context.beginPath();      for(var index=0,colCount=this.screenSize[0]/this.viewColWidth;index

      之后,就可以開始循環(huán)遍歷每條像素線,繪制出物體內(nèi)容。在處理每條像素線的過程中,我們讓射線每次增加1像素的長度,當射線遇到非空地的時候(getPosValue(x,y)>0),就停止增長,并記錄下此時射線的長度,該長度就是玩家到該像素線內(nèi)容的實際距離。

      上面代碼中,注釋掉的部分其實就是用于繪制出發(fā)射的射線,如果大家有需要,可以恢復(fù)該部分的代碼,就可以看到玩家的視覺范圍。

      需要注意的是,由于視覺平面有區(qū)別人的眼球(是一個平面而非球體),因此我們還需要使距離乘上玩家視覺角度的余弦值,從而避免了魚眼效果。

      ***,我們還可以在3D視覺圖上繪制出玩家(拿槍的手),達到更好的效果。

      感謝各位的閱讀,以上就是“HTML5怎么實現(xiàn)3D迷宮”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對HTML5怎么實現(xiàn)3D迷宮這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


      網(wǎng)站名稱:HTML5怎么實現(xiàn)3D迷宮
      文章位置:http://ef60e0e.cn/article/gedjgj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        凤庆县| 慈溪市| 宜君县| 江城| 礼泉县| 梅州市| 通道| 海林市| 克拉玛依市| 朝阳区| 昌邑市| 霍邱县| 芷江| 胶州市| 枣庄市| 高要市| 虞城县| 镇坪县| 如东县| 兴业县| 广丰县| 苏尼特右旗| 安福县| 卓资县| 新乡县| 厦门市| 化隆| 小金县| 集安市| 民丰县| 广宁县| 惠东县| 秦安县| 张家港市| 古田县| 天津市| 吉隆县| 汉阴县| 永泰县| 沅陵县| 边坝县|