畫圓環的想法與畫球體的想法大致相同,不同的是,圓環中間為空,而環體的直徑又相同,所以通過設定兩個半徑,用兩個半徑和角度就可以確定每個點的x,y,z座標。
首先,還是先把環體切成幾個部分,每個部分開啟之後都是乙個矩形,把每個矩形都用畫三角形帶的方式繪製出來的話,那麼圓環就可以實現。
接下來就是座標的計算:
假定以圓環中心為座標圓心,想要確定每個點的座標,就需要設定兩個半徑,乙個內圈半徑r1,乙個環體半徑r2,再設定乙個alpha角和alpha角的步長(alphastep),用來取到環體上的每個圓,還要設定乙個beta角和beta角的步長(betastep),用來取到每乙個圓上的點。
那麼假定兩點(x0,y0,z0)(x1,y1,z1),可以得出x0 = [(r1+r2)+r2 * cos(beta)] * cos(alpha),
y0 = [(r1+r2)+r2 * cos(beta)] * sin(alpha),z0 = -r2 * sin(beta).
而x1,y1,z1與x0,y0,z0不同的地方只有alpha的角度,給alpha加乙個步長,就得到x1,y1,z1.
x1 = [(r1+r2)+r2 * cos(beta)] * cos(alpha+alphastep),
y1 = [(r1+r2)+r2 * cos(beta)] * sin(alpha+alphastep),
因為圓環環體的直徑處處相等,所以圓環向z軸負方向的延伸值不變。
所以,z1 = z0 = -r2 * sin(beta).
需要注意的是,z軸座標需要取反,因為是向z軸負方向延伸。
取到了兩點座標之後,接下來就可以用兩層迴圈取到圓環上的各個點。
for( int i = 0取到了圓環上的各個點的座標後,剩下的就簡單了,設定清屏色,設定繪圖顏色,然後指定模型檢視矩陣,載入單位矩陣,放置眼球位置,設定旋轉角度。最後再指定頂點指標,繪製三角形帶。;i < count;i ++ )
執行效果圖:(為觀察方便起見,效果圖還是以畫線帶的方式繪製)
附**:
public classmyringrenderer
extends abstractrenderer
gl.glvertexpointer(3
,gl10.gl_float,0
, bufferutils.list2floatbuffer(coords));
//頂點指標
gl.gldrawarrays(gl10.gl_line_strip,0
,coords.size() / 3) ;
//畫線帶
} }
}
OpenGL學習筆記之了解OpenGL
opengl 全寫open graphicslibrary 是個定義了乙個跨程式語言 跨平台的程式設計介面規格的專業的圖形程式介面。它用於三維影象 二維的亦可 是乙個功能強大,呼叫方便的底層圖形庫。說白了,就是opengl是乙個開放的三維圖形軟體包,它獨立於視窗系統和作業系統,以它為基礎開發的應用程...
OpenGL入門學習之OpenGL庫簡介
glu是實用庫,包含有43個函式,函式名的字首為glu。glu 為了減輕繁重的程式設計工作,封裝了opengl函式,glu函式通過呼叫核心庫的函式,為開發者提供相對簡單的用法,實現一些較為複雜的操作。glaux是opengl輔助庫,包含有31個函式,函式名字首為aux。這部分函式提供視窗管理 輸入輸...
opengl 深度詳解 OpenGL之深度測試
深度緩衝是在三維圖形中處理影象深度座標 個人認為可以理解成距離我們觀察攝像機遠近的距離 的過程 from wiki 這聽起來不好理解啊啊啊啊。所以就舉個栗子嘍xd,就好比我可能要按由近到遠順序渲染兩個面 實際上是任意順序,我是說假如按這個順序 近處的麵先渲染,之後渲染遠處的面,但是如果沒有開啟深度測...