这是如何运作的?
这个想法是abs(x)对整数使用按位运算符(假设为 32 位字):
y = x >> 31
(x + y) ^ y // This gives abs(x) (is ^ XOR)?
Run Code Online (Sandbox Code Playgroud) 我正在研究一个顶点着色器,我想要有条件地删除一些顶点:
float visible = texture(VisibleTexture, index).x;
if (visible > threshold)
gl_Vertex.z = 9999; // send out of frustum
Run Code Online (Sandbox Code Playgroud)
我知道当相邻数据之间几乎没有共性时,分支会破坏性能.在这种情况下,每个其他顶点可能会得到一个不同的"可见"值,这对于本地着色器核心集群的性能(从我的理解)来说是不利的.
我的问题:三元运算符是否更好(无论可读性问题)?
float visible = texture(VisibleTexture, index).x;
gl_Vertex.z = (visible > threshold) ? 9999 : gl_Vertex.z;
Run Code Online (Sandbox Code Playgroud)
如果没有,是否将其转换为有价值的计算?
float visible = texture(VisibleTexture, index).x;
visible = sign(visible - threshold) * .5 + .5; // 1=visible, 0=invisible
gl_Vertex.z += 9999 * visible; // original value only for visible
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来放弃顶点而不依赖于几何着色器?
在此先感谢您的帮助!
我想通过bash中的以下代码取一个数字的绝对值:
#!/bin/bash
echo "Enter the first file name: "
read first
echo "Enter the second file name: "
read second
s1=$(stat --format=%s "$first")
s2=$(stat -c '%s' "$second")
res= expr $s2 - $s1
if [ "$res" -lt 0 ]
then
res=$res \* -1
fi
echo $res
Run Code Online (Sandbox Code Playgroud)
现在我遇到的问题是在if语句中,无论我改变什么,它总是在if中,我试图放置[[ ]]声明但没有.
这是错误:
./p6.sh: line 13: [: : integer expression expected
Run Code Online (Sandbox Code Playgroud) 我想返回一个不超过我设定限制的数字.例如,我想做相当于:
if (number >= limit)
number = limit;
return number;
Run Code Online (Sandbox Code Playgroud)
是否有一种数学方法可以完全相同于我刚才描述的一行?