1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【OpenGL从入门到精通】Shader专题

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

时间:2021-06-05 01:04:30

相关推荐

【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,投影矩阵)

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。