web-dev-qa-db-ja.com

glslで「%」を使用できません

今日シェーダープログラムを書いているときに、残りを見つけるために%を使用しなければならない状況に遭遇しました。 GLSLは、現在のバージョンでは使用できないというエラーを表示しました。

私はいくつかの問題を試しました。 GLSLは、再帰関数とwhileループをサポートしていません。これは、(a % b)の結果を取得できる関数を作成する場合に必要です。

だから、私は現在立ち往生しています。誰かがこれを手伝ってくれる?

編集このWebサイト のシェーダーコードを参照コードとして使用して、CRT画面をエミュレートしようとしました。特定の行と列のピクセルの色を変更したかったので、モジュロ演算子を使用する必要がありました。

最初は、モジュラス関数は%演算子を使用して実行されると思いました。動作しなかったので、モジュラス関数の回避策として再帰関数/ whileループを使用してみましたが、どちらも動作しませんでした。

8
Artemis Toh

GLSLは、再帰関数とwhileループをサポートしていません。これは、(a%b)の結果を得ることができる関数を作成する場合に必要です。

まず、_a mod b_を計算するために、再帰もループも必要ありません。これはa - (b * floor(a/b))で簡単に実行できます。

これは、組み込みのmod関数が行うこととまったく同じです。お使いのバージョンのGLSLが_%_演算子をサポートしていない場合は、実数の整数も取得できない可能性があります。したがって、値に対してmod関数を使用するだけです。

21
Nicol Bolas