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

22.03.2006, 15:03

Farben dem Vertexshader übegeben

Wie bekomme ich es hin (mit welchen Semantics, oder wie die teile heißen), dass dem Vertexshader die Diffuse, Ambiente und Speculare Farbe eines Modells automatisch übergeben werden.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

2

22.03.2006, 16:24

Aus einem Effekt heraus, oder aus Variablen?
Wenn du sie als Variablen hast, dann übergibst du sie als Vektor (SetVector), wenn sie nur im Effekt stehen weiß ich es leider nicht... würd mich aber auch interessieren...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

3

22.03.2006, 17:21

Wie man das aus dem Programm raus setzt weiß ich ja. Aber es geht darum, dass ich ein tbModel beleuchten will, aber nicht richtig an die Farben herankomme. Und da hab ich mir gedacht, dass es möglich sein könnte die Farben dem Vertexshader so wie z.B. die Position automatisch übergeben zu lassen.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

4

23.03.2006, 17:34

Wenn man einen Vertexshader benutzt, dann wird ja die Beleuchtung ausgeschalten. Kann es sein, dass Materialien auch ignoriert werden?
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

5

25.03.2006, 17:10

Hab jetzt der TriBase eine Funktion hinzugefügt, die die Materialien des Modells zurückliefert.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

25.03.2006, 18:06

Zitat von »"Anfänger"«

Wenn man einen Vertexshader benutzt, dann wird ja die Beleuchtung ausgeschalten. Kann es sein, dass Materialien auch ignoriert werden?

Natürlich. Du definierst, was gemacht wird. Dafür ist der Vertex-Shader da. Das ist wie ein leeres Blatt Papier. Du kannst alles drauf malen. Da ist nicht schon ein vorgezeichnetes Haus mit Smiley-Sonne, die Du nur noch ausmalen musst. ;)

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

26.03.2006, 12:05

@Anfänger
Könntest du diese Funktion bitte posten?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

8

26.03.2006, 17:39

Also ich hab lange Probiert das irgendwie aus dem Effekt direkt auszulesen oder in das tbm - Format zu speichern. Aber dann ist mir eingefallen, dass das ganze viel einfacher mit der Methode GetMaterial geht.
Die Funktion ist ganz simpel. Sie geht jeden Effekt durch, fragt das Material ab und Speichert dieses in einem Array und liefert dann das gewünschte Element davon zurück.

C-/C++-Quelltext

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
//*******************************************************************

// Lädt die Materialien und liefert sie zurück

D3DMATERIAL9 tbModel::GetMaterial (DWORD dwStage)
{
    int iNumPasses;

    // Jeden Effekt durchgehen

    for(DWORD dwEffect = 0; dwEffect <= m_dwNumEffects-1; dwEffect++)
    {
        iNumPasses = m_pEffects[dwEffect].pEffect->Begin(TRUE, FALSE);
        for(int iPass = 0; iPass < iNumPasses; iPass++)
        {
            // Durchgang aktivieren

            m_pEffects[dwEffect].pEffect->Pass(iPass);

            tbDirect3D::Instance()->GetMaterial (&m_pMaterials[dwEffect]);
        }

        // Effekt deaktivieren

        m_pEffects[dwEffect].pEffect->End();
    }


    if (dwStage > m_dwNumEffects-1) dwStage = m_dwNumEffects-1;
    else if (dwStage < 0) dwStage = 0;

    return m_pMaterials[dwStage];
}


Speicher für m_pMaterials wird in der Init Methode reserviert (Nachdem m_dwNumEffects geladen wurde):

C-/C++-Quelltext

1
2
3
// Speicher für die Materialien reservieren

m_pMaterials = (D3DMATERIAL9*)(tbMemAlloc(m_dwNumEffects * sizeof(D3DMATERIAL9)));
if (!m_pMaterials) TB_ERROR_OUT_OF_MEMORY (TB_ERROR);


Mann könnte in die Funktion noch eine Abfrage einbauen, ob das ganze schon einmal geladen wurde. Ich denke das würde die Funktion noch um einiges schneller machen.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

Werbeanzeige