1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          iOS開發-OpenGLES進階教程

          來源:互聯網轉載 時間:2024-01-29 08:01:08

          教程

          OpenGLES入門教程1-Tutorial01-GLKit OpenGLES入門教程2-Tutorial02-shader入門 OpenGLES入門教程3-Tutorial03-三維變換 OpenGLES入門教程4-Tutorial04-GLKit進階 這一次是進階教程。

          代碼參考自這本書

          OpenGL ES應用開發實踐指南 iOS卷

          效果展示

          地球和月亮

          核心思路

          通過AGLKVertexAttribArrayBuffer類管理頂點數組,*** sphere.h獲取地球和月亮的頂點、法線、紋理坐標,用矩陣棧操作矩陣,通過正視投影變換透視投影變換***進行投影。

          具體細節

          1、AGLKElementIndexArrayBuffer類

          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;

          2、sphere.h球體

          球體的頂點坐標數組、法線數組、紋理坐標數組,直接使用即可。

          3、矩陣棧

          把矩陣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);}

          4、變換

          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的是遠平面)

          珍藏圖-參悟投影變換的核心

          總結

          這次的代碼改自第五章第六個樣例,可以學習作者的代碼風格,功能分工。 附上源碼

          標簽:opengles-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          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盤。第二:換算大小和剩...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>