openGL之圓環 openGL學習筆記(七)

2021-07-10 06:25:06 字數 1825 閱讀 3065

畫圓環的想法與畫球體的想法大致相同,不同的是,圓環中間為空,而環體的直徑又相同,所以通過設定兩個半徑,用兩個半徑和角度就可以確定每個點的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 class 

myringrenderer

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,就好比我可能要按由近到遠順序渲染兩個面 實際上是任意順序,我是說假如按這個順序 近處的麵先渲染,之後渲染遠處的面,但是如果沒有開啟深度測...