1.紋理坐標(biāo)、屏幕坐標(biāo);
1)http://blog.csdn.net/cbbbc/article/details/39738641
2)畫法有多種:紋理貼圖的另一個跑得起來的例子:講了很多的例子;
如何在OpenGL畫、如何用CoreGraphics畫、如何用
https://github.com/icetime17/DemoOpenGL.git
3)有幾種畫板?GLKView也是一種!Framebuffer+layer是一種!頂點方式一種!
2.新手入門概念:http://www.olinone.com/?p=308
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)、
glViewport
glMatrixMode、
glLoadIdentity、
glOrthof(0, 320, 0, 480, -1024, 1024);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity
glColor4f(r,g,b,alpha)[與L(Lr,Lg,Lb,x)互斥]
glVertexPointer(2/vertexBuffer中每2個一組為頂點/, GL_FLOAT, 0/stride/, vertexBuffer);
GLProgram *yuvConversionProgram:將YUV顏色空間轉(zhuǎn)換成RGB顏色空間的GLSL。
http://www.itdecent.cn/p/856f30c86d2f
6.也是一個超級簡單的例子:https://github.com/panghaijiao/HJGLKViewControllerDemo
0)我們要處理的坐標(biāo)的兩種類型:模型和世界。模型坐標(biāo)是指我們正在繪制的實際圖元,世界坐標(biāo)告訴OpenGL觀察者在哪里。
1)不同坐標(biāo)系下,平行四邊形的各個頂點坐標(biāo)怎么標(biāo)。
2)默認是:【-1,1】??梢愿某蓀rojection+glOrthof坐標(biāo)系:left,right,bottom,top,znear,zfar。
3)頂點描述的順序應(yīng)該都是:left, top, right,bottom.畫序可以重新指定。
7.詳細講解各種基礎(chǔ)概念:http://blog.csdn.net/candycat1992/article/details/39676669
一定要看:
1).如何把頂點和它相關(guān)的信息,例如紋理坐標(biāo)、法線等,傳遞給GLSL呢?
頂點跟紋理合并成一個數(shù)組。
為了設(shè)置Uniform的值,我們可以調(diào)用glUniform*系列函數(shù)。而設(shè)置Attribute的值,我們需要在VBO中保存,并且和VAO一起發(fā)送給著色器,就像前一篇教程里的glVertexAttribPointer。加入你不想把值存在VBO里,你也可以使用glVertexAttrib*系列函數(shù)來設(shè)置Attribute值。
2).glUniform2f+ glUniform3vf:它不使用函數(shù)重載來解決不同類型的數(shù)據(jù)問題;
3).渲染的頂點可以定義索引,以后重復(fù)使用:索引列表;
4).紋理數(shù)據(jù)的維度大小一定要和上面的坐標(biāo)數(shù)組大小一致;合并后的頂點屬性列表:{5個數(shù)值、5個數(shù)值。。。}[前三個是頂點, 后兩個是紋理]
5)VBO和VAO如何創(chuàng)建,關(guān)聯(lián)呢?
glGenBuffers+glBindBuffer+glBufferData(vertices):buffer是真正放頂點數(shù)據(jù)的地方。
glEnableVertexAttribArray+glVertexAttribPointer+glDrawArrays
glVertexAttribPointer使用來上傳頂點數(shù)據(jù)到顯卡的方法;
float position[9]={
-0.8f, -0.8f, 0.0f,
0.8f, -0.8f, 0.0f,
0.0f, 0.8f, 0.0f};
glVertexPointer(3, GL_FLOAT, 0,position);/*size:指定每個頂點對應(yīng)的坐標(biāo)個數(shù),可取2,3,4 */
[如果我們使用2d繪制,不加入深度(就是z),我們只要在這里寫2就可以了。]
6)vertex Array object和 vertext buffer object《這里的都是vertext相關(guān)的,buffer不是framebuffer那個概念》
glBindBuffer(GL_ARRAY_BUFFER, buf1);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
這個過程就像一個中介人的作用,而中介人就是GL_ARRAY_BUFFER。我們可以這么想,glBindBuffer 設(shè)置了一個全局變量,然后glVertexAttribPointer讀取了這個全局變量并把它存儲在VAO中,這個全局變量就是GL_ARRAY_BUFFER。當(dāng)調(diào)用完glVertexAttribPointer后,頂點屬性已經(jīng)知道了數(shù)據(jù)來源就是buf1,它們之間就會直接聯(lián)系,而不需要在通過GL_ARRAY_BUFFER。
8.高級概念:
1)關(guān)于framebuffer是renderbuffer的管理者的觀點總結(jié):http://blog.csdn.net/colorapp/article/details/36899341
2)
9.貼圖:
http://www.cocoachina.com/game/20150812/12970.html
http://www.cnblogs.com/bigly/p/5804541.html
1)可以用attribute給Shader傳值,Shader再傳給FragmentShader,但Uniform可以直接給FragShader傳旨;
2)讓我看懂了glVertexAttribPointer如何從bufferData中獲取頂點、法線、顏色、紋理的值;注釋非常詳細。