在源代码使用if/else逻辑
I的节点编辑器中实现函数时遇到问题,我正在blender中创建颜色饱和度节点组作为练习。这就是我想要的代码机具:RGBtoHSV=函数(color){var r,g,b,h,s,v;r
解答动态
重写代码as
h1=(g-b)/delta;//和品红之间h2=2+(b-r)/delta;//青色和之间h3=4+(r-g)/delta;//品红和青色之间h1=(r==max)*h1h+=(1-(r==max))*(g==max)*h2h+=(1-(r==max))*(1-(g==max))*h3 其中(X==Y)表示X和Y相等,0表示X和Y相等不同的(例如,数学节点上的“比较”操作所做的操作)。
这只是一组算术运算,因此转换为节点很简单,尽管很费劲。
edit
下面是我如何处理节点的。这个does
tmp=(g==最大值)?h2:h3;h=(r==最大值)?h1:tmp;
if-Then-Else节点可以使用lerp
if只是一个带有布尔(1或0)输入的lerp(线性插值)。这是一个简单的想法。
和一个lerp,目前,最容易实现地图范围节点:
i我们用“ELSE”和“IF”标记值节点,以明确哪个是哪个。所以我在这里要说的是,如果UV.x>;0.5,那么1.0,或者0.0.
,那么让我们看看你的实际手臂代码:
if(r===max)h=(g-b)/delta;//在和品红else之间如果(g===max)h=2+(b-r)/delta;//在青色和else之间h=4+(r-g)/delta;//在品红和;现在,让我们重写一下,因为从代码的方式来看,操作顺序不是特别清楚写入:
if(r===max){h=(g-b)/delta;//和品红之间}其他{if(g===max){h=2+(b-r)/delta;//青色和之间}其他{h=4+(r-g)/delta;//在洋红和青色}}} 之间通过重新排序,我们可以看到else-if实际上是一个嵌套的if语句。让我们把它付诸实践节点:
Using我们输入的值节点,假设===意味着相等比较(我不熟悉这个用法),我们的输出当然是h,这是snippet分配的唯一内容。
我在这里有一个答案,在这里我使用比较节点创建一个具有默认大小写的开关。
在这一点上,我必须指出在这些节点的最小值和最大值处有重叠,并且胜者由MixRGB节点的顺序决定。
例如,值为.2将激活第一个和第二个比较节点的代码路径,但将胜出.- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。