Openg-三角形绘制
Sharder從CPU獲取數據
cpu給定點數據,送給GPU進行繪制,layout是布局,layout是錨點,GPU是一套錨點信息,放置數據信息。GPU通過錨點來讀取數據。
Vertex Shader
layout(location =0) in vec3 aPos;
void main(){
gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);//內建變量,1.0矩陣變換
}
Fragment Shader
out vec4 FragColor;//輸出一個顏色值,對每一個像素都做
void main(){
FragColor=vec4(1.0f,0.5,0.2f,1.0f);
}
VBO
1.獲取vbo的index
glGenBuffer(1,&VBO);
2.綁定vbo的index
glBindBuffer(GL_ARRAY_BUFFER,VB);
3.給vbo分配顯存空間,傳輸數據
GLBUFFERDATA(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//static,頂點不變化;
4.告訴shader的數據解析方式
glVertexAttribPointer(0(錨點,唯一),3,GL_FLOAT,GL_FALSE(是否歸一化),3(跨度,讀取一行)*sizeof(float), (void*)0(從哪開始讀取);
5.激活錨點
glEnableVetexAttriARRAY(0);
glBindBuffer(GL_ARRAY_BUFFER,0);
?
著色器
vertexID=glCreateSharder(gl_vertext_SHADER);
glSharderSource(vertexID,1, &_vSharderStr,NULL);
glCompileSharder(vertexID);//編譯
glGetSharderiv(vertexID,GL_COMPLIE_STATUS,&successFLAG);//獲取編譯狀態
著色器程序
sharderProgram=glCreateProgram();
glAttachShader(sharderPropram, vertextshader);
glAttachShader(shaderProgram, fragshader);
glLinkProgram(sharderProgram);
glGetProgram(shaderProgram, GL_LINK_STATUS,&successflag);
if(!_sucessFlag)
{
? ? ?glPragramInfolog(shaderProgram,NULL,_info);
}
VAO
1.獲取VAO
glGenVertexArrays(1,&VAO);
glBindVertexArray(VAO);
。。。。。
glBIndVertexArray(0);解綁
VAO綁定了錨點的位置
繪圖
glBindVertexArray(VAO);
glUseProgram(shaderProgram);
glDrawArrays(gl_triangles,0,3);
Uniform
glGetUniformLocation(sharderProgram,"ourColor");
glUniform4f(_location,0.0f,
?
?
?
總結
以上是生活随笔為你收集整理的Openg-三角形绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android-NDK-Opengl
- 下一篇: HEVC-帧间预测