High Level Shader Language как высокоуровневый Си-подобный язык для написания шейдеров. Программа для работы с шейдерами, вид и краткое описание интерфейса. Характеристика особенностей создания трехмерных изображений. Структурные элементы программы.
Аннотация к работе
Реферат Курсовая работа посвящена изучению современных технологий компьютерной графики, а именно программированию шейдеров высокого уровня. Она направлена на получение начальных знаний о шейдерах написанных на высокоуровневом языке и современных методах создания реалистичных 3D и 2D изображений. Для этого будет использоваться язык HLSL и среда разработки FX Composer от компании nVidia, созданная для работы с языками программирования шейдеров высокого уровня и их оптимальной работы с видеокартами nVidia. В качестве основы взята модель пистолета с сайта = 0.8; /**** UNTWEAKABLES: Hidden & Automatically-Tracked Parameters **********/ // transform object vertices to world-space: float4x4 gWorldXf: World ; // transform object normals, tangents, & binormals to world-space: float4x4 gWorldITXf: WorldInverseTranspose ; // transform object vertices to view space and project them in perspective: float4x4 gWvpXf: WorldViewProjection ; // provide tranform from view or eye coords back to world-space: float4x4 gViewIXf: ViewInverse ; /************* TWEAKABLES **************/ // DirPos Lamp 0 ///////// float4 gLamp0DirPos: POSITION = {-0.5f,2.0f,1.25f,1.0}; float3 gLamp0Color: SPECULAR = {1.0f,1.0f,1.0f}; float gLamp0Intensity = 1.0f; // Ambient Light float3 gAmbiColor: AMBIENT = {0.07f,0.07f,0.07f}; // surface color float3 gSurfaceColor: DIFFUSE = {1,1,1}; float gSpecExpon = 12.0; float gKd = 0.1; float gKr = 0.2; texture gColorTexture: DIFFUSE ; sampler2D gColorSampler = sampler_state { Texture = ; #if DIRECT3D_VERSION >= 0xa00 Filter = MIN_MAG_MIP_LINEAR; #else /* DIRECT3D_VERSION ; samplerCUBE gEnvSampler = sampler_state { Texture = ; #if DIRECT3D_VERSION >= 0xa00 Filter = MIN_MAG_MIP_LINEAR; #else /* DIRECT3D_VERSION = 0xa00 // // Standard DirectX10 Material State Blocks // RasterizerState DisableCulling {CullMode = NONE;}; DepthStencilState DepthEnabling {DepthEnable = TRUE;}; DepthStencilState DepthDisabling { DepthEnable = FALSE; DepthWriteMask = ZERO;}; BlendState DisableBlend {BlendEnable[0] = FALSE;}; technique10 Simple10 { pass p0 { SetVertexShader(CompileShader(vs_4_0, std_dp_VS(gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos))); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, metalPS(gSurfaceColor, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gAmbiColor))); SetRasterizerState(DisableCulling); SetDepthStencilState(DepthEnabling, 0); SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}} #endif /* DIRECT3D_VERSION >= 0xa00 */ technique Simple {pass p0 { VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; AlphaBlendEnable = false; CullMode = None; PixelShader = compile ps_3_0 metalPS(gSurfaceColor, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gAmbiColor); } } #if DIRECT3D_VERSION >= 0xa00 technique10 Textured10 { pass p0 { SetVertexShader (CompileShader (vs_4_0, std_dp_VS (gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos))); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, metalPS_t(gSurfaceColor,gColorSampler, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gAmbiColor))); SetRasterizerState(DisableCulling); SetDepthStencilState(DepthEnabling, 0); SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}} #endif /* DIRECT3D_VERSION >= 0xa00 */ technique Textured { pass p0 { VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; AlphaBlendEnable = false; CullMode = None; PixelShader = compile ps_3_0 metalPS_t(gSurfaceColor,gColorSampler, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gAmbiColor);}} // pixel shaded, quadratic falloff #if DIRECT3D_VERSION >= 0xa00 technique10 SimpleFalloff10 { pass p0 { SetVertexShader(CompileShader(vs_4_0, std_dp_VS(gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos))); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, metalQPS(gSurfaceColor, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gLamp0Intensity, gAmbiColor))); SetRasterizerState(DisableCulling); SetDepthStencilState(DepthEnabling, 0); SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); } } #endif /* DIRECT3D_VERSION >= 0xa00 */ technique SimpleFalloff { pass p0 { VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; AlphaBlendEnable = false; CullMode = None; PixelShader = compile ps_3_0 metalQPS(gSurfaceColor, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gLamp0Intensity, gAmbiColor);}} #if DIRECT3D_VERSION >= 0xa00 technique10 TexturedFalloff10 { pass p0 { SetVertexShader(CompileShader(vs_4_0, std_dp_VS(gWorldITXf,gWorldXf, gViewIXf,gWvpXf, gLamp0DirPos))); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, metalQPS_t(gSurfaceColor,gColorSampler, gKd,gSpecExpon,gKr, gEnvSampler, gLamp0Color,gLamp0Intensit