日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习OpenGL:笔记一

發布時間:2025/4/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习OpenGL:笔记一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

公司項目完結,有點閑暇時間決定學點東西。 看了下 OpenGL ,在這里做個筆記,記錄下自己學習的過程。

OpenGL思路體現

  • 1、創建圖層 --創建一個能把OpenGL ES的結果渲染上去的圖層
  • 2、創建上下文
  • 3、清空緩沖區,這里清空緩存
  • 4、設置RenderBuffer,FrameBuffer?
  • 5、開始繪制

代碼實現

  • 創建圖層
  • 創建上下文 self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];if (!self.context) {NSLog(@"Failed to create ES context");}GLKView *view = (GLKView *)self.view;view.context = self.context;view.drawableDepthFormat = GLKViewDrawableDepthFormat24;[EAGLContext setCurrentContext:self.context];

      

  • 清空緩存 glClearColor(1, 0.2, 0.2, 1);glClear(GL_COLOR_BUFFER_BIT);
  • 設置RenderBuffer,FrameBuffer?    program = glCreateProgram();const GLchar *vssource = (GLchar *)vertexShader;const GLchar *fssource = (GLchar *)fragmentShader;if (!compileShader(&vertShader,GL_VERTEX_SHADER, vssource)) {printf("Failed to compile vertex shader");return false;}if (!compileShader(&fragShader,GL_FRAGMENT_SHADER, fssource)) {printf("Failed to compile fragment shader");return false;}// Attach vertex shader to program.glAttachShader(program, vertShader);// Attach fragment shader to program.glAttachShader(program, fragShader);// Link program.if (!linkProgram(program)) {printf("Failed to link program: %d", program);if (vertShader) {glDeleteShader(vertShader);vertShader = 0;}if (fragShader) {glDeleteShader(fragShader);fragShader = 0;}if (program) {glDeleteProgram(program);program = 0;}return false;}// Release vertex and fragment shaders.if (vertShader) {glDetachShader(program, vertShader);glDeleteShader(vertShader);}if (fragShader) {glDetachShader(program, fragShader);glDeleteShader(fragShader);}*pProgram = program;printf("Effect build success => %d \n", program);

      

  • 開始繪制 static GLfloat triangleData[18] = {0, 0.5f, 0, 0, 0.5, 0, // x, y, z, r, g, b,每一行存儲一個點的信息,位置和顏色-0.5f, -0.5f, 0, 0, 1, 0,0.5f, -0.5f, 0, 0, 0.5, 1,};GLuint positionAttribLocation = glGetAttribLocation(self.shaderProgram, "position");glEnableVertexAttribArray(positionAttribLocation);GLuint colorAttribLocation = glGetAttribLocation(self.shaderProgram, "color");glEnableVertexAttribArray(colorAttribLocation);// 為shader中的position和color賦值// glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)// indx: 上面Get到的Location// size: 有幾個類型為type的數據,比如位置有x,y,z三個GLfloat元素,值就為3// type: 一般就是數組里元素數據的類型// normalized: 暫時用不上// stride: 每一個點包含幾個byte,本例中就是6個GLfloat,x,y,z,r,g,b// ptr: 數據開始的指針,位置就是從頭開始,顏色則跳過3個GLFloat的大小glVertexAttribPointer(positionAttribLocation, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (char *)triangleData);glVertexAttribPointer(colorAttribLocation, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (char *)triangleData + 3 * sizeof(GLfloat));glDrawArrays(GL_TRIANGLES, 0, 3);

      

  • 轉載于:https://www.cnblogs.com/neverMore-face/p/10115593.html

    總結

    以上是生活随笔為你收集整理的学习OpenGL:笔记一的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。