在網上一搜畫球能搜出大片方法,大概原理都是把求分為很多個三角形然後畫出來.這段時間有空想起以前看過的shadertoy.com這個**,一時興起想能不能只用shader來畫乙個?實踐了下發現**還挺簡單:vertex shader:
precision mediump float;
attribute vec3 position;
attribute vec2 texcoord;
uniform mat4 modelviewmatrix;
uniform mat4 projectionmatrix;
mat4 u_modelviewprojectionmatrix;
varying mediump vec2 v_texcoord;
void main()
其中 u_modelviewprojectionmatrix 是單位矩陣.
然後是fragmentshader:
precision mediump float;
uniform lowp sampler2d mytexture; //u_sampler
uniform float u_scale, u_aspect;
uniform mat3 u_transform;
uniform mat4 u_proj;
varying mediump vec2 v_texcoord;
#define pi 3.141592653589793
void main()
基本原理就是以螢幕位置作為乙個半徑為1的球的x y座標.算出z值,得到球表面的三維座標,再轉為極座標系,在紋理圖中找到對應位置.得到最終效果:
最終效果離我的理想效果有點差距. **中我的z值取負數,理論上貼出來的應該是球背面,也就是像上次寫的這篇文章的效果opengl,z值轉深度值計算 - 拖延症補丁.exe - 部落格頻道 - csdn.net .把z>0的稱為前半球,z<0的稱為後半球.實際上把z改為正數發現紋理取樣確實採到後面去了.但是依然是凸起的效果.也就是始終沿著前半球表面取樣.
想了好久,請教了大神也沒解決, 先放部落格擱置了.
我猜可能和投影矩陣有關.這樣變換的程式確定是無法設定projectmatrix,也就是使用的是indentify matrix. 因為projectmatrix可能不是正定的,也沒辦法取逆來做.帶進一步檢驗.
sh與bash的區別
在shell指令碼的開頭往往有一句話來定義使用哪種sh直譯器來解釋指令碼。目前研發送測的shell指令碼中主要有以下兩種方式 1 bin sh 2 bin bash 在這裡求教同福客棧的各位大俠們乙個問題 以上兩種方式有什麼區別?對於指令碼的實際執行會產生什麼不同的影響嗎?指令碼test.sh內容 ...
sh裡的變數 0 1
0就是該bash檔名 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。所有位置引數的內容 就是呼叫呼叫本bash shell的引數。基本上與上面相同。只不過是 返回的是乙個字串,字串中存在多外空格。返回多個字串。還有 返回所有位置引數的個數。執行當前sh檔案的pid touch var...
sh與bash的區別
在shell指令碼的開頭往往有一句話來定義使用哪種sh直譯器來解釋指令碼。目前研發送測的shell指令碼中主要有以下兩種方式 1 bin sh 2 bin bash 在這裡求教同福客棧的各位大俠們乙個問題 以上兩種方式有什麼區別?對於指令碼的實際執行會產生什麼不同的影響嗎?指令碼test.sh內容 ...