GLSLに+/-無限大またはNaNの事前定義定数がありますか?私は回避策として、これをやっているが、クリーンな方法があるのだろうか:glsl無限定数
// GLSL FRAGMENT SHADER
#version 410
<snip>
const float infinity = 1./0.;
void main()
{
<snip>
}
私はisinf
機能の承知していますが、私は私を助けないように、変数に無限大を割り当てる必要がありますが。
GLSLに+/-無限大またはNaNの事前定義定数がありますか?私は回避策として、これをやっているが、クリーンな方法があるのだろうか:glsl無限定数
// GLSL FRAGMENT SHADER
#version 410
<snip>
const float infinity = 1./0.;
void main()
{
<snip>
}
私はisinf
機能の承知していますが、私は私を助けないように、変数に無限大を割り当てる必要がありますが。
前述のNicolのように、あらかじめ定義された定数はありません。
しかし、OpenGL 4.1以降では、あなたのソリューションは少なくとも動作し、無限の値を正しく生成することが保証されています。
はglsl 4.4の例を参照されたい:
4.7.1範囲と精度
...
しかし、適切 0結果によって非ゼロを分割signed IEEE Inf:肯定と否定の両方のゼロが実装されている場合、正しく署名された Infが生成されます。それ以外の場合はpos反復Infが生成される。それが言うglsl 4.0に例えば
:
あなたががOpenGLの古いバージョンを使用するときは注意してください
4.1.4フロートは
...
同様に、のような条件の処理は、0ma yは不特定の結果につながりますが、そのような条件が処理の中断または終了につながることはありません。
あらかじめ定義された定数はありませんが、何かが無限大であるかどうかを調べるにはisinf
関数があります。
私はその間、FLT_MAX FLT_EPSILONなどのような他のものの定数はありますか?
いいえ、ありません。
何が無限に必要ですか? – Shahbaz
無限大を使用すると、コード内に多くのロジックが保存されます: ' float t0 =(d> = 0.)? t:無限大; float t1 =(d> = 0)? t:無限大; t = min(t0、t1); ' –
atb
私は、あなたのアプリケーションに基づいて十分な大きさの値を選ぶことは簡単にやります。例えば '1e20'と言ってください – Shahbaz