【OpenGL从入门到精通】Shader专题

详解GPU的工作流程

1.shader通常称为着色器,作用是把CPU上的点渲染出来。

2.shader是并行的。

3.流程:数据data (顶点数据) ----->VS(输入:data的顶点数据,输出:gl_Position的 vec4 顶点数据)----->光栅化处理(显卡自动负责,把点连成生成面,其中包括一定像素)------>FS(输入:光栅器的输出的像素,输出画面);注意VS和FS点会同时被并行执行,多个点可以同时处理。

最简单的Shader代码

1.Vertext shader (顶点着色器)

attribute vec4 position;       //vec4是齐次坐标
uniform mat4 U_ModelMatrix;    //mat4是4x4矩阵 ,模型矩阵需要从C++传递过来
uniform mat4 U_ViewMatrix;     //视口矩阵需要从C++传递过来
uniform mat4 U_ProjectionMatrix;   //投影矩阵需要从C++传递过来
void main(){
    //自右向左,模型空间下的点-》世界坐标系-》视口矩阵转到视口空间,摄像机看到的带你-》屏幕空间
    gl_Position=U_ProjectionMatrix*U_ViewMatrix*U_ModelMatrix*position;
}

2.Fragment shader (片元着色器)

void main(){
    gl_FragColor=vec4(1.0,1.0,1.0,1.0); //gl_FragColor是输出点的颜色
}

VBO和VAO函数的区别

1.向Vertext shader中传输顶点数据时,需要使用VBO是用来加载CPU上的相关顶点数据

    GLuint  vbo;//vertex buffer object 存放顶点缓冲区的对象
    glGenBuffers(1,&vbo);//需要1个VBO,把vbo写入到显卡进去,供后续操作
    glBindBuffer(GL_ARRAY_BUFFER,vbo);//把vbo设置的奥卡槽上
    //glBufferData(GL_ARRAY_BUFFER,sizeof(Vectice)*3, nullptr,GL_STATIC_DRAW);//只在GPU上开辟内存不传数据
    //glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(Vectice)*3,vertices);//加入数组,0指vbo偏移位置
    glBufferData(GL_ARRAY_BUFFER,sizeof(Vectice)*3,vertices,GL_STATIC_DRAW);//cpu -> gpu,向GL_ARRAY_BUFFER加入数据
    glBindBuffer(GL_ARRAY_BUFFER,0);//卡槽重新绑定,防止误操作

2.多个VBO的集合称为VAO

Shader如何传入顶点坐标

 

详解Attribute和Uniform关键字

1Uniform,使用的一些变量都是一样的使用Uniform。 

2.Attribute,随着属性组变化使用Attribute。

3. OPenGLES2.0最多支持8个属性组,3.0支持16个。

详解3D渲染管线

1.MVP(M,模型矩阵;V,视口矩阵;P,投影矩阵)

自右向左,模型空间下的点-》世界坐标系-》视口矩阵转到视口空间,摄像机看到的带你-》屏幕空间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༄yi笑奈何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值