Python之OpenGL笔记(5):OpenGL着色器语言(GLSL)应用画三角形

Python010

Python之OpenGL笔记(5):OpenGL着色器语言(GLSL)应用画三角形,第1张

1、修改顶点着色器让三角形上下颠倒;

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 = 0.5

glUniform1f(glGetUniformLocation(self.program, "xOffset"), offset)将0.5的值赋给GLSL程序中的xOffset变量。

(以下资料都已打包,如果有需要的朋友可以转发 私信我“1”,即可免费领取)

1、python系统的思维导图 ,一套全面的python学习路线,包含pythonweb+python爬虫+python自动化+python数据分析:

2、python入门全套视频教程:

3、python电子书籍:

《python入门到精通》这本书籍豆瓣评分9.1分,这个推荐初学者一定要学一下。

4、python开发工具

5、python学习笔记

6、python爬虫的学习资料

以上这些教程我已经为大家打包准备好了,希望对正在学习的你有所帮助!(需要的朋友可以转发 私信我“1”,即可免费领取)

对于该算术运算符: % ,取模运算存在如下定理:

对于一个正整数而言,一定存在等式 ,代表可以被拆分成最多个并且余下一个 ,此时称 。

例如:正整数 17,存在等式 17 = 3 * 5 + 2,即 17 % 5 = 2.

这里介绍一下数学中的一种运算, 取余运算 。

两者在对正整数的运算中完全没有区别,但是对于负整数的运算,则会存在一定的区别。

但是要记住下面这句话,就可以很好的进行区分:

取余公式中的k要向0靠拢,也就是如果大于等于0,那就要向下取整;如果小于0,那就要向上取整。

取模公式中的k要向负无穷靠拢,不管什么情况,都是向下取整。

或者是

向上取整 math.ceil() 可以理解成 要选择大于等于该数值的整数部分的最小整数;

向下取整 math.floor() 可以理解成 要选择小于等于该数值的整数部分的最大整数。

也就是:

下面做些实际运算,加深一下印象: