原创 法線貼圖技術原理與實踐

目錄Blinn-Phong光照模型中的法線法線貼圖讓每個片元都有獨立的法線法線存儲在什麼座標空間?世界空間模型空間切線空間將向量在切線空間和世界空間之間變換從切線空間變換到世界空間從世界空間變換到切線空間存儲切線空間法線到貼圖切

原创 從零開始手擼WebGL3D引擎10: 材質,前向渲染以及里程碑4

文章目錄前言材質封裝多個Pass創建Shader創建pass並添加到材質shader代碼寫在哪兒System UniformsCustom Uniforms渲染pass引擎提供的材質前向渲染scene.render()render

原创 Gamma Correction & sRGB texture

文章目錄顯示器gamma值的由來gamma encode圖形渲染中的gamma問題gamma correctionsRGB texture效果對比參考資料 顯示器gamma值的由來 gamma其實是陰極管射線顯示器CRT的特性,亮

原创 從零開始手擼WebGL3D引擎6:里程碑2,目前狀態和展望

最近做了很多零碎的工作,歸攏了一下作爲里程碑2。先上截圖: 這是一個腳本生成的example頁面,以後所有的例子可以從這個頁面進入,這樣就可以查看之前的示例,也方便重構代碼之後回溯。這個頁面我也放到了github pages上:

原创 從零開始手擼WebGL3D引擎9:Scene & Transform

文章目錄引言將物體組織成場景一個場景是一棵N叉樹場景不止是一棵樹從簡單開始SceneNode本地矩陣計算更新世界矩陣獲取世界座標和旋轉對象-組件和ECS懷念一下C++下一篇 引言 相比於實現很多花哨的圖形效果,寫引擎需要很多很紮實

原创 打包Javascript 遊戲引擎更好的選擇之rollup.js

國內的基於Javascript技術棧的H5遊戲引擎一般都使用gulp+browseify構建,比如cocos creator和Laya,最後構建出一個或多個引擎js文件,由於引擎文件很大,他們一般都提供了引擎裁剪功能。之前我覺得做

原创 關於四元數的一些誤解和問題

(先簡單記錄一下結論,有時間再完善) 四元數可以避免gimbal lock 理論上如果只使用四元數,不會有萬向鎖的問題。但實際上很多時候,還是在使用歐拉角,然後把歐拉角轉成四元數,最後四元數再被轉換成矩陣,合併到最終的Mode

原创 談一談3D編程中的矩陣

談一談3D編程中的矩陣常見約定行主(row major)和列主(column major)行主列主3D編程中的例子行向量左乘矩陣和列向量右乘矩陣左乘右乘爲什麼要約定左乘還是右乘?對矩陣構造的影響對矩陣串接的影響座標系變換矩陣的構造

原创 Unity Cg/HLSL Shader中向量和矩陣的構造方式

目錄向量的構造向量使用同類型的構造器構造CG(不是所有的HLSL版本)單值構造向量使用低維向量構造高維向量CG(不是所有的HLSL版本)高維向量轉換到低維向量矩陣的構造使用數值構造float3x3可以從三個向量構造從float4x

原创 從零開始手擼WebGL3D引擎8:里程碑3-一個多光源場景

里程碑3 好久沒寫筆記了,本週又搞了幾天,基本實現了基於多pass的多光源前向渲染,加上之前實現的基本的scene和transform,暫且算作里程碑3:simple scene。雖然代碼裏面還有很多TODO,但勉強可以看些效果了

原创 iOS編譯集成linux開源c庫的一些記錄

最近一個iOS項目需要使用一些Linux下面的開源c庫,說是Linux的其實是跨平臺的,各種Unix系統都有支持。理論上iOS來自MacOS,而MacOS其實是一種兼容的Unix系統,所以這些庫應該也可以在iOS上跑。當然了這些庫

原创 ip分片研究-以UDP爲例

原文 http://www.jianshu.com/p/741cb12ab0c9 測試環境: 利用iOS的NE從TUN抓取IP packets,如下代碼分析ip包: uint16_t iphid = IPH

原创 {html5} 微信刷新問題

使用微信訪問外網測試服的遊戲,遊戲更新後,微信看到的遊戲內容還是老的,經過測試,是js文件沒有更新。 js文件可通過在url上加"?版本號"的方式強制微信刷新。另外圖片根據測試是會立即刷新的,在電腦瀏覽器裏面看圖片是應用了瀏覽器緩存,請求

原创 工作十二年後,開始學習人生第十四種編程語言

不知不覺,竟然已經學習過這麼多種語言,當然學習過不代表精通,甚至很多已經忘記。。。有些語言竟然在扔了N年後又會用到,但無論如何我用他們敲下過一行行代碼,經歷了一年又一年 按時間順序:basic, pascal, foxbase, c,

原创 引擎開發隨筆之OpenGL Shader的封裝思考

在進行mini3d.js這個開源小項目的過程中,越來越體會到一個引擎的複雜性,從技術DEMO到可以完成實際工作的引擎,完全不是一個數量級的複雜度。因爲工作量太大,且想做的事情太多,mini3d.js的開發筆記一直是很滯後的,當然主