[CG Shader] Neutraler Shader, der nix ändert?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

[CG Shader] Neutraler Shader, der nix ändert?

Beitrag von Eisflamme »

Hi,

Ich bastel gerade mit CG Shadern rum. Jetzt bin ich leider der totale n00b. Ich lese zwar ein Tutorial durch, aber dennoch habe ich noch eine ziemlich grundsätzliche Frage: Wie kann ich einen Shader bauen, der mein Modell ganz normal ohne Änderung mit Textur darstellt?

Folgendes ist mein Versuch:

Code: Alles auswählen

struct appdata 
{
	float4 position : POSITION;
	float3 tex		: TEXCOORD0;
};

struct vfconn
{
	float4 HPos		: POSITION;
	float3 tex		: TEXCOORD0;
	float4 color	: COLOR0;
};

vfconn main(appdata IN, uniform float4x4 ModelViewProj)
{
	vfconn OUT;

	OUT.HPos = mul(ModelViewProj, IN.position);

	OUT.tex = IN.tex;

	OUT.color = float4(1, 1, 1, 1);

	return OUT;
}
Simpler geht es also kaum. Seltsam ist, dass das Modell flackert wie sonst was. D.h. die Textur flackert, als würden sich die Koordinaten permanent ändern. Dabei sieht das Modell kurz immer ganz korrekt aus, dann flackert es sich aber zu irgendeinem Käse. Genauer habe ich keine Ahnung. :(

Liegt das am Shader oder an was anderem? Wenn ich den Shader ausstelle, wird das Modell ganz normal dargestellt.

Edit:
Und jetzt habe ich einen Fragmentshader, der auch einfach nur die reinkommende Farbe durchreicht und dann ist das Modell komplett weiß. :<

Edit2:
Hä und jetzt geht's einfach. -_-

Edit3:
Ok, nicht einfach. Ich hab mal nachgeschaut, was der Compiler ausspuckt und im ASM-Code (oder was das ist) schiebt der meine Texturkoordinaten gar nich rum? Wenn ich aber einen weiteren Parameter einführe und den random irgendwo draufrechne, macht er das... Der kompiliert auch mein anderes Programm in derselben Datei dann andesr? Ich raff hier gar nix mehr. ^^

Edit4:
Ok, wenn ich einen Fragment-Shader danach einfüge, der das Texturemapping übernimmt, ist alles in Ordnung. Das muss ich dann also auch immer machen? Ich dachte immer, Shader sind nur ein zusätzlicher Zwischenschritt und der Einsatz davon ersetzt keine anderen Dinge, sondern bietet einem nur Zusatzmöglichkeiten. Aber das muss ich vll. auch nochmal nachlesen.

Danke schon Mal im Voraus!
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [CG Shader] Neutraler Shader, der nix ändert?

Beitrag von Jonathan »

Also ich weiß nicht, wie das bei CG-Shadern ist, aber bei GLSL und HLSL ersetzt ein Shader immer die komplette Stufe in der Grafikpipeline. D.h. alles was mit den Fragmenten geschehen soll muss in einen (großen) Fragmentshader zusammengepackt werden.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: [CG Shader] Neutraler Shader, der nix ändert?

Beitrag von Eisflamme »

Hi

ich glaube CG übersetzt in HLSL/GLSL, von daher wird das wohl genau so sein. :) Das macht jdf. total Sinn, daher gehe ich Mal davon aus, dass das stimmt. Danke!
Matthias Gubisch
Establishment
Beiträge: 472
Registriert: 01.03.2009, 19:09

Re: [CG Shader] Neutraler Shader, der nix ändert?

Beitrag von Matthias Gubisch »

Hallo

nur der Richtigkeit halber:
CG übersetzt nicht in HLSL/GLSL sonder ist genau wie die beiden eine eigene "Hochsprache" für Shader die direkt in ausführbaren Code für die GPU übersetzt wird.

Ansonsten stimmt die Aussage natürlich dass ein Shader immer die Komplette Stufe erstezt und du Texturen, Projektion usw. selber im Shader anwenden musst.

Als Einführung in CG kann ich dir folgendes Empfehlen:http://developer.nvidia.com/object/cg_t ... _home.html
Wenn ich mich recht Erinnere sollt das mittlerweile auch Online frei verfügbar sein.

Gruß
Matthias
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: [CG Shader] Neutraler Shader, der nix ändert?

Beitrag von Eisflamme »

Hi,

Ok, ich hab das Tutorial recht schnell gelesen und so ein paar Details wohl überlesen oder nicht richtig verstanden. Ich mag das Tutorial aber und bin auch schon in Kapitel 5. :)

Danke für's Richtigstellen!
Antworten