首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将变量传递给Kivy中的GLSL

将变量传递给Kivy中的GLSL
EN

Stack Overflow用户
提问于 2015-12-28 10:52:25
回答 1查看 650关注 0票数 1

我试图在Kivy中做一些基本的3D操作,并且在向.glsl片段着色器发送变量时遇到了困难。我从这个例子开始。我成功地写了场景中物体的移动和旋转,但现在我正在尝试应用自定义着色器。这是示例中的顶点着色器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifdef GL_ES
    precision highp float;
#endif

varying vec4 normal_vec;
varying vec4 vertex_pos;
uniform mat4 normal_mat;

void main (void) {
    vec4 v_normal = normalize(normal_mat*normal_vec);
    vec4 v_light = normalize(vec4(0, 0, 0, 1)-vertex_pos);
    float theta = clamp(dot(v_normal, v_light), 0.0, 1.0);
    gl_FragColor = vec4(theta, theta, theta, 1.0);
}

我只是想动态地为对象设置自己的颜色,但是我无法将颜色值传递给着色器。当前,我正在动态地生成.glsl文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cache/shaders/diffuse_xxxxxx.glsl

其中xxxxxx是颜色及其线条的十六进制值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gl_FragColor = vec4(theta, theta, theta, 1.0);

替换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gl_FragColor = vec4(theta*{0}, theta*{1}, theta*{2}, 1.0);

{0}, {1}, {2}在0到1之间浮动时,我怎样才能将vec4传递给片段着色器,这样我就不必每次应用程序想要显示一个新颜色的物体时都要这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-02 12:12:00

我找到了怎么做的。

要将变量传递给GLSL,只需将变量作为键添加到小部件的画布中即可。在我的例子中,向片段着色器添加一个vec4变量意味着

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.canvas["object_colour"] = (1., )*4  # colour tuple here

在我的小部件的代码中,现在我可以这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifdef GL_ES
    precision highp float;
#endif

varying vec4 normal_vec;
varying vec4 vertex_pos;
uniform mat4 normal_mat;
uniform vec4 object_colour;

