0

私は現在、次の頂点データ(ピラミッド用)を次のようにレイアウトしています:

float4 vertexData[ 18 ] =
{
    // front

    { 1.0f, 0.0f, 1.0f, 1.0f },  // front right
    { 0.0f, 1.0f, 0.0f, 1.0f },  // top
    { -1.0, 0.0f, 1.0f, 1.0f },  // front left


    // right

    { 1.0f, 0.0f, 1.0f, 1.0f },   // right front
    { 0.0f, 1.0f, 0.0f, 1.0f },   // top
    { 1.0f, 0.0f, -1.0f, 1.0f },  // right back


    // back

    { 1.0f, 0.0f, -1.0f, 1.0f },  // back right
    { 0.0f, 1.0f, 0.0f, 1.0f },   // top
    { -1.0, 0.0f, -1.0f, 1.0f },  // back left


    // left

    { -1.0f, 0.0f, -1.0f, 1.0f },  // left back
    { 0.0f, 1.0f, 0.0f, 1.0f },    // top
    { -1.0f, 0.0f, 1.0f, 1.0f },   // left front

    // bottom back major

    { -1.0f, 0.0f, 1.0f, 1.0f },   // bottom left front
    { -1.0f, 0.0f, -1.0f, 1.0f },  // bottom left back
    { 1.0f, 0.0f, -1.0f, 1.0f },   // bottom right back

    // bottom front major

    { 1.0f, 0.0f, -1.0f, 1.0f },   // bottom right back
    { 1.0f, 0.0f, 1.0f, 1.0f },    // bottom right front
    { -1.0f, 0.0f, 1.0f, 1.0f },   // bottom left front

};

私は基本的にピラミッドを取り、(可能であれば) シェーダーを使用して 2 つの頂点間のエッジを計算し、フラグメント シェーダーに一種の「線」となるものを送信したいと考えています。

おそらく「GL_LINES」を使用して、新しい均一な色を設定できることはわかっていますが、これはあまり効率的ではないと思います。多分私は間違っていますか?

いずれにせよ、私が最初にシェーダーを考えていた主な理由は、シェーダーがこれを行うクールな手段になるからです。ボーダーに興味深い効果を追加できるプログラムを書くことができたからです。ただし、1 つのシェーダー プログラムでこれを行う方法に関しては、完全に困惑しています。

これに対する良いアプローチに関するアイデアはありますか?

4

2 に答える 2

3

あなたが呼ぶのはセルシェーディングです。このための最も人気のあるチュートリアルの 1 つがここにあります: http://nehe.gamedev.net/tutorial/cel_shading/25001/

GL_LINES の使用は非効率的ではありません。VBO を使用して頂点データを GPU に保存すると、何度でも描画できます。また、カスタム シェーダーを使用して GL_LINES を描画することもできます。チュートリアルでは、基本的に同じ方法で行われます。輪郭がソリッド オブジェクトの背景ににじみ出ないようにするには、深度オフセットを小さくする必要があります (Z バッファの競合を回避します)。

于 2013-09-25T04:28:59.637 に答える
1

それは明らかに漫画(セル)シェーディングに関連しています。

それにはいくつかの方法があります。

于 2013-09-25T11:10:15.043 に答える