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

08.06.2007, 15:19

Frage::Code::Pixelshader

Hi,

folgende fx-Datei mit einem Vertex- und einem Pixel-Shader funktioniert
nicht so, wie sie sollte: Der Pixel-Shader nimmt aus irgendwelchen
Gründen keinen Einfluß aufs Geschehen.

Nach meinem Verständnis sollte bei Anwendung der "technique"
"Simplest" der eingestellte VertexShader "SimplestVertexShader" die
Farbe abhängig von der Position des Pixel einstellen.

Danach sollte der PxelShader "OurFirstPixelShader" zuschlagen und die
Farbe überall auf 0 also Schwarz setzen. Das Ergebnis ist aber bunt - so
als ob der PixelShader geschlafen hätte...

:?: Frage: Woran liegt das?


Hier der:

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
43
44
45
46
47
48
49
50
float4x4 xViewProjection;

struct VertexToPixel
{
    float4 Position     : POSITION;
    float4 Color        : COLOR0;
};

struct PixelToFrame
{
    float4 Color : COLOR0;
};

VertexToPixel SimplestVertexShader( float4 inPos : POSITION, float4 inColor : COLOR0)
{
    VertexToPixel Output = (VertexToPixel)0;
    
    Output.Position = mul(inPos, xViewProjection);
    
    Output.Color = inPos;
    
    
    return Output;    
}


//--------------------------------------
//FEHLER: Nimmt keinen Einfluß auf Farbe
//--------------------------------------
PixelToFrame OurFirstPixelShader(VertexToPixel PSIn)
{
    PixelToFrame Output = (PixelToFrame)0;
        
    //Output.Color = PSIn.Color;
    Output.Color.r = 0;
    Output.Color.g = 0;
    Output.Color.b = 0;
    
    return Output; 
}


technique Simplest
{
    pass Pass0
    {  
        VertexShader = compile vs_1_1 SimplestVertexShader();
        PixelShader = compile ps_1_1 OurFirstPixelShader();
    }
}

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

2

08.06.2007, 16:33

Re: Frage::Code::Pixelshader

Zitat von »"Passwort:"«


Quellcode

1
    Output.Color = inPos;


habe noch einen fehler gefunden. warum nimmst du hier die position und nicht die farbe?
in der technique musst du noch den cullmode einstellen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

08.06.2007, 17:31

und der shader lässt sich problemlos kompillieren, und verwenden? was hast du für eine grafikkarte?

Zitat

habe noch einen fehler gefunden. warum nimmst du hier die position und nicht die farbe?


warum nicht^^

Zitat


in der technique musst du noch den cullmode einstellen.


der sollte eh per default auf CCW stehen oder?

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

4

08.06.2007, 18:33

ich habe nicht gesagt, dass es so nicht geht.
das ist mir nur aufgefallen ;)

5

08.06.2007, 19:45

Hi
ich wollte mal so etwas ähnliches machen, musste dann aber leider feststellen, dass man an die Position des Pixels auf dem Bildschirm erst ab PixelShader 3.0 kommt.
Steht irgendwo in der DX-Doku.

MfG CoffeeConverter

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

08.06.2007, 19:58

Zitat von »"CoffeeConverter"«

ich wollte mal so etwas ähnliches machen, musste dann aber leider feststellen, dass man an die Position des Pixels auf dem Bildschirm erst ab PixelShader 3.0 kommt.

Das stimmt zwar, aber er greift ja gar nicht auf die Position zu, sondern kopiert im Vertex-Shader die Position in die Farbe und greift im Pixel-Shader auf die Farbe zu. Sollte also gehen.

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

7

08.06.2007, 22:20

es wäre für das verständnis evtl besser, wenn man "xWorldViewProjection" schreibt, anstatt nur "xViewProjection".

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

08.06.2007, 22:49

warum? eine ViewProjection matix ist genau das und WorldViewProjection is was anderes.

Zitat


Das stimmt zwar, aber er greift ja gar nicht auf die Position zu, sondern kopiert im Vertex-Shader die Position in die Farbe und greift im Pixel-Shader auf die Farbe zu. Sollte also gehen.


jop. ich seh da eigentlich auch keinen fehler drin. deswegen meine frage nach der graka (hat evtl. keine pixelshader!?). aber wenn die das nicht unterstützt, dann sollte der effect eigentlich widerstand leisten denk ich...

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

9

09.06.2007, 09:15

naja, er müsste dann ja ne steinalte haben. das hat heutzutage eigentlich jede grafikkarte...

10

12.06.2007, 12:05

... ja dann liegt es vielleicht tatsächlich an meinem Office-PC - eine echte
Grafikkarte hat der eigentlich gar nicht :oops:

Ich dachte aber, daß alles, was man auf einer Grafikkarte berechnen kann,
alternativ auch über die CPU geht (device auf ..."SoftwareVertexProcessing"
einstellen) nur eben langsamer.

Ist es also so, daß PixelShader nur mit einer Grafikkarte funktionieren und
nicht über die CPU laufen können (beim VertexShader funktioniert das ja
schließlich)? Oder kann man das doch irgendwie einstellen?

Werbeanzeige