Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.03.2010, 11:04

OGRE post processing alphachannel wird nicht geschrieben

So,
jeztz zu meinem nächsten Problem:

- Ich will Postprocessin g mit OGRE implementieren, also mit RTT. Jtzt ist es aber so, dass obwohl meine Selbstangelegte Rendertexture PF_A8R8G8B8 als Format hat, der Alphachannel aber immer 1 ist, obwohl der im Shader zuvor fest auf irgendeinen Wert z.B. 0.25 geschrieben wurde.

Wenn noch Code vonnöten ist, einfach Schreiben.


Vielen Dank im Voraus ;)

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

2

21.03.2010, 15:07

Hm ja zeig mal wie du das Rendertarget erstellst, den Pixelshader und das Material dazu. Vielleicht kann man dir dann weiterhelfen.

3

21.03.2010, 16:36

Rendertarget wird erstellt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
Ogre::TexturePtr SceneTexture = Ogre::TextureManager::getSingleton().createManual ("SceneBuffer", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 
            mWindow->getWidth(), mWindow->getHeight(), 0, Ogre::PF_A8R8G8B8, Ogre::TU_RENDERTARGET);
        Ogre::RenderTexture* rend = SceneTexture->getBuffer()->getRenderTarget ();
        rend->setAutoUpdated (true);
        
        rend->setActive (true);
        rend->addViewport (mCamera, -1);
        rend->getViewport (0)->setClearEveryFrame (true);
        //  rend->writeContentsToFile ("TSS.png");

        rend->getViewport(0)->setBackgroundColour(ColourValue::Green);
rend->getViewport(0)->setOverlaysEnabled(false);
rend->setPriority (0);


müsste grösstenteils mit dem Code aus dem Intermediate Tutorial 87 identisch sein.

Dann das Material:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 
fragment_program Examples/SimpleSmooth cg
{
    source SimpleSmooth.cg
    entry_point SSFragment
    profiles ps_2_0 arbfp1
    default_params
    {
        
    }
}

// Simple Shader
//
// 
material Examples/SSmooth
{
    technique
    {
        pass
        {          
            cull_hardware none
            cull_software none
            depth_check off
              texture_unit "BisherigeScene"
              {

                tex_address_mode wrap

                  texture SceneBuffer
              }
        
                
              fragment_program_ref Examples/SimpleSmooth
              {
                param_named Smoothness 1.0f
                }
       }
        
      }

}


Der Pixelshader mit dem ausgelesen wird:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sampler SceneTexture : register (s0);

void SSVertex (
            float2 WorldPosition, 
            
            
            uniform float4x4 WorldViewProjectionMatrix)
{

}

float2 SamplerTexcoord[8] = { float2 (0,1),  float2 (0,-1), float2 (1,0), float2 (-1,0),
float2 (1,1),  float2 (-1,1), float2 (-1,-1), float2 (-1,1)};

float4 SSFragment ( in  float2  eSamplerTexcoord,

                    uniform float Smoothness
                    ) : COLOR
{
    // Test
    // return float4 (1.0f, 0.0f, 0.0f, 1.0f);
    float3 Color = tex2D (SceneTexture, eSamplerTexcoord);
    float Transp = tex2D (SceneTexture, eSamplerTexcoord).a;
    
    return float4 (Transp,0.0f, 0.0f, 1.0f);

}


Bei dem andern Pixelshader, wird einfach nur ein bestimmter Wert in den Alphachannel geschrieben.

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

4

21.03.2010, 17:22

Zitat von »"E122"«

Quellcode

1
return float4 (Transp,0.0f, 0.0f, 1.0f); 

Der erste Kanal ist rot, der letzte wäre Alpha ;)

5

21.03.2010, 17:25

:) Nee, so blöd bin ich auch wieder nicht ;)
Das ist die Stelle wo ausgelesen wird, nicht die wo geschrieben wird.

Naja, das Problem hat sich erledigt, in das Material - Script hat noch ein scene_blend alpha_blend müssen.

Trotzdem vielen Dank für deine Hilfe.

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

6

21.03.2010, 17:26

Oh achso, hab ich wohl dann etwas falsch verstanden.

Werbeanzeige