wow~3D
Saturday, June 26th, 2010WordPress 也升級到3.0…但這個不是重點
3D這樣野嘛,上次接觸係八年前用sence structure 的 Xith3D (non-syn版Java3D),當時飲恨幾樣種野,1好慢,2唔好控制,3影呢?!影喎,3D冇影架!
在八年後的今日,OpenGL 升級到3.3+至4.0都就來有的時候,基於要寫tool又自high搞3D
新的世界話比你知: fix pipeline 不再存在,你有的便是shader,當然有人道的optional backward compatible 用。對新手絕對是惡夢,那個白痴cancel哂那些打幾行GLXXX就有demo玩的玩意?不過想深一層,3D,本來就係煩到抽筋的東西,打幾行有果D跟本就係3D sandbox,你想發圍改野都唔得,就好似以前果Java3D禁。禁點呀?GlBegin都冇哂lu,Shader囉!wakaka…
《起壇》
首先我是Java+ish,寫Java便可以完全零思考地寫,Eclipse Optimized化寫化,所以別無他選,而我個荒廢停寫又寫又停的tool 是用java寫的,當然也會合入個tool到。
至於OpenGL Mapping 的嘛,有JOGL,JOGL2,LWJGL幾樣選,基於以正宗思考,當然是選JOGL2(現在是beta 10,結果這個決定把我打入十八層漢堡包地獄…)
基本上上世紀的gl+ish 記憶全部不合時,在新世界生存你首先便是要有shader,shader可以當飯吃的嗎?….OK, render pipeline 你要有 Geometry Shader, Vetex Shader, Fragment Shader,一個生vertex吧,一個搞vertex,一個填顏色,咪就係禁咋嘛咋。
理論完哂,實施,正宗真係正宗,樣樣都好Object Oriented,要把那堆Beta 10的JOGL2塞入tool都搞左好耐,又分64/32bit…用backward compatible 試到成功,yeah~
《作法》
慾練神功,先有shader,因為shader 可能對各大高手來講實在係輕而易舉,入門的起個program只可睇住那堆hardcode parameter的samples,咩呀?vertexAttrib 0, 又1 又id..
搞左唔知幾耐終於compile到,「射」到data 入 shader 畫到個三角形出來,大感動,3D
《惡夢》
畫到三角形是第一步,之後問題來喇
1.點pass texture 落shader
2.點pass variable 落shader
很不幸的時當時搵親的都是mix and match的新舊交叉產物,個個demo又是喜歡hardcode 0,1,2跟本唔知邊個打邊個,由於我是用shader 1.4+,抄返來的compile error,damn the universe後盲人模到象,世上便是有vertexAttribute 和Uniform 係禁多,variable map 係要link左先有
由於matrix 搞來搞去都好matrix,所以直接抄返以前的ms3d importer 來搞basic structure,畫到在畫面喇,再搞到bump,shadow,跟住惡夢,Access Violate,成個JVM hang 左…
《轉駄》
其實不是JOGL2的錯,但係beta此終都係beta,會不會是beta整死?把心一橫把成舊野轉成LWJGL,構造果然係Light Weight 好多喎!整,早知用喇。經過在Light Weight 洗禮下,得出結論:沒有mapped 的texture 的shader 會KO成個JVM,為時已晚,不會回JOGL2的了,LWJGL更架人性化,起碼成堆jar lib放係度個個platfrom用得先。
《起錨!》
我不是政府,所以這路絕不是超錯。首先matrix 這家伙
1.OpenGL係Column Base Matrix,而我射data 一路射 Row Base Matrix,整
2. far near plane 是不可以負數的,不然會有外星感覺
3.是Right Hand 宇宙
於是,我的matrix world work了~~
Parallax mapping, blur,scattering light, anime in shader,DOF,SSAO~~ 現在繼續吸收現今技術,很多在2D都有實用之處
在此,再提自己要搵工,完。起錨!起錨!起錨!