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

25.03.2010, 19:11

Ogre-> CG | verschiedene Profile Probleme

Also,

ich stehe jetzt vor dem Folgenden Problem:
Ich habe ein Material, und 20 Meshes, die dieses Material nutzen. Jetzt will ich ein Parameter in einem Shader - der von diesem Material benutzt wird -
aus der Anwendung heraus dynamisch setzen, sodass alle 20 Meshes diese Änderung mithaben. Nur wie mache ich das am Geschicktesten ?

Steh grad Total auf dem Schlauch, und weiss auch nicht recht nach was ich nun googlen soll.

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

2

25.03.2010, 20:19

Hm alles was man über Shaderparameter wissen muss steht doch im Manual hier. Wo ist den dein Problem genau?

3

25.03.2010, 20:24

Mein Problem liegt vor allem Darin, diese aus der ANWENDUNG heraus dynamisch zu setzen. (geht ja mit fragmentprogram->setparameter oder sowas).

Das eigentliche Problem ist, wie komme ich an das Material, und was muss ich machen, dass die Änderung für alle Meshes, mit diesem Material wirkt ?

4

25.03.2010, 20:42

Naja es dürfte für alle übernommen werden, da Materials ja auch shared_ptr sind.

Naja und an das Material kommst du über den MaterialManager, der gibt dir zwar nen ResourcePtr zurück, aber einfach auf MaterialPtr casten und schon haste es^^

Zero

5

25.03.2010, 21:06

Ah, gut zu wissen, dass es sich auf alle auswirkt. Nur funktioniert dass irgendwie nicht (wirft aber auch keine Exception)

C-/C++-Quelltext

1
2
MaterialPtr mat = (MaterialPtr) (Ogre::MaterialManager::getSingleton ().getByName ("Examples/SSmooth"));
                mat->getTechnique (0)->getPass (0)->getFragmentProgram ()->setParameter ("eCenterZ", "300.0f");

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

6

25.03.2010, 21:08

Hm kann jetzt auch nicht sagen, warum das nicht funktioniert (banale Möglichkeit wäre, dass es "eCenterZ" nicht in der Form gibt.
Aber an sich sollte man so etwas afaik als "custom" im Material festlegen, statt Parameter über diesen Umweg zu setzen.

7

25.03.2010, 21:35

Ok, danke für den Tipp mit dem Custom, hab ich doch glatt übersehen, dass es das auch noch gibt. Funkt auch einwandfrei, nur ich muss für jede Entity einzeln dieses Custom setzen. Gibts da auch noch eine Lösung für, oder nciht ?

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

8

26.03.2010, 10:42

Die Frage ist ja fast schon beantwortet, aber ich wollte noch erwähnen, das man den Sachverhalt auch ganz gut im PSSM-Beispiel(PlayPen-Source im Ogre Source) von Ogre sehen kann, da dort über das setzen von Fragmentshader-Variablen die Splitpoints in den Shader gereicht werden.

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

9

27.03.2010, 11:44

Neues Problem:

Der folgende Shader führ zu diesem Ergebniss:
http://dl.dropbox.com/u/3405107/screen1.jpg

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
float4 SSFragment ( in  float2  eSamplerTexcoord : TEXCOORD0
                    ) : COLOR
{

    const float2 Samples[10] = {
      {-0.48164210f, 0.63774880f},
      {-0.75966840f,-0.50366960f},
      { 0.34809640f,-0.14834620f},
      { 0.96111000f,-0.16738010f},
      { 0.21908510f,-0.96834350f},
      { 0.15818150f, 0.70767760f},
      {-0.81477860f,-0.19214370f},
      { 0.51399410f,-0.68631670f},
      { 0.48325500f, 0.23895880f},
      { 0.67731140f,-0.33620170f}
    };


    float Transp = tex2D (SceneTexture, eSamplerTexcoord).a ;

     float3 EndColor = float3 (0.0f, 0.0f, 0.0f);
    for (int i = 0; i<10; i++)
    {
    
        EndColor += tex2D (SceneTexture, eSamplerTexcoord + (Samples[i] * Transp)).xyz;
    }

    return float4 (EndColor / 10, 1.0f);
}


Wie man sieht sampelt er wild überall rum, nur dort nicht, wo er sollte. Die Transp-Werte stimmen zu 100% sicher, und die eSamplerTexcoords auch. ???????

EDIT: So, ich hab einfach mal die Sampling werte durch 200 geteilt, jetzt gehts. Vielen Dank für eure Hilfe.

10

27.03.2010, 13:34

Jetzt wo ich grad nen Thread hab mal ne kurze Frage:
Gibt es eigentlich ein DirectX 10 Render System für Ogre und wenn es eins gibt, wo kann man es runterladen ?

Werbeanzeige