OpenGL渲染管线入门
2023-01-14 18:47:07 6 举报
通过流程图的形式,把OpenGL渲染管线从数据到出图涉及的主要API、对象、数据流组织起来,旨在令读者建立对OpenGL相对完整全局的认识,只看一份文件就能迅速画出第一张图。
作者其他创作
大纲/内容
顶点和片段着色器
纹理文件流数组 data
mipmap的层级数就是第一个函数的第二参
采样结果
若没有VAO,单独用也可glVertexAttribPointer()glEnableVertexAttribArray()
VAO顶点数组对象
第二个参数一般为0
如果图裂了,把两个RGB分别试试改成RGBA
GLSL Shader code
渲染循环不用再绑定tex,在激活并向Uniform传递材质单元后就可以使用了
片段着色器FragmentShader
顶点数据数组
glDelete(uint shader)
一旦调用Use,就应用了该Shader
完成Bind后即与当前VAO关联VAO只能关联一个EBO
EBO/IBO元素/索引缓冲对象
只有一个对象时,默认激活
Shader根据传入Sampler2D的数据对显存中的纹理对象采样
来自CPU的数据以Uniform类型传入ShaderProgramUniform可以理解为Shader之外的全局常量Shader自身不能修改传入的Uniform在向Shader传递Uniform前必须先UseShader
mipmap对象(可选)
经过解释的数据
顶点着色器VertexShader
OpenGL纹理对象显存中
参照顶点属性指针解释VBO数据
激活的纹理单元
两者逻辑上对应
完成Bind后即与当前VAO关联
出图!
顶点属性数组VertexAttribArray
一系列纹理对象
一个Shader程序
stbi_image_free(data)
用完就删
顶点索引数组
纹理图片文件
指定输入数据来源
16个纹理单元可以使用
此处GL_TEXTURE0~15即为纹理单元与第三个函数中的TeXUnitNo对应
VBO顶点缓冲对象显存中
生成纹理对象
Layout(location = x)location是指显存存储的VBO对象的数据经过AttribPoint解释后,被设定好的vertAttrib值若不设置,在CPU访问时就要调用glGetUniformLocation()
开始
调用glVertexAttribPtr时绑定到arrayBuffer的VBO就是该函数要解析的VBO
若第二参为0,等价于解绑
glTexParameteri()glTexParameterv()
用完即弃
0 条评论
回复 删除
下一页