0

以下のコードが機能しない理由を理解しようとして一日中殺しました:

私はこの .compositor スクリプトを持っています:

compositor BW
{
    technique
    {
        texture rt0 target_width target_height PF_A8R8G8B8

        target rt0
        {
            input previous
        }

        target_output
        {
            input none

            pass render_quad
            {
                material BlackAndWhite
                input 0 scene
            }
        }
    }
}

.material スクリプト:

vertex_program BW_VP cg
{
    source MyShader.cg
    entry_point BW_VP
    profiles vs_4_0 vs_2_0 vs_1_1 arbvp1

    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
    }
}

fragment_program BW_FP cg
{
    source MyShader.cg
    entry_point BW_FP
    profiles ps_4_0 ps_2_0 arbfp1
}

material BlackAndWhite
{
    technique
    {
        vertex_program_ref BW_VP{}
        fragment_program_ref BW_FP{}

        texture_unit
        {
            texture rt0
            tex_coord_set 0
            tex_address_mode clamp
            filtering none
        }
    }
}

および .cg プログラム:

sampler2D RT : register(s0);

void BW_VP(in float4 inPos : POSITION, out float4 pos : POSITION, out float2 uv0 : TEXCOORD0, uniform float4x4 worldViewProj)
{
    pos = mul(worldViewProj, inPos);
    inPos.xy = sign(inPos.xy);
    uv0 = (float2(inPos.x, -inPos.y) + 1.0f) * 0.5f;
}

float4 BW_FP(float4 pos : POSITION, float2 iTexCoord : TEXCOORD0) : COLOR
{
    float3 greyscale = dot(tex2D(RT, iTexCoord).rgb, float3(0.3, 0.59, 0.11));
    return float4(greyscale, 1.0);
}

以下のステートメントを使用して、コンポジターを初期化します。

Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "BW");
Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "BW", true);

そして、私はまったく結果を見ません。私のシーンにはいくつかのライトと CG シェーダーがありますが、それらは完璧に機能します。また、すべてのリソースが適切に読み込まれ、リソース グループは必要なすべてのファイルを認識しますが、ログ ファイルに次の例外が記録されます。

OGRE EXCEPTION(6:FileNotFoundException): Cannot locate resource rt0 in resource group Mission 1 : Deliver Tom or any other group. in ResourceGroupManager::openResource at D:\ARCHIVES\DEPENDENCIES\OGRE_REPOSITORY\OgreMain\src\OgreResourceGroupManager.cpp (line 756)

AFAIK rt0 は、オーガによる「飛行中」の自動生成のため、リソースであってはなりません。何か不足していますか?

どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

2

例外エラーは正しいです。その名前のテクスチャ ファイル リソースはありませんが、OGRE は空白のテクスチャを作成します。

ただし、次の 2 つの問題があります。

  1. コンポジターファイルのシーンとは何ですか? シーンの代わりにrt0を使用する必要があります。これは、シーンがレンダリングされるレンダー ターゲットであり、マテリアルを適用する場所です。
  2. マテリアル スクリプトにpassステートメントがない。
于 2012-11-23T15:24:34.197 に答える