生活随笔
收集整理的這篇文章主要介紹了
学习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:笔记一的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。