先说心得:
Web 3D程式会Eat the World。以后Desktop的3D程式(游戏除外)会被淘汰,虽然需要很长一段时间。
但Web程式要考虑很多,不要一不小心重踏Insomniac Games的惨痛经验
https://www.gdcvault.com/play/1024465/Insomniac-s-Web-Tools-A
我来分享一些自己写Webgl的心得。
首先TypedArrays不好用,Javascript 没有pointer,所以无法指向某member当base,一定要用subarray()或new ArrayBuffer()来做类似vec3的结构。可是
https://stackoverflow.com/questions/45803829/memory-overhead-of-typed-arrays-vs-strings
所以这样做的话,内存爆炸性成长,效能也差。所以Js的glmatrix library根本是误导人走错的方向。
现在我正在准备完全重写matrix library,(顺便用wasm?)适合Js TypedArray的。
Webgl好用,Webgl2更好用,Webgl2-compute出来就真的不得了。如果不介意暂时的相容性问题,请直接使用Webgl2,当你的程式可上线的时候,Webgl2应该是90%+了。
第三programmable vertex pull超赞。OpenGL Insight Chapter21,应该是始祖。
https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2021%20Programmable%20Vertex%20Pulling
另外一个example
https://github.com/nlguillemot/ProgrammablePulling
Webgl没有1d texture要用2d texture来代替,需要确定gpu有vertex texture的支援(99%),然后需要oes_texture_float的extension(80%)。只能用float所以有16million index的限制。
programmable vertex pulling简化程式,把computation移到gpu刚好适合web,请多多利用。如果有碰到问题,我乐意回答,如果我有时间的话。
我正在写3d model editing的程式,browser处理几十万个polygons是没问题,现在我改写用vertex pulling希望能处理几百万个polygons。