void main (void) {
    vec4 v_normal = normalize(normal_mat*normal_vec);
    vec4 v_light = normalize(vec4(0, 0, 0, 1)-vertex_pos);
    float theta = clamp(dot(v_normal, v_light), 0.0, 1.0);
    gl_FragColor = vec4(theta, theta, theta, 1.0)*object_colour;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34499035

复制
相关文章
Python中lambda(),filter(),map()函数
参考链接: Python lambda (匿名函数) | filter, map, reduce
用户7886150
2021/01/12
1K0
如何使用Python的lambda、map和filter函数
Python lambda函数,又称匿名函数,与我们使用def…语句创建的函数不同,可以命名函数,lambda函数不需要名称。当需要一个快速且不需要经常重复使用的(通常是一个小的)函数时,它非常有用。单独使用Lambda函数可能没有太多意义。lambda函数的价值在于它在哪里与另一个函数(例如map()或filter())一起使用。
fanjy
2022/06/04
2.1K0
如何使用Python的lambda、map和filter函数
针对map的lambda
例如原来的: Steam.of(Maps.of("foo", "bar")) .map(e -> e.getKey() + e.getValue()) .findFirst(); 现在 Steam.of(Maps.of("foo", "bar")) .map(SerFunc.entryFunc((key, value) -> key + value)) .findFirst();
阿超
2023/05/22
2190
python map()函数和lambda表达式
python map(fun,[arg]+)函数最少有两个参数,第一参数为一个函数名,第二个参数是对应的这个函数的参数(一般为一个或多个list)。
用户7886150
2021/01/25
6090
lambda与函数式
前面两篇文章介绍了什么是响应式编程?和响应式流的特性,一味讲概念终是枯燥,还是上手敲一敲代码实在感受一下响应式编程的“手感”吧。
Java3y
2019/10/23
5270
lambda与函数式
1.3 Hello,reactive world 前面两篇文章介绍了响应式编程和响应式流的特性,一味讲概念终是枯燥,还是上手敲一敲代码实在感受一下响应式编程的“手感”吧。 (3)lambda与函数式——响应式Spring的道法术器 这一节,我们先了解一下lambda与函数式(已经了解的朋友可以直接跳到1.3.2),熟悉一下如何使用Reactor进行响应式编程,然后使用Spring Boot2,基于Spring 5的Webflux和Reactive Spring Data逐步开发一个“Hello world”
IT架构圈
2018/06/01
5040
【Python】函数进阶 ④ ( Lambda 匿名函数 | 具名函数与匿名函数 | Lambda 函数定义语法 )
在 Python 中 , 使用 def 关键字定义的函数 是 " 具名函数 " , 也就是有名字的函数 ;
韩曙亮
2023/10/11
3390
【Python】函数进阶 ④ ( Lambda 匿名函数 | 具名函数与匿名函数 | Lambda 函数定义语法 )
强大的匿名函数lambda使用方法,结合map、apply等
在Python中,lambda的语法形式如下: lambda argument_list: expression lambda是Python预留的关键字,argument_list和expression由用户自定义。
自学气象人
2022/11/14
1.6K0
强大的匿名函数lambda使用方法,结合map、apply等
Python的lambda表达式、filter、map、reduce等函数的用法
参考链接: Python lambda (匿名函数) | filter, map, reduce
用户7886150
2021/01/12
9590
[Python]中filter、map、reduce、lambda的用法
原文链接:http://blog.csdn.net/humanking7/article/details/45950985
祥知道
2020/03/10
6410
[编程经验]Python中的Lambda,Map, Reduce小结
今天要和大家分享的是Python匿名函数(anonymous functions),也叫lambda函数。匿名函数的意思就是说这个函数没有显式的函数名,因为一般在Python中定义函数的时候都是这个样子的,def function_name(参数列表): balabalaba。暂且把具有function_name的函数称作常规函数,而匿名函数就称作lambda函数。匿名函数没有显式的函数名,但是有显式的lambda标志,写了lambda的函数就可以称作匿名函数。一般情况大家不愿意用匿名函数(因为他 们不会用
用户1622570
2018/04/11
8500
python中的zip、lambda、map操作
python 中有几个比较酷炫的操作,比如:zip、lambda、map 一、zip操作 zip字面意思:拉链。这么记,把几个东西扔到一个包里,拉上拉链,就算打包好了。通俗点讲,就是把第1个参数,与第2个参数,按位置1个个对齐,组成一系列元组. x = (1, 2) y = ("a", "b") zip_result = zip(x, y) print(list(zip_result)) x = [4, 5, 6] y = ['d', 'e'] zip_result = zip(x, y) print(
菩提树下的杨过
2018/04/16
1K0
lambda函数
lambda函数就是我们常说的匿名函数,就是不用定义函数名,lambda更像是一个表达式,限制了程序的嵌套,是一个为编写简单的函数而设计的。
dogfei
2020/07/31
9340
python的lambda函数
在Python中,lambda函数是一种匿名函数,也被称为"小型"或"即时"函数。与常规的函数不同,lambda函数没有名称,并且通常用于单行代码的简单功能。它们的语法如下:
叶茂林
2023/07/30
2450
set map list 之间的关联关系
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
4640
set map list 之间的关联关系
详细讲解:python中的lambda与sorted函数
python中的lambda函数可以接受任意数量的参数,但只能有一个表达式。也就是说,lambda表达式适用于表示内部仅包含1行表达式的函数。那么lambda表达式的优势就很明显了:
计算机与AI
2020/12/14
2.8K0
详细讲解:python中的lambda与sorted函数
java8之后的List与Map遍历(Lambda 表达式)
不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
向着百万年薪努力的小赵
2022/12/01
6740
【Python】PySpark 数据计算 ① ( RDD#map 方法 | RDD#map 语法 | 传入普通函数 | 传入 lambda 匿名函数 | 链式调用 )
在 PySpark 中 RDD 对象 提供了一种 数据计算方法 RDD#map 方法 ;
韩曙亮
2023/10/11
7380
【Python】PySpark 数据计算 ① ( RDD#map 方法 | RDD#map 语法 | 传入普通函数 | 传入 lambda 匿名函数 | 链式调用 )
学习LAMBDA函数:将Excel公式转换为自定义函数(下)
引言:本文学习整理自microsoft.com,LAMBDA的真正的解决了Excel公式存在的先天不足,让Excel公式真正的强大起来了。
fanjy
2023/02/16
2.5K0
学习LAMBDA函数:将Excel公式转换为自定义函数(下)
点击加载更多

相似问题

Ethereum闹钟还活着吗?

30

钱包格栅攻击还存在吗?

10

紫红色的纸还真的吗?

10

瓦斯用完了,还能还吗?

10

坚固的还绳不十六进制吗?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文