HLSL.
| fayt nagashimas |
Posté le 06 Août 2008 à 11:05
|
|
![]() Messages : 369 GCPoints : 59439 |
Bonjour, Voici une nouvelle demande d'aide en exclusivité pour vous, gamecorpiens et gamecorpiennes. J'ai commencé à regarder comment marche le HLSL, afin de réaliser quelques pixels shaders pour un petit projet de jeu vidéo en 2 dimensions. Le problème est qu'aucune explication n'est fournie avec l'accélération hardware de multimedia fusion 2, et ainsi je travaille au hasard avec les 4 exemple pixel shader 1.1 qui sont fournis avec le logiciel. Ainsi, j'aimerais savoir si vous aviez un lien (français-anglais) expliquant un peu la manière de créer des shaders, et plus particulièrement la manière dont on obtient toute la texture d'un objet/de l'écran afin de la modifier. Voici un premier script qui... ne marche pas (j'utilise deux structures communes aux autres shaders, et le pixel shader 2.0) : Code : struct PS_INPUT
{
float4 Position : POSITION;
float2 Texture : TEXCOORD0;
};
struct PS_OUTPUT
{
float4 Color : COLOR0;
};
//Zone de déclaration globale.
sampler2D samplerLum;
//Saisie utilisateur
float lCoeff;
//Luminosité
PS_OUTPUT PixShader ( in PS_INPUT In )
{
PS_OUTPUT Out;
Out.Color = tex2D(samplerLum, In.Texture) * lCoeff;
Return Out;
}
technique luminosity
{
pass P0
{
VertexShader = null;
PixelShader = compile ps_2_0 PixShader();
}
}EDIT : http://msdn.microsoft.com/fr-fr/library/ms810476.aspx pour le HLSL =3. Bon, à la place je posterais les shaders terminés et fonctionnels pour en faire profiter ici.
Dernière édition le 06 Août 2008 à 11:59
|
|
| delfare |
Posté le 06 Août 2008 à 13:50
|
|
![]() Messages : 8 GCPoints : 5923 |
normalement, pour obtenir une texture dans un shader, il faut la déclarer en uniform sampler2D tex; les variables uniform sont celles qui peuvent être spécifiées depuis le programme. si tu n'utilise pas de multi-texturing, il faut passer l'id de texture 0 depuis le programme. pour la variable lCoeff, tu dois aussi la mettre en uniform si tu veux la récupérer depuis ton programme. je crois que tu peux mettre simplement PS_INPUT In (sans le in qui le précède) dans la parenthèse de ta fonction. pour obtenir la texture de l'écran, il faut que tu utilise une fonction render to texture (en c++, j'utilise le frame buffer object mais je sais pas si tu as des équivalents dans multimedia fusion 2) |
|
| fayt nagashimas |
Posté le 06 Août 2008 à 13:56
|
|
![]() Messages : 369 GCPoints : 59439 |
Il n'y a pas de documentation pour les shaders avec mmf2 (car l'accélération hardware est encore en béta). Les autres shaders marchent sans mettre les variables sampler et saisies par l'utilisateur en uniform. Mais je vais essayer tout de même. Où dois-je décrire le canal 0 de texture s'il te plait ? Merci pour ton aide delfare =3. |
|
| delfare |
Posté le 06 Août 2008 à 14:23
|
|
![]() Messages : 8 GCPoints : 5923 |
pour l'endroit ou tu dois décrire le canal 0, j'en sais rien car j'utilise les shaders en C++ d'habitude, j'utilise Cg mais c'est pratiquement même syntaxe que HLSL. tu peux à la limite essayer de mettre sampler2D samplerLum : TEX0; (c'est ce que j'utilise en cg quand je n'utilise pas le multi-texturing mais je ne suis pas sur que ca fonctionne en HLSL) |
|

