
2、使用uniform定义一个水平偏移量,在顶点着色器中使用这个偏移量把三角形移动到屏幕右侧。
着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵 *** 作的有用特性。
着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。
虽然着色器是各自独立的小程序,但是它们都是一个整体的一部分,出于这样的原因,我们希望每个着色器都有输入和输出,这样才能进行数据交流和传递。
GLSL定义了in和out关键字专门来实现这个目的。每个着色器使用这两个关键字设定输入和输出,只要一个输出变量与下一个着色器阶段的输入匹配,它就会传递下去。但在顶点和片段着色器中会有点不同。
如果我们打算从一个着色器向另一个着色器发送数据,我们必须在发送方着色器中声明一个输出,在接收方着色器中声明一个类似的输入。当类型和名字都一样的时候,OpenGL就会把两个变量链接到一起,它们之间就能发送数据了(这是在链接程序对象时完成的)。
Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。首先,uniform是全局的(Global)。全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。第二,无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。
1、顶点坐标的 Y 值 乘以 -1,即 使三角形反转。(图形向量转换)
2、 渲染阶段,在程序中设定offset 值,传送给着色器。
3、glGetUniformLocation方法:获取着色器程序中,指定为uniform类型变量的id。
4、glUniform1f(GLint location, GLfloat v0); location指明要更改的uniform变量的位置;v0指明在指定的uniform变量中要使用的新值。
5、offset = 05
glUniform1f(glGetUniformLocation(selfprogram, "xOffset"), offset);将05的值赋给GLSL程序中的xOffset变量。
openGL是一个图形包。开发3D 图形用(3D图形很复杂,自己写很麻烦,而且很有难度,就像现在我写WINDOWS的小程序时,宁愿用VB而不可能用C语言来写,因为VB使界面的编写变得极简单,按个按钮就行了。如果用C,就要自己先写好很多的东西,然后才可以利用这些东西进行开发,这样任务就变得非常艰巨,写个按钮都累死你)。
简单说,OPENGL就是提供了一个搞3D图形的工具(软件)。用这个工具去开发就方便很多啦。同样的,DIRECT 3D也是一个工具,不过多用在家用方面,像游戏等等。而OPENGL则倾向工业设计或其他方面。
写游戏的公司一般不是用openGL就是directX了,我想也没有多少公司会自己写个图形包出来(费用太大)再开发游戏。
本文同时发布在我的个人博客上: >
以上就是关于Python之OpenGL笔记(5):OpenGL着色器语言(GLSL)应用画三角形全部的内容,包括:Python之OpenGL笔记(5):OpenGL着色器语言(GLSL)应用画三角形、关于opengl、计算机图形学(OPENGL):模板测试等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)