天道酬勤,学无止境

clamp

使用 Mathf.Clamp() 限制对象旋转的问题(Problems limiting object rotation with Mathf.Clamp())

问题 我正在开发一个在 z 轴上旋转对象的游戏。 我需要将总旋转限制为 80 度。 我尝试了以下代码,但它不起作用。 minAngle = -40.0f 和 maxAngle = 40.0f Vector3 pos = transform.position; pos.z = Mathf.Clamp(pos.z, minAngle, maxAngle); transform.position = pos; 回答1 您发布的代码限制了 z 位置。 你想要的是使用transform.rotation void ClampRotation(float minAngle, float maxAngle, float clampAroundAngle = 0) { //clampAroundAngle is the angle you want the clamp to originate from //For example a value of 90, with a min=-45 and max=45, will let the angle go 45 degrees away from 90 //Adjust to make 0 be right side up clampAroundAngle += 180; //Get the angle of the z axis and

2021-06-12 11:53:37    分类:技术分享    object   unity3d   rotation   clamp

如何正确钳制贝克曼分布(How to properly clamp beckmann distribution)

问题 我正在尝试实现 Microfacet BRDF 着色模型(类似于 Cook-Torrance 模型),但我在本文中定义的贝克曼分布方面遇到了一些问题:https://www.cs.cornell.edu/~srm/publications /EGSR07-btdf.pdf 其中 M 是微面法线,N 是宏观面法线,ab 是 [0, 1] 之间的“硬度”参数。 我的问题是这种分布通常会返回非常大的值,尤其是当 ab 非常小时。 例如,贝克曼分布用于计算根据以下方程生成微面法线 M 的概率: 概率必须在范围 [0,1] 之间,那么如果贝克曼分布给我的值大小为 1000000000+,那么如何使用上面的函数获得该范围内的值? 那么有没有合适的方法来限制分布? 还是我误解了它或概率函数? 如果值超过 1,我曾尝试将其简单地钳位为 1,但这并没有真正给我想要的结果。 回答1 我和你有同样的问题。 如果你读 http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physics_math_notes.pdf 和 http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physics

2021-06-11 20:36:52    分类:技术分享    graphics   shader   probability   raytracing   clamp

有没有限制/限制数字的方法?(Is there a method to limit/clamp a number?)

问题 我编写了以下代码,使x保持在(a..b)范围内。 在伪代码中: (if x < a, x = a; if x > b, x = b) 在 Ruby 中,它将类似于: x = [a, [x, b].min].max 由于它是非常基本且有用的功能,我想知道在 ruby​​ 中是否有一种本机方法可以做到这一点。 从 Ruby 2.3.3 开始,显然没有这样的方法,最短/更易读的方法是什么? 我发现: x = [a, x, b].sort[1] 到目前为止,但我不确定它是否更具可读性。 回答1 Ruby 2.4.0 引入了 Comparable#clamp: 523.clamp(0, 100) #=> 100 回答2 我自己的回答:不 然而 x = [a, x, b].sort[1] 是一个解决方案。 回答3 我这样做了: class Numeric def clamp min, max [[self, max].min, min].max end end 所以每当我想夹任何东西时,我可以打电话: x.clamp(min, max) 我觉得这很好读。 回答4 这是我从实际实现中大量借鉴的解决方案: unless Comparable.method_defined? :clamp module Comparable def clamp min, max if max-min<0

2021-06-03 19:04:54    分类:技术分享    ruby   clamp

How to properly clamp beckmann distribution

I am trying to implement a Microfacet BRDF shading model (similar to the Cook-Torrance model) and I am having some trouble with the Beckmann Distribution defined in this paper: https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf Where M is a microfacet normal, N is the macrofacet normal and ab is a "hardness" parameter between [0, 1]. My issue is that this distribution often returns obscenely large values, especially when ab is very small. For instance, the Beckmann distribution is used to calculate the probability of generating a microfacet normal M per this equation : A probability

2021-05-31 22:51:11    分类:问答    graphics   shader   probability   raytracing   clamp

在Swift中将数字“限制”在两个值之间的标准方法(Standard way to “clamp” a number between two values in Swift)

问题 鉴于: let a = 4.2 let b = -1.3 let c = 6.4 我想知道将这些值钳位到给定范围(例如0...5的最简单,最快捷的方法: a -> 4.2 b -> 0 c -> 5 我知道我可以执行以下操作: let clamped = min(max(a, 0), 5) 或类似的东西: let clamped = (a < 0) ? 0 : ((a > 5) ? 5 : a) 但是我想知道在Swift中是否还有其他方法可以做到这一点-特别是我想知道(并在SO上进行文档记录,因为在Swift中似乎没有关于夹紧数字的问题)中是否包含任何内容。 Swift标准库专门用于此目的。 可能没有,如果是的话,那也是我很乐意接受的答案。 回答1 斯威夫特4/5 Comparable/Strideable扩展类似于标准Swift库中的ClosedRange.clamped(to:_) -> ClosedRange 。 extension Comparable { func clamped(to limits: ClosedRange<Self>) -> Self { return min(max(self, limits.lowerBound), limits.upperBound) } } // Swift < 5.1 extension Strideable where

2021-05-09 03:40:05    分类:技术分享    swift   clamp

Limit integer to bounds [duplicate]

This question already has answers here: Most efficient/elegant way to clip a number? (10 answers) Closed 2 years ago. I'm trying to make sure that int x is greater or equal than 0 but smaller than 1080 (screen size in this case). I came up with this int x = 123; x = std::min(std::max(x, 0), 1080); This seems ugly. Is there a better way to achieve this?

2021-05-03 03:58:28    分类:问答    c++   max   min   clamp

Problems limiting object rotation with Mathf.Clamp()

I am working on a game that rotates an object on the z axis. I need to limit the total rotation to 80 degrees. I tried the following code, but it doesn't work. minAngle = -40.0f and maxAngle = 40.0f Vector3 pos = transform.position; pos.z = Mathf.Clamp(pos.z, minAngle, maxAngle); transform.position = pos;

2021-04-28 09:58:38    分类:问答    object   unity3d   rotation   clamp

Java-最小和最大之间的限制数(Java - limit number between min and max)

问题 我想返回该数字,只要它在限制范围内,否则返回该限制的最大值或最小值。 我可以结合使用Math.min和Math.max来做到这一点。 public int limit(int value) { return Math.max(0, Math.min(value, 10)); } 我想知道是否存在我正在忽略的limit或range函数。 如果第三方库很常见(例如Commons或Guava),则欢迎它们 回答1 从版本21开始,Guava包含Ints.constrainToRange()(以及其他原语的等效方法)。 从发行说明中: 添加了constrainToRange([type] value, [type] min, [type] max)方法,这些方法将给定值限制在由min和max定义的封闭范围内。 如果值在范围内,它们将返回值本身;如果值在范围内,则返回min如果值在范围内,则返回max 。 由@ dimo414从https://stackoverflow.com/a/42968254/122441复制。 不幸的是,此版本截止到2017年7月才是最新版本,在某些项目中(请参阅https://stackoverflow.com/a/40691831/122441),Guava破坏了向后兼容性,这要求我暂时保持版本19。 我也很震惊,Commons Lang和Commons

2021-04-27 20:41:13    分类:技术分享    java   range   max   min   clamp

Is there a method to limit/clamp a number?

I wrote the following code, which keeps x within the range (a..b). In pseudo code: (if x < a, x = a; if x > b, x = b) In Ruby it would be something like: x = [a, [x, b].min].max As it is quite basic and useful function, I was wondering if there is a native method to do that in ruby. As of Ruby 2.3.3 there is apparently no method like this, what would be the shortest/more readable way to do it? I found: x = [a, x, b].sort[1] so far, but I'm not sure if it is more readable.

2021-04-27 11:39:41    分类:问答    ruby   clamp

Java有钳位功能吗?(Does java have a clamp function?)

问题 假设我有一个value ,我通常会执行此操作以将其“钳位”到一个范围,这里是[0..1]范围。 也就是说,如果它低于范围起点,则将其增大到范围起点,如果它高于范围终点,则将其减小到范围终点。 clampedValue = Math.max(0, Math.min(1, value)); 是否有内置功能可钳位到一定范围? 回答1 是否有内置功能可钳位到一定范围? 不。 回答2 研究了另一个答案中提供的通用钳位方法后,值得注意的是,此方法对原始类型有装箱/拆箱的注意事项。 public static <T extends Comparable<T>> T clamp(T val, T min, T max) {...} float clampedValue = clamp(value, 0f, 1f); 这将使用Float包装器类,导致3个框操作,每个参数1个,返回类型的1个unbox操作。 为了避免这种情况,我只会坚持写长篇幅,或者对想要的类型使用非泛型函数: public static float clamp(float val, float min, float max) { return Math.max(min, Math.min(max, val)); } 然后,只需对所需的每种原始类型使用相同的方法进行重载即可。 回答3 Guava包含Ints

2021-04-26 19:44:53    分类:技术分享    java   clamp