0

ライト シェーディングを行う必要がある状況があります。頂点シェーダーを持っていないので、法線をフラグメント シェーダーに補間できません。また、法線マップを渡すこともできません。フラグメント座標などに基づいて、フラグメント シェーダーで法線を完全に生成できますか? 私の場合、ジオメトリは常に平面です。

そして、私がやろうとしていることを拡張するには:

GPU で純粋なベクター グラフィックスをレンダリングNV_path_renderingできる拡張機能を使用しています。問題は、フラグメント ステージのみがシェーダー経由でアクセスできることです。つまり、基本的には、NV_Path オブジェクトで頂点シェーダーを使用できません。

4

2 に答える 2

1

シェイプはフラットで、NV_PATH には compat プロファイルが必要なので、組み込みの変数 gl_Color または gl_SecondaryColor を介して法線を渡すことができます。

拡張機能の説明には、ある種の補間があると書かれています:

頂点ごとのデータの補間 (セクション 3.6.1)。パス プリミティブには、従来の頂点も頂点ごとのデータもありません。代わりに、フラグメントは、補間されたフラグメントごとの色、テクスチャ座標セット、およびフォグ座標を、オブジェクト空間または目空間パス座標の線形関数として、または現在の色、テクスチャ座標セット、またはフォグ座標状態を直接使用して生成します。

http://developer.download.nvidia.com/assets/gamedev/files/GL_NV_path_rendering.txt

于 2013-07-04T13:35:57.363 に答える
1

これは、頂点法線について何も知らずに(私が理解しているように)「法線を面法線として設定する」方法です。

https://stackoverflow.com/a/17532576/738675

ここで動作する three.js デモがあります。

http://meetar.github.io/three.js-normal-map-0/index6.html

私の実装では、頂点シェーダーから頂点位置データを取得していますが、他の方法で取得できるようです。

于 2013-07-10T15:48:13.353 に答える