OpenGLES入門教程1-Tutorial01-GLKit OpenGLES入門教程2-Tutorial02-shader入門 OpenGLES入門教程3-Tutorial03-三維變換 OpenGLES入門教程4-Tutorial04-GLKit進階 這一次是進階教程。
代碼參考自這本書
OpenGL ES應用開發實踐指南 iOS卷
地球和月亮
通過AGLKVertexAttribArrayBuffer類管理頂點數組,*** sphere.h獲取地球和月亮的頂點、法線、紋理坐標,用矩陣棧操作矩陣,通過正視投影變換和透視投影變換***進行投影。
AGLKElementIndexArrayBuffer是頂點緩存管理類 GLsizeiptr 類型就是long GLsizei 類型是int32_t
- (id)initWithAttribStride:(GLsizeiptr)aStride numberOfVertices:(GLsizei)count bytes:(const GLvoid *)dataPtr usage:(GLenum)usage;
- (void)reinitWithAttribStride:(GLsizeiptr)aStride numberOfVertices:(GLsizei)count bytes:(const GLvoid *)dataPtr;
glVertexAttribPointer
設置頂點數據- (void)prepareToDrawWithAttrib:(GLuint)index numberOfCoordinates:(GLint)count attribOffset:(GLsizeiptr)offset shouldEnable:(BOOL)shouldEnable
+ (void)drawPreparedArraysWithMode:(GLenum)mode startVertexIndex:(GLint)first numberOfVertices:(GLsizei)count;
球體的頂點坐標數組、法線數組、紋理坐標數組,直接使用即可。
把矩陣MatrixA放入棧中緩存,然后對矩陣進行操作,得到新的矩陣MatrixB; 最后把矩陣出棧,可以得到原始矩陣MatrixA。 是對矩陣的緩存作用,在有矩陣有多個狀態時很方便。 具體看下面矩陣數值的變化:
//地球- (void)drawEarth{ self.baseEffect.texture2d0.name = self.earthTextureInfo.name; self.baseEffect.texture2d0.target = self.earthTextureInfo.target; /* current matrix: 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 -5.000000 1.000000 */ GLKMatrixStackPush(self.modelviewMatrixStack); GLKMatrixStackRotate( self.modelviewMatrixStack, GLKMathDegreesToRadians(SceneEarthAxialTiltDeg), 1.0, 0.0, 0.0); /* current matrix: 1.000000 0.000000 0.000000 0.000000 0.000000 0.917060 0.398749 0.000000 0.000000 -0.398749 0.917060 0.000000 0.000000 0.000000 -5.000000 1.000000 */ GLKMatrixStackRotate( self.modelviewMatrixStack, GLKMathDegreesToRadians(self.earthRotationAngleDegrees), 0.0, 1.0, 0.0); /* current matrix: 0.994522 0.041681 -0.095859 0.000000 0.000000 0.917060 0.398749 0.000000 0.104528 -0.396565 0.912036 0.000000 0.000000 0.000000 -5.000000 1.000000 */ self.baseEffect.transform.modelviewMatrix = GLKMatrixStackGetMatrix4(self.modelviewMatrixStack); [self.baseEffect prepareToDraw]; [AGLKVertexAttribArrayBuffer drawPreparedArraysWithMode:GL_TRIANGLES startVertexIndex:0 numberOfVertices:sphereNumVerts]; /* current matrix: 0.994522 0.041681 -0.095859 0.000000 0.000000 0.917060 0.398749 0.000000 0.104528 -0.396565 0.912036 0.000000 0.000000 0.000000 -5.000000 1.000000 */ GLKMatrixStackPop(self.modelviewMatrixStack); /* current matrix: 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 -5.000000 1.000000 */ self.baseEffect.transform.modelviewMatrix = GLKMatrixStackGetMatrix4(self.modelviewMatrixStack);}
GLKMatrix4MakeFrustum
是透視投影變換 GLKMatrix4MakeOrtho
是正視投影變換
if([aControl isOn]) { self.baseEffect.transform.projectionMatrix = GLKMatrix4MakeFrustum( -1.0 * aspectRatio, 1.0 * aspectRatio, -1.0, 1.0, 2.0, 120.0);// self.baseEffect.transform.projectionMatrix =// GLKMatrix4MakePerspective(1.0, aspectRatio, 1.0, 50.0); } else { self.baseEffect.transform.projectionMatrix = GLKMatrix4MakeOrtho( -1.0 * aspectRatio, 1.0 * aspectRatio, -1.0, 1.0, 1.0, 120.0); }
透視投影的六個參數如下圖
透視投影
投影是在近平面。(和視線焦點距離為near的是近平面,far的是遠平面)
珍藏圖-參悟投影變換的核心
這次的代碼改自第五章第六個樣例,可以學習作者的代碼風格,功能分工。 附上源碼
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
ACTION文件怎么打開?1.首先打開一個qtp文件,進入qtp界面,點擊需要動作的文件。2.然后在點擊過qtp的菜單中點擊編輯菜單。3.點擊編輯菜單后,會彈出帶有操作選項的下拉菜單。4.點擊操作選項后,下一級菜單將彈出,選擇的選項為分割操作。5.會彈出qtp的確認。單擊是。6.這樣,在拆分動作窗口的界面中,會彈出動作的默認文件名。單擊確定。7.您可以看到當前中的操作文件已打開。后綴為.actio...
qq綠鉆和黃鉆區別?綠鉆和黃鉆的區別是:的綠鉆是指音樂給用戶提供的一些特權服務,黃鉆是空間的會員。不同的會員所對應的特權不同,綠鉆可以用來下載高質量音樂,黃鉆則可以給空間添加背景,裝飾,文字,等的美化還有其他的特權例如的vip和svip等,可以根據所需進行購買。黃鉆有什么用?有什么好處?開哪個鉆最劃來?騰訊的鉆都是各有功能的! 黃鉆主要是空間裝扮,皮膚等可以免費用,好處就是空間比普通用戶的弄得漂亮...
U盤內存變小了是怎么回事???有三種可能會性第一:很有可能是內存量盤要是網上購買8GBU盤其神秘容量僅4G也可以更少的話,狀況多為衣服縮水U盤,也稱“快速擴容盤”。這種U盤是不法廠商可以使用一種量產中工具的軟件,決定U盤上的控制芯片信息,將U盤容量標住到遠為0其換算容量,以欺詐消費者的手段牟取暴利。當U盤的實際中容量大于或等于其標稱值的90%時,即被認為為未知質量問題的會縮水U盤。第二:換算大小和剩...