あなたと講師の意味は「透明性」によって異なります。以下の内容は、分かりやすくするために非常に単純化されています
透明オブジェクトの最初の部分は深度ソートです。 three.jsマテリアルを作成すると、material.transparent = true;
は、シーンオブジェクトを、追加された順序ではなく、カメラからの深度に基づいてレンダリング順序に配置する深度ソートを有効にします。これにより、透明なオブジェクトの色が正しく混合されます。これはおそらく、シェイダーが現在の断片を描くことに集中し、周囲のシーンについての情報があまりないため、講師がシェーダーで行うことが難しいとしていたものです。
透明度の2番目の部分(これはおそらくもっと慣れている)は、マテリアルの不透明度の値を設定しています。フラグメントシェーダを見ると、フラグメントの色はvec4
に設定されます。
gl_FragColor = something;
vec4
の第4の値は、アルファ(不透明度)の値です。あなたが手動でこのように半tranparent赤にフラグメントを設定できます
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
しかし、再び、あなたのオブジェクトが正しく深さ、ソートされていない場合、透明性は、あなたが期待してどのように動作しない場合があります。シェーダに値を渡す方法に関するご質問については
は、私は上記のコメントに同意する:あなたの2つ目の質問は、別のポストに分割する必要があります。
つまり、uniform
s、attribute
s、およびvarying
はシェーダの一般的な基本型の修飾子です。それぞれは非常に特殊な使い方をしていますが、違いを理解していないように思えます(それはうまくいきます、あなたはまだ学んでいます)。私はそれらのそれぞれを適切に使用する方法についていくつかの読書をすることをお勧めします(そして、当然、StackOverflowは答えのための良い場所ですlike this one)。
複数の質問を同時に行うことは、回答を得る機会を減らすので避けてください。答えを書くためには、すべての質問に対する解決策を知る必要があります。 – BDL
講師がシェーダで透明度を使用するのが非常に難しいと言った理由を教えてください。難しいことではありませんAFAIK – 2pha
ユニークでフラグメントシェーダーにfloat透明度の値を渡すことは難しくありません。 – DanP