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

Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

1

28.12.2013, 13:26

Vertices kommen nicht im Vertex Shader an

Ich speile zur Zeit etwas mit DirectX herum und bin jetzt soweit dass ich eigentlich einen Würfel mit Farbe darstellen können sollte.
Der Code sieh gut aus, nur das Resultat nicht. -> Ich sehe den Würfel nicht.
Durch Graphics Debugging habe ich heraus gefunden, dass mit den Werten alles stimmt. Alles wurde richtig initialisiert, Vertex und Index Buffer haben auch die richtigen Werte.
Im Input Assembler sieht noch alles in Ordnung aus, im Vertex Shader ist der Würfel jedoch verschwunden:

(Link)

Mein Shader-Programm sieht so aus:

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
29
30
31
32
33
cbuffer cbPerObject
{
    float4x4 worldMatrix;
    float4x4 viewMatrix;
    float4x4 projectionMatrix;
};

struct VertexIn
{
    float3 Pos : POSITION;
    float4 Color : COLOR;
};

struct VertexOut
{
    float4 PosH : SV_POSITION;
    float4 Color : COLOR;
};

VertexOut VS(VertexIn vin)
{
    VertexOut vout;
    vout.PosH = mul(float4(vin.Pos, 1.0f), worldMatrix);
    vout.PosH = mul(vout.PosH, viewMatrix);
    vout.PosH = mul(vout.PosH, projectionMatrix);
    vout.Color = vin.Color;
    return vout;
}

float4 PS(VertexOut pin) : SV_TARGET
{
    return pin.Color;
}


Mein erster Gedanke war, dass etwas mit einer der 3 Matrizen nicht stimmen könnte. Hat jemand eine Idee wie ich deren Werte aus dem Vertex Shader herauslesen kann?
Wisst ihr was sonst vielleicht nicht stimmen könnte?

P.S.:
Hier ist noch meine Graphics Events List, darin stimmt doch alles oder?

(Link)

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.12.2013, 13:28

Wenn du auf den grünen Pfeil unter der Vertexshader Ausgabe klickst kommt der Debugger.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

FSA

Community-Fossil

  • Private Nachricht senden

3

28.12.2013, 13:36

Hast du die Matrizen transponiert, bevor du sie an den Shader gesendet hast?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

4

28.12.2013, 13:54

@Legend: Hab ich schon probiert: Source information is missing from the debug information for this module.
Ich glaube dazu müsste ich den Shader vor Laufzeit kompilieren oder?

@FSA: Ich hoffe schon:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    dataPtr = (cbPerObject*) mappedResource.pData;

    XMMatrixTranspose(m_WorldMatrix);
    XMMatrixTranspose(m_ViewMatrix);
    XMMatrixTranspose(m_ProjectionMatrix);

    XMStoreFloat4x4(&dataPtr->worldMatrix, m_WorldMatrix);
    XMStoreFloat4x4(&dataPtr->viewMatrix, m_ViewMatrix);
    XMStoreFloat4x4(&dataPtr->projectionMatrix, m_ProjectionMatrix);


Das Problem ist, dass ich die Matrizen in Float4x4 speichere und ich mir nicht sicher bin ob ich das richtig mache.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

5

28.12.2013, 14:00

Stimmt, das kann gut sein, dass du die vorher kompilieren musst. Dann hast du eine Datei mit den nötigen Debuginformationen. Jetzt wäre das sehr praktisch, dort könntest du nachsehen was ankommt ...
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

6

28.12.2013, 14:27

Ich hab mir jetzt mal kurz angeschaut wie man offline shader kompiliert.
Auf msdn gibt es nur ein Beispiel wie man ein .fx kompiliert und als .fxo ausgibt, jedoch nichts für hlsl.
Funktioniert das gleich? Ist der Output trotzdem ein .fxo oder ein .hlslo?
Gibt es vielleicht eine Möglichkeit etwas über meine Matrizen zu erfahren auch wenn ich den Shader zu Laufzeit kompiliere? (NVidia nSight, oder so?)

Edit: Hab ganz vergessen das ganze mal im Debug mode zu erstellen. Da bekomme ich nämlich ein 'Assertion Failed!'. Irgendwas mit XMScalarNearEqual bei der ViewMatrix so wie ich das verstanden habe.

(Link)

Vielleicht hängt das mit dem Problem zusammen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Cranberry« (28.12.2013, 14:34)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

28.12.2013, 14:41

Sieht aus, als hättest du ein Seitenverhältnis von 0 angegeben.

Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

8

28.12.2013, 14:46

C-/C++-Quelltext

1
m_ProjectionMatrix = XMMatrixPerspectiveFovLH(0.25f*3.14159265359, m_pWindow->GetHeight() / m_pWindow->GetWidth(), 1.0f, 1000.0f);

Da versteh ich nicht. Das Seitenverhältnis ist doch Höhe/Breite oder?

Edit: Hab das mal getestet: GetHeight() = 600, GetWidth() = 800, GetHeight()/GetWidth() = 0. ?(
Edit2: Verdammt hab vergessen das ganze zu einem float zu casten. Jetzt ist der Error weg. Aber immernoch kein Würfel am Bildschirm.
Edit3: Jetzt kommt was im Vertex Shader an! Aber irgendwie findet es den weg zum Output-Merger nicht.

(Link)

Das sieht auch nicht wirklich wie ein Würfel aus.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Cranberry« (28.12.2013, 14:58)


Cranberry

Treue Seele

  • »Cranberry« ist der Autor dieses Themas

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

9

28.12.2013, 16:09

Es funktioniert! Naja nicht wirklich. :(
Aber zumindest seh ich was.
Ich hab die Position der ViewMatrix mal von (0.0, 0.0f, -1.0) auf (10.0, 10.0, 0.0) und siehe da:

(Link)

Das sieht doch stark danach aus, dass etwas mit der Projection Matrix nicht stimmt oder? :hmm:

Edit: Hier noch die Graphics Pipeline Stages in denen man klar sieht, dass der Würfel verzerrt wird.

(Link)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

28.12.2013, 16:19

Ja, sieht so aus.
Wie berechnest du denn die Projektionsmatrix?

Übrigens ziemlich cool, wie man heutzutage visuell debuggen kann.

Werbeanzeige