|
|
请问下Demo_DeferredShading里,如果模型的材质脚本设置了多层纹理tex_coord_set 1,该材质继承deferred.material里 DeferredShading/Material/TexturedNormalMapped材质,实现了DeferredShading效果,但继承DeferredShading/Material/TexturedNormalMapped里的片段程序DeferredShading/material/nm_ps将子材质进行了修改,子材质tex_coord_set 1被改变了,使子材质拉伸一样,请问如何保持原子材质的tex_coord_set 1属性?
//父材质 需实现DeferredShading的材质
material DeferredShading/Material/TexturedNormalMapped
{
technique default
{
pass main
{
vertex_program_ref DeferredShading/material/nm_vs
{
}
//将继承它的子材质tex_coord_set失效?????
fragment_program_ref DeferredShading/material/nm_ps
{
}
texture_unit
{
}
texture_unit
{
tex_coord_set 2
}
}
}
}
对继承它的子材质进行了片段修改,使tex_coord_set失效?
///DeferredShading/material/nm_ps hlsl
/** Deferred shading framework
// W.J. :wumpus: van der Laan 2005 //
Material shader: Textured normal mapped
*/
sampler Tex0: register(s0);
sampler Tex1: register(s1);
struct OUTPUT
{
float4 color0 : COLOR0; // Diffuse color + ?
float4 color1 : COLOR1; // Normal + depth
};
float specularity;
OUTPUT main(
float3 normal: TEXCOORD0,
float4 texCoord0: TEXCOORD1,
float depth: TEXCOORD2,
float3 tangent: TEXCOORD3,
float3 binormal: TEXCOORD4
)
{
OUTPUT output;
// Frame for normal mapping
float3x3 rotation = float3x3(tangent, binormal, normal);
float3 texnormal = (tex2D(Tex1, texCoord0)-0.5)*2;
output.color0.rgb = tex2D(Tex0, texCoord0);
output.color0.a = specularity;
output.color1.xyz = normalize(mul(texnormal,rotation)); // Do normalisation here, saves an operation per light
output.color1.w = depth;
return output;
}
|
|