我试图在webgl中编写一个简单的高斯模糊着色器。我已经对此进行了很多搜索,我想我理解它背后的想法。给定这个3X3内核。如何将其应用于我的顶点着色器?
[ 0.0625 0.125 0.0625 ]
[ 0.125 0.25 0.125 ]
[ 0.0625 0.125 0.0625 ]
Run Code Online (Sandbox Code Playgroud)
特别是如何获取相邻像素?
这种逻辑甚至有意义吗?
precision mediump float;
varying vec2 vUV;
uniform sampler2D uTexture;
void main(){
gl_FragColor = texture2D(uTexture, vUV + vec2(????,????)*0.0625;
}
Run Code Online (Sandbox Code Playgroud)
我应该在上面的vec2()中放什么?说如果我想获得内核的左上角纹理值。假设我应该写vUv为(20,20)以获得(19,19)
gl_FragColor = vec4(0.0);
gl_FragColor += texture2D(uTexture, vUV + vec2(vUV.x-1.0,vUV.y-1.0))*0.0625;
gl_FragColor += texture2D(uTexture, vUV + vec2(vUV.x,vUV.y-1.0))*0.125;
gl_FragColor += texture2D(uTexture, vUV + vec2(vUV.x+1.0,vUV.y-1.0))*0.0625;
gl_FragColor += texture2D(uTexture, vUV + vec2(vUV.x-1.0,vUV.y))*0.125;
gl_FragColor += texture2D(uTexture, vUV + vec2(vUV.x,vUV.y))*0.25;
gl_FragColor += texture2D(uTexture, vUV …Run Code Online (Sandbox Code Playgroud) 最近我看到一个问题在这里蟒蛇这里
1:Python If语句和逻辑运算符问题.评论中有人给出了答案,可以这样做:
1 in (1, 2, 3)检查一个项目集合中是否存在1.但据我说,这应该快得多1 in {1, 2, 3}.正如你在讨论中看到的那样,一个声誉很高的人继续说( )固定大小输入更快.并且具有更快的查找速度{ }.我在这里问它是因为我想知道我自己的理解哪一个是正确的,而且我也不知道( )是fiexd-size或是variable size.我只是要求对原始问题进行反思,这样我就可以纠正自己,如果我错了,但是用户要求清除我的计算机科学知识的基础知识,而不是对他的论点进行单一的反思lookup in Tuple is O(1).所以我在这里问.
我在c中有这么简单的代码:
#include <stdio.h>
void test() {}
int main()
{
if (2 < 3) {
int zz = 10;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我看到这段代码的汇编输出时:
test():
pushq %rbp
movq %rsp, %rbp
nop
popq %rbp
ret
main:
pushq %rbp
movq %rsp, %rbp
movl $10, -4(%rbp) // space is created for zz on stack
movl $0, %eax
popq %rbp
ret
Run Code Online (Sandbox Code Playgroud)
我从这里 得到了程序集(默认选项) 我看不出条件检查的指令在哪里?
考虑在python中编写一个小型库,它有一个x接受参数的简单方法并ac返回计算值10/ac.现在抓住这里是ac不可能的0.所以我如何在我的方法中处理这种情况.我想到了这些方法.
注意:我已经研究了python异常处理,但它只是展示了如何使用try except不是我要求的具体问题.
方法1
def x(ac):
try:
return (10/ac)
except ZeroDivisionError:
raise ZeroDivisionError("ac cannot be zero")
Run Code Online (Sandbox Code Playgroud)
上面的代码只是使用一个普通的try除了块来捕获特定的异常并引发调用代码的异常.所以调用代码看起来像这样:
# some script...
try:
x(0)
except ZeroDivisionError as e:
log(e)
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我必须事先知道方法x可能引发的所有可能的异常.
方法2:
def x(ac):
if ac == 0:
raise ValueError("ac cannot be zero") # or ZeroDivisionError??
else:
return (10/ac)
Run Code Online (Sandbox Code Playgroud)
我猜这在语义上与前一个相同,只是为了检查一些条件(我们知道可能会发生)使用if's和基于此提高异常.它也遇到了事先知道方法可能抛出的异常的相同问题.
方法3
最后一个方法是不处理库方法中的任何异常,而是将其留给客户端代码,但这显然没有意义,因为客户端永远无法知道为什么在诉诸类似的事情时可能会发生错误.
def x(ac):
return (10/ac)
try:
x(20)
except Exception as e:
log(e)
Run Code Online (Sandbox Code Playgroud)
现在这个方法只是一个操作的简单方法,但如果方法本身正在做一些复杂的事情,如连接到数据库然后获取一些结果.就像是 :
def …Run Code Online (Sandbox Code Playgroud)