Einzelnen Beitrag anzeigen
Alt 20.02.2005, 17:50   #1 (permalink)
Qndre
Stickstoff Junkie
 

Registriert seit: 06.07.2004
Beiträge: 3.814

Qndre wird schon bald berühmt werden

Standard PSS-Dokumentation?

Kennt jemand ne vollständige und gute PSS (Programmable Shader Scripting) Dokumentation, ich versuche einen Stereo-Support für ATi zu schreiben, wie er bei nVidia existiert.

Erreichen möchte ich das Ganze durch eine der beiden Methoden:

1. Alle Verticies relativ zum Betrachter nach links shiften, Bild in den Grafikspeicher rendern, alle Vertecies nach rechts shiften, Bild in den Grafikspeicher rendern.

2. "Kameraposition" relativ (senkrechte Ebene zur Blickrichtung) nach links und rechts shiften.

Es gibt zwar bereits ein entsprechendes Pixelshader-Script, dieses gibt aber keine echte Tiefeninformation sondern rendert lediglich das selbe Bild nochmal versetzt overlaid. Deswegen wollte ich das ganze mit den Verticies versuchen, da diese ja wirklich räumlich sind, im Gegensatz zu den 2-dimensionalen Pixeln.

Hab auch schon ein bisschen experimental Code angefertigt nur tut der irgendwie nicht was der soll, vielleicht kann mir mal jemand mit etwas mehr Ahnung helfen.

Code:
shader verteciesforleft =
"!!ARBvp1.0
#
# ----------------------------------------------------------------
#
# Script abusing the vertex shader of ATi's Radeon series
# graphics cards to create true anaglyphic content
#
# Copyright (C) 2005  Qndre
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRENTY; without even the implied warrenty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# ----------------------------------------------------------------
#
# This is experimental software published for debugging and
# suggestion purposes.
#
# ----------------------------------------------------------------
#
ATTRIB getPos = vertex.position;
TEMP stoPosA;
OUTPUT setPos = result.position;
MOV stoPosA, getPos;
ADD stoPosA.x, -0.5;
MOV setPos, stoPosA;
MOV setColor.r, setPos;
END";
shader verteciesforright =
"!!ARBvp1.0
ATTRIB getPos = vertex.position;
TEMP stoPosA;
OUTPUT setPos = result.position;
MOV stoPosA, getPos;
ADD stoPosA.x, 0.5;
MOV setPos, stoPosA;
MOV setColor.gb, setPos;
END";
shader addvectors = 
"!!ARBfp1.0
TEMP vertexfragment1;
TEMP vertexfragment2;
OUTPUT setPixel = result.color;
TEX vertexfragment1, fragment.texcoord[0], texture[0], 2D;
TEX vertexfragment2, fragment.texcoord[0], texture[1], 2D;
ADD setPixel, vertexfragment1, vertexfragment2;
END";
apply verteciesforleft;
apply verteciesforright;
surface leftvertex = allocsurf(width, height);
texture[0].source = backbuffer;
destination leftvertex;
apply verteciesforleft;
surface rightvertex = allocsurf(width, height);
texture[0].source = backbuffer;
destination rightvertex;
apply verteciesforright;
texture[0].source = leftvertex;
texture[1].source = righvertex;
destination backbuffer;
apply addvectors;

Geändert von Qndre (21.02.2005 um 13:34 Uhr)
Qndre ist offline   Mit Zitat antworten