整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML5自學VS培訓,到底哪個好?

          HTML5移動開發技術可以說是Web開發世界一次重大變革,無論你喜不喜歡,它都代表了未來發展趨勢。如今HTML5廣為流傳,各類媒體炒的如火如荼,很多文章都在不遺余力的介紹HTML5技術,想學HTML5開發技術的人也是越來越多。今天千鋒武漢HTML5培訓小編要跟大家分享的文章是關于零基礎怎么學習HTML5?難不難學?

          互聯網發展到今天,越來越多的技術崗位人才出現了稀缺的狀態,就拿當前的HTML5來講,基本成為了每家互聯網公司不可缺少的人才。如果抓住這個機會,把HTML5搞好,那么前途不可限量,而且這門行業是越老越吃香,經驗越多待遇越高。

          身邊有些朋友在自學HTML5的過程中,發現的一個很嚴重的問題,那便是自學HTML5并不是想象的那么簡單,你必須要滿足以下條件:

          1、一定要有高手指導。遇到難題如果沒有高手指導,單純的靠自己琢磨特別耗費時間,進度緩慢不說,而且最后不一定能弄懂,時間一久就很容易放棄,這也是很多自學HTML5的同學半途而廢的首要原因。

          2、一定要有足夠的設計靈感和開發思想,多看代碼多讀代碼。要想學好HTML5,HTML5設計思想就必須放在第一位,因為前端注重的就是客戶體驗度。

          3、除了培養HTML5項目的鍛煉,你還有輔助提升辦法。比如多多強化你的英語閱讀水平,HTML5編程雖然要用到的英語詞匯不多,也就500個單詞左右,但是你的英語閱讀水平提高了,那么在自學HTML5的過程中,你的進度一定會更加的好,并且對日后的發展也很有幫助。

          如果沒有基礎,在很多人看來自學HTML5是不可思議的事情。如果你覺得自學HTML5這條路太難走,又不想放棄HTML5的學習,那么對于想快速學好HTML5的你來說,最好的辦法就是參加系統的HTML5培訓班。

          參加培訓不但可以快速學習HTML5,同時還能帶來意想不到的收獲:

          1、當你遇到難題,很快的就有人為你解答

          2、可以讓你完全的掌握HTML5行業的技術與項目

          3、可以助你找到一個好的工作

          4、可以給你帶來工作經驗

          5、有一個好的教學環境

          6、可以認識更多的人脈關系

          以上就是千鋒武漢HTML5培訓小編今天跟大家分享的零基礎怎么學習HTML5?希望本篇文章能夠對正準備自學的小伙伴們提高幫助,如果覺得自學有困難參加HTML5培訓也是不錯的選擇哦。

          evExtreme擁有高性能的HTML5 / JavaScript小部件集合,使您可以利用現代Web開發堆棧(包括React,Angular,ASP.NET Core,jQuery,Knockout等)構建交互式的Web應用程序。從Angular和Reac,到ASP.NET Core或Vue,DevExtreme包含全面的高性能和響應式UI小部件集合,可在傳統Web和下一代移動應用程序中使用。 該套件附帶功能齊全的數據網格、交互式圖表小部件、數據編輯器等。

          點擊“了解更多”獲取DevExtreme v20.1.4完整版下載

          具體更新內容如下:

          此列表包括v20.1.4中已解決的所有問題。

          All Angular products

          • T892546 - Angular Web Report Designer - CustomizeSaveAsDialog事件丟失

          DevExtreme Core

          • T886254 - 在v20.1中出現的"DevExpress.data.ODataContext is not a constructor"錯誤

          DevExtreme Data Grid

          • T879946 - DataGrid - 如果定義了calculateDisplayValue,則查找列不會以“單元格”編輯模式顯示新行的值
          • T866890 - DataGrid - 在某些情況下啟用遠程虛擬滾動功能時,pager無法正常工作
          • T837344 - DataGrid - 如果將rtlEnabled設置為true,則列大小調整將無法正常工作
          • T874992 - DataGrid -啟用延遲選擇后,帶有冗余元素的復雜過濾器表達式將傳遞到CustomStore
          • T884646 - DataGrid - 選擇模式為多個時,標頭單元格后的數據單元格不使用Tab聚焦
          • T881055 - DataGrid - 當ShowWhenGrouped = true時,按多列分組后,Extra Filter Row單元格將顯示在右側
          • T881439 - DataGrid - 在特定條件下將rowRenderingMode設置為'virtual'時,網格內容閃爍
          • T885383 - DataGrid - 隱藏優先級不適用于沒有dataField的列

          DevExtreme Data Visualization

          • T880908 - Chart - 按住滾動條至少一秒鐘后無法滾動
          • T891490 - Chart - 應用material主題時,Firefox中的工具提示背景不可見
          • T888028 - 圖表在滾動參數軸時未顯示所有條形圖
          • T887459 - PieChart - Doughnut圖中心的自定義標簽在IE中未對齊

          薦:使用NSDT 編輯器快速搭建3D應用場景


          建 模 和 3D 地形

          大多數 3D 對象是 使用建模工具創建,這是有充分理由的。創建復雜對象 (如飛機甚至建筑物)很難在代碼中完成。建模工具 幾乎總是有意義的,但也有例外!其中之一可能是案例 就像飛行拱廊島連綿起伏的丘陵一樣。我們最終使用了 我們發現更簡單,甚至可能更直觀的技術:一個 高度圖。

          高度圖是一種 使用常規二維圖像來描述 像島嶼或其他地形一樣的表面。這是一種非常常見的使用方式 高程數據,不僅在游戲中,而且在地理信息系統中 制圖師和地質學家使用的 (GIS)。

          幫助您獲得想法 有關其工作原理,請查看此交互式演示中的高度圖。嘗試繪圖 ,然后檢出生成的地形。

          高度圖背后的概念 很簡單。在上圖所示的圖像中,純黑色是 “地板”和純白色是最高峰。介于兩者之間的灰度顏色 表示相應的高程。這為我們提供了 256 個海拔高度,這 是我們游戲的大量細節。實際應用程序可能會使用完整的 色譜可存儲更多層次的細節(2564 = 4,294,967,296 級 詳細信息(如果包含 Alpha 通道)。

          高度圖有幾個 與傳統多邊形網格相比的優勢:

          一、高度圖很多 更緊湊。僅存儲最重要的數據(高程)。它 需要以編程方式轉換為 3D 對象,但這是 經典交易:您現在節省空間,稍后通過計算付款。通過存儲 數據即圖像,您將獲得另一個空間優勢:您可以利用標準 圖像壓縮技術并使數據變小(相比之下)!

          其次,高度圖是一個 生成、可視化和編輯地形的便捷方式。非常直觀 當你看到一個。感覺有點像看地圖。這被證明是 對飛行街機特別有用。我們設計和編輯了我們的島嶼 在 Photoshop 中!這使得根據需要進行小調整變得非常簡單。 例如,當我們想確保跑道完全平坦時, 我們只是確保以單一顏色在該區域上繪畫。

          您可以看到高度圖 下面的飛行拱廊。看看你是否能發現我們為 跑道和村莊。

          飛行街機島的高度圖。它是在Photoshop中創建的,它基于著名的太平洋島鏈中的“大島”。有什么猜測嗎?

          在解碼高度貼圖后映射到生成的 3D 網格上的紋理。更多內容見下文。

          解碼高度圖

          我們用Babylon.js建造了飛行拱廊,Babylon給了我們一個漂亮的 從高度圖到 3D 的簡單路徑。Babylon提供了一個 API 來生成 來自高度圖圖像的網格幾何體:

          ar ground = BABYLON.Mesh.CreateGroundFromHeightMap(

          'your-mesh-name',

          '/path/to/heightmap.png',

          100, // width of the ground mesh (x axis)
          100, // depth of the ground mesh (z axis)

          40, // number of subdivisions

          0, // min height

          50, // max height

          scene,

          false, // updateable?

          null // callback when mesh is ready
          );`

          細節量是 由該細分的財產決定。需要注意的是, 參數是指高度圖兩側的細分數量 圖像,而不是單元格總數。所以稍微增加這個數字可以 對網格中的頂點總數有很大影響。

          • 20 個細分 = 400 細胞
          • 50 個細分 = 2,500 細胞
          • 100 個細分 = 10,000 細胞
          • 500 個細分 = 250,000 細胞
          • 1,000 個細分 = 1,000,000 細胞

          在下一節中,我們將 了解如何為地面設置紋理,但在嘗試使用高度貼圖時 創建時,查看線框很有用。這是應用簡單代碼 線框紋理,因此很容易看到高度圖數據是如何轉換為的 網格的頂點:

          // simple wireframe material

          var material = new BABYLON.StandardMaterial('ground-material', scene);

          material.wireframe = true;

          ground.material = material;`

          創建紋理細節

          一旦我們有一個模型,映射一個 質地相對簡單。對于飛行街機,我們簡單地創建了一個 非常大的圖像,與我們的高度圖中的島嶼相匹配。圖像得到 延伸到地形的輪廓上,所以紋理和高度圖 保持相關性。這真的很容易想象,再一次,所有 制作工作是在Photoshop中完成的。

          原始紋理圖像是 創建于 4096x4096。那可是挺大的!(我們最終將尺寸減小了 為了保持下載合理,級別到2048x2048,但所有 使用全尺寸圖像進行開發。這是來自 原始紋理。

          原始島嶼紋理的全像素示例。整個城鎮只有大約300平方像素。

          這些矩形表示 島上城鎮的建筑。我們很快注意到 我們可以在地形和 其他 3D 模型。即使使用我們巨大的島嶼紋理,區別在于 令人分心的明顯!

          為了解決這個問題,我們“混合” 以隨機噪聲的形式進入地形紋理的附加細節。您可以 請參閱下面的之前和之后。注意額外的噪點如何增強外觀 地形細節。

          我們創建了一個自定義著色器 添加噪音。著色器為您提供了對 WebGL 3D 場景的渲染,這是著色器如何 有用。

          WebGL著色器由兩個組成 主要部分:頂點和片段著色器。頂點的主要目標 著色器是將頂點映射到渲染幀中的某個位置。片段(或 像素)著色器控制像素的結果顏色。

          著色器是用 稱為GLSL(圖形庫著色器語言)的高級語言,它 類似于C。此代碼在 GPU 上執行。深入了解如何 著色器工作,請參閱此處 有關如何為 Babylon.js 創建自己的自定義著色器的教程,或參閱此圖形著色器編碼初學者指南。

          頂點著色器

          我們不會改變我們的 紋理映射到地面網格體,因此我們的頂點著色器非常簡單。 它只是計算標準映射并分配目標位置。

          precision mediump float;
          // Attributes
          attribute vec3 position;
          attribute vec3 normal;
          attribute vec2 uv;
          // Uniforms
          uniform mat4 worldViewProjection;
          // Varying
          varying vec4 vPosition;
          varying vec3 vNormal;
          varying vec2 vUV;
          void main() {
          vec4 p = vec4( position, 1.0 );
          vPosition = p;
          vNormal = normal;
          vUV = uv;
          gl_Position = worldViewProjection * p;
          }

          碎片著色器

          我們的片段著色器有點 更復雜。它結合了兩個不同的圖像:基礎圖像和混合圖像。 基礎圖像映射到整個地面網格。在飛行街機中,這個 是島嶼的彩色圖像。混合圖像是使用的小噪點圖像 在近距離為地面提供一些紋理和細節。著色器 組合每個圖像中的值以創建跨 島。

          飛行的最后一課 街機發生在有霧的日子,所以我們的像素著色器的另一個任務是 調整顏色以模擬霧。調整基于頂點的距離 來自相機,遠處像素被“遮擋”得更厲害 在霧中。您將在函數中看到此距離計算 在主著色器代碼上方。calcFogFactor

          // #ifdef GL_ES
          precision highp float;
          // #endif
          uniform mat4 worldView;
          varying vec4 vPosition;
          varying vec3 vNormal;
          varying vec2 vUV;
          // Refs
          uniform sampler2D baseSampler;
          uniform sampler2D blendSampler;
          uniform float blendScaleU;
          uniform float blendScaleV;
          // #define FOGMODE_NONE 0.
          // #define FOGMODE_EXP 1.
          // #define FOGMODE_EXP2 2.
          // #define FOGMODE_LINEAR 3.
          // #define E 2.71828
          uniform vec4 vFogInfos;
          uniform vec3 vFogColor;
          float calcFogFactor() {
          // gets distance from camera to vertex
          float fogDistance = gl_FragCoord.z / gl_FragCoord.w;
          float fogCoeff = 1.0;
          float fogStart = vFogInfos.y;
          float fogEnd = vFogInfos.z;
          float fogDensity = vFogInfos.w;
          if (FOGMODE_LINEAR == vFogInfos.x) {
          fogCoeff = (fogEnd - fogDistance) / (fogEnd - fogStart);
          }
          else if (FOGMODE_EXP == vFogInfos.x) {
          fogCoeff = 1.0 / pow(E, fogDistance * fogDensity);
          }
          else if (FOGMODE_EXP2 == vFogInfos.x) {
          fogCoeff = 1.0 / pow(E, fogDistance * fogDistance * fogDensity * fogDensity);
          }
          return clamp(fogCoeff, 0.0, 1.0);
          }
          void main(void) {
          vec4 baseColor = texture2D(baseSampler, vUV);
          vec2 blendUV = vec2(vUV.x * blendScaleU, vUV.y * blendScaleV);
          vec4 blendColor = texture2D(blendSampler, blendUV);
          // multiply type blending mode
          vec4 color = baseColor * blendColor;
          // factor in fog color
          float fog = calcFogFactor();
          color.rgb = fog * color.rgb + (1.0 - fog) * vFogColor;
          gl_FragColor = color;
          }

          我們定制的最后一件作品 Blend shader 是 Babylon 使用的 JavaScript 代碼。主要目的 此代碼用于準備傳遞給頂點和像素著色器的參數。

          function BlendMaterial(name, scene, options) {
          this.name = name;
          this.id = name;
          this.options = options;
          this.blendScaleU = options.blendScaleU || 1;
          this.blendScaleV = options.blendScaleV || 1;
          this._scene = scene;
          scene.materials.push(this);
          var assets = options.assetManager;
          var textureTask = assets.addTextureTask('blend-material-base-task', options.baseImage);
          textureTask.onSuccess = _.bind(function(task) {

              this.baseTexture = task.texture;
              this.baseTexture.uScale = 1;
              this.baseTexture.vScale = 1;
              if (options.baseHasAlpha) {
                  this.baseTexture.hasAlpha = true;
              }
          }, this);
          textureTask = assets.addTextureTask('blend-material-blend-task', options.blendImage);
          textureTask.onSuccess = _.bind(function(task) {
              this.blendTexture = task.texture;
              this.blendTexture.wrapU = BABYLON.Texture.MIRROR_ADDRESSMODE;
              this.blendTexture.wrapV = BABYLON.Texture.MIRROR_ADDRESSMODE;
          }, this);
          

          }
          BlendMaterial.prototype = Object.create(BABYLON.Material.prototype);
          BlendMaterial.prototype.needAlphaBlending = function () {
          return (this.options.baseHasAlpha === true);
          };
          BlendMaterial.prototype.needAlphaTesting = function () {
          return false;
          };
          BlendMaterial.prototype.isReady = function (mesh) {
          var engine = this._scene.getEngine();
          // make sure textures are ready
          if (!this.baseTexture || !this.blendTexture) {
          return false;
          }
          if (!this._effect) {
          this._effect = engine.createEffect(
          // shader name
          "blend",
          // attributes describing topology of vertices
          [ "position", "normal", "uv" ],
          // uniforms (external variables) defined by the shaders
          [ "worldViewProjection", "world", "blendScaleU", "blendScaleV", "vFogInfos", "vFogColor" ],
          // samplers (objects used to read textures)
          [ "baseSampler", "blendSampler" ],
          // optional define string
          "");
          }
          if (!this._effect.isReady()) {
          return false;
          }
          return true;
          };
          BlendMaterial.prototype.bind = function (world, mesh) {
          var scene = this._scene;
          this._effect.setFloat4("vFogInfos", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);
          this._effect.setColor3("vFogColor", scene.fogColor);
          this._effect.setMatrix("world", world);
          this._effect.setMatrix("worldViewProjection", world.multiply(scene.getTransformMatrix()));
          // Textures
          this._effect.setTexture("baseSampler", this.baseTexture);
          this._effect.setTexture("blendSampler", this.blendTexture);
          this._effect.setFloat("blendScaleU", this.blendScaleU);
          this._effect.setFloat("blendScaleV", this.blendScaleV);
          };
          BlendMaterial.prototype.dispose = function () {
          if (this.baseTexture) {
          this.baseTexture.dispose();
          }
          if (this.blendTexture) {
          this.blendTexture.dispose();
          }
          this.baseDispose();
          };

          Babylon.js使它變得容易 創建基于著色器的自定義材質。我們的混合材料相對簡單, 但它確實對島嶼的外觀產生了很大的影響,當 飛機低空飛到地面。著色器將 GPU 的強大功能帶到 瀏覽器,擴展可應用于 3D 的創意效果類型 場景。在我們的案例中,這是畫龍點名!

          原文鏈接:使用 WebGL 為 HTML5 游戲創建逼真的地形


          主站蜘蛛池模板: 大香伊人久久精品一区二区| 精品无人乱码一区二区三区| 亚洲美女视频一区| 人妻无码第一区二区三区 | 国产精品熟女一区二区| 在线观看国产一区| 精品无码一区二区三区在线| 国产乱码精品一区二区三区| 视频在线观看一区二区| 亚洲线精品一区二区三区| 老熟女高潮一区二区三区| 日韩精品一区二区三区毛片| 久久国产精品一区| 日韩最新视频一区二区三| 免费一区二区三区在线视频| 日本一区精品久久久久影院| 精品无码国产一区二区三区51安| 国产精品亚洲高清一区二区| 日韩一区二区在线视频| 一区三区三区不卡| 国产香蕉一区二区精品视频 | 国产一区二区影院| 亚洲综合无码AV一区二区| 国产av一区最新精品| 亚洲综合国产一区二区三区| 精品人妻无码一区二区色欲产成人| 国产伦精品一区二区免费| 在线观看国产一区二三区| 亚洲性日韩精品国产一区二区| 亚洲福利一区二区三区| 一区在线免费观看| 亚洲欧美成人一区二区三区| 日韩AV无码一区二区三区不卡毛片| 国产精品亚洲一区二区在线观看| 亚洲熟女少妇一区二区| 国产人妖在线观看一区二区 | 日韩视频一区二区| 一区二区在线观看视频| 精品国产一区二区三区在线观看| 亚洲AV无码国产一区二区三区 | 国产一区二区三区在线观看精品|