(Python OpenGL)【4】Uniform变量 PyOpenGL
(Python OpenGL)
原文:http://ogldev.atspace.co.uk/www/tutorial05/tutorial05.html(英文)
__author__ = "WSX"
import numpy as np
from OpenGL.GLUT import *
from OpenGL.GL import *
import ctypes
import math
global gScaleLocation
Scale = 0.0
#顶点着色器部分
VERTEX_SHADER = """
#version 330 layout (location = 0) in vec3 Position; uniform float gScale;
void main()
{
gl_Position = vec4(gScale * Position.x, gScale * Position.y, Position.z, 1.0);
}
"""
#片段着色器部分,字符串类型
FRAGMENT_SHADER = """
#version 330
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
"""
def Create_Shader( ShaderProgram, Shader_Type , Source): #创建并且添加着色器(相当于AddShader)Shader_Type为类型
ShaderObj = glCreateShader( Shader_Type ) #创建Shader对象
glShaderSource(ShaderObj , Source)
glCompileShader(ShaderObj) #进行编译
glAttachShader(ShaderProgram, ShaderObj) #将着色器对象关联到程序上 def Compile_Shader(): #编译着色器
global gScaleLocation
Shader_Program = glCreateProgram() #创建空的着色器程序
Create_Shader(Shader_Program , GL_VERTEX_SHADER , VERTEX_SHADER)
Create_Shader(Shader_Program , GL_FRAGMENT_SHADER , FRAGMENT_SHADER)
glLinkProgram(Shader_Program)
glUseProgram(Shader_Program)
gScaleLocation = glGetUniformLocation(Shader_Program , "gScale") def Draw():
global Scale
glClear(GL_COLOR_BUFFER_BIT)
Scale += 0.001
glUniform1f(gScaleLocation , math.sin(Scale))
glEnableVertexAttribArray(0)
glBindBuffer(GL_ARRAY_BUFFER, VBO)
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, None) #这里的None不能写为0
glDrawArrays(GL_TRIANGLES, 0, 3)
glDisableVertexAttribArray(0) #解析数据 例如一个矩阵里含有 位置 、颜色、多种信息
glutSwapBuffers() def CreateBuffer(): #创建顶点缓存器
global VBO #设置为全局变量
vertex = np.array([[-1.0,-1.0,0.0],
[1.0,-1.0,0.0],
[0.0,1.0,0.0]],dtype="float32") #创建顶点数组
VBO = glGenBuffers(1) #创建缓存
glBindBuffer(GL_ARRAY_BUFFER , VBO) #绑定
glBufferData(GL_ARRAY_BUFFER , vertex.nbytes , vertex , GL_STATIC_DRAW) #输入数据 def InitializeGlutCallbacks():
glutDisplayFunc(Draw) # 回调函数
glutIdleFunc(Draw) def main():
glutInit([])
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA) # 显示模式 双缓存
glutInitWindowPosition(100, 100) # 窗口位置
glutInitWindowSize(500, 500) # 窗口大小
glutCreateWindow("sanjiao") # 创建窗口
glutInitContextVersion(4,3) #为了兼容
glutInitContextProfile(GLUT_CORE_PROFILE) #为了兼容
InitializeGlutCallbacks()
glClearColor(0.0, 0.0, 0.0, 0.0)
CreateBuffer()
Compile_Shader()
glutMainLoop() main()
效果:(动态效果,之后添加)
(Python OpenGL)【4】Uniform变量 PyOpenGL的更多相关文章
- 初试PyOpenGL四 (Python+OpenGL)GPU粒子系统与基本碰撞
这篇相当于是对前三篇的总结,基本效果如下: 在初试PyOpenGL一 (Python+OpenGL)讲解Pyopengl环境搭建,网格,球体,第一与第三人称摄像机的实现.在初试PyOpenGL二 (P ...
- (Python OpenGL)【5】平移 PyOpenGL
(Python OpenGL) 原文:http://ogldev.atspace.co.uk/www/tutorial06/tutorial06.html (英文) 下面是我翻译过来的: 背景 在本 ...
- OpenGL红宝书例子2.2 uniform变量的使用
1. 简单介绍一下OpenGL可编程渲染管线的流程 顶点着色 --> 细分着色 --> 几何着色 --> 片元着色 --> 计算着色 一般我们主要参与的阶段是顶点着色和片元着色 ...
- (Python OpenGL)【3】着色器 PyOpenGL
(Python OpenGL)现在开始我们使用着色器来进行渲染.着色器是目前做3D图形最流行的方式. OpenGL的渲染管线流程: 数据传输到OpenGL—>顶点处理器—>细分着色—> ...
- OpenGL编程逐步深入(五)Uniform 变量
准备知识 在这个教程中我们会遇到一种新的Shader变量类型,即uniform变量.attribute(属性)变量和uniform变量的不同之处在于attribute 变量中包含顶点的具体数据,当每次 ...
- 【Python OpenGL】【2】第一个三角形(Pyopengl)
根据顶点缓存来生成图元(Python OpenGL) 原文(英文链接)http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html __auth ...
- (Python OpenGL)【1】你好顶点 PyOpenGL
原文链接(C语言环境)(Python OpenGL) 我用python实现的代码: __author__ = "WSX" from OpenGL.GLUT.freeglut imp ...
- CSharpGL(33)使用uniform块来优化对uniform变量的读写
CSharpGL(33)使用uniform块来优化对uniform变量的读写 +BIT祝威+悄悄在此留下版了个权的信息说: Uniform块 如果shader程序变得比较复杂,那么其中用到的unifo ...
- Python 类变量和成员变量
Python 类变量和成员变量 类与对象的方法 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分.事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提 ...
随机推荐
- sass和less、stylus语法(2)
6.运算符(Operations)CSS预处理器语言还具有运算的特性,其简单的讲,就是对数值型的Value(如:数字.颜色.变量等)进行加减乘除四则运算.这样的特性在CSS样式中是想都不敢想的,但在C ...
- CRC 简介
CRC wiki,历史发展,各个版本的用途 等 https://en.wikipedia.org/wiki/Cyclic_redundancy_check (apple)crc32.c /* * Th ...
- js生成邀请码(1)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- Profile配置
Profile是Spring用来针对不同环境对不同的配置提供支持的,全局Profile配置使用application-{profile}.properties application.properti ...
- MySQL启动失败解决办法
本人大二,进了一家培训机构学了两年,然后跟着他们做项目,其实也是练习,然后过程中遇到好多错误,当时解决了,然后下次遇到又忘了,-_-! -_-||| 我就想通过写博客来记载一下我遇到的错误和解决的办 ...
- delphi VCL组件同名继承
当我们在扩展一个 vcl 组件功能的时候,既想保留IDE中能拖动大小与直接设置属性的功能,又想减少写创建与释放代码和安装扩展后新组件的麻烦,那么本文中的方法,就非常实用了. 以给TStringGrid ...
- CentOS和Ubuntu系统下安装vsftp(助推大数据部署搭建)
不多说,直接上干货! 同时,声明,我这里安装的vsftp,仅仅只为我的大数据着想,关于网上的复杂安装,那是服务和运维那块.我不多牵扯,也不多赘述. 一.CentOS系统里安装vsftp 第一步:使用y ...
- 【总结整理】openlayer加载搜狗地图,qq地图,mapabc
qq http://www.cnblogs.com/gisvip/archive/2012/11/01/2750493.html mapabc http://www.cnblogs.com ...
- Mybatis的批处理以及执行Update返回行数为负数
项目中用到了批量更新. 在开发当中,可能经常会遇到批量处理这种情况,一般都再在java层面进行, 其本质是节省数据库连接打开关闭的的次数,占用更少的运行内存. 下面先记一下批处理映射吧: mybati ...
- 硬链接与软链接有什么不同(ln)
Linux建立的链接有两种方式 如Windows系统下的快捷方式(.lnk)相似的东东 分为硬链接(Hard Link)和软链接(Symbolic Link)也叫符号链接 默认情况下,ln命令产生硬链 ...