Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика»





НазваниеРеферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика»
страница7/9
Дата публикации17.02.2015
Размер0.59 Mb.
ТипРеферат
100-bal.ru > Информатика > Реферат
1   2   3   4   5   6   7   8   9

//--------------------------------------------------------------------------------------

// File: SurfaceDetailVariations.fx

//--------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------

// Includes

//--------------------------------------------------------------------------------------

#include "defines.fxh"

#include "shared.fxh"

//--------------------------------------------------------------------------------------

// Global variables

//--------------------------------------------------------------------------------------

static const float3 g_MaterialAmbientColor = { 0.2, 0.2, 0.2 }; // Material's ambient color

static const float3 g_MaterialDiffuseColor = { 0.5, 0.5, 0.5 }; // Material's diffuse color

static const float3 g_MaterialSpecularColor = { 0.7, 0.7, 0.7 }; // Material's specular color

static const float3 g_Normal = { 0.0, 0.0, -1.0 }; // Quad's normal in object space

static const float g_Shine = 128;

float g_height_delta_scale;

float g_max_height;

float g_grad_threshold;

float g_max_raytrace_bias;

float g_linear_search_delta;

int g_binary_search_steps;

float g_reflectance;

bool g_reflections;

bool g_cast_shadows;

float g_tex_scale; // Simple transform in tangent space

float3 g_Eye; // Eye position in world space

float3 g_WorldLightDir; // Normalized light's direction in world space

float4 g_LightDiffuse; // Light's diffuse color

float2 g_normal_height_map_res; // Resolution of normal height map

int g_rendering_mode; // Renderein mode (normal, final)

int g_height_diff_samples; // Technique (number of samples) of height map differentiation

int g_grad_method; // Gradients evaluation method
texture2D g_ColorTexture; // Color texture for object

texture2D g_NormalHeightTexture; // Normal & height texture for object
float4x4 g_mWorld; // World matrix for object

//--------------------------------------------------------------------------------------

// Texture samplers

//--------------------------------------------------------------------------------------

sampler2D ColorTextureSampler =

sampler_state

{

Texture = ;

MipFilter = LINEAR;

MinFilter = ANISOTROPIC;

MagFilter = LINEAR;

MaxAnisotropy = 16;

AddressU = MIRROR;

AddressV = MIRROR;

};

sampler2D NormalHeightTextureSampler =

sampler_state

{

Texture = ;

MipFilter = LINEAR;

MinFilter = LINEAR;

MagFilter = LINEAR;

MaxAnisotropy = 16;

AddressU = MIRROR;

AddressV = MIRROR;

};

//--------------------------------------------------------------------------------------

// Vertex shaders output structures

//--------------------------------------------------------------------------------------

struct TRANSFORM_REFLECT_VS_OUTPUT

{

float4 Position : POSITION; // vertex position

float2 TextureUV : TEXCOORD0; // vertex texture coords

float3 WorldPos : TEXCOORD1; // vertex position in world space

float3 Normal : TEXCOORD2; // vertex normal in world space

float3 Reflect : TEXCOORD3; // vertex reflection direction in world space

};

struct TRANSFORM_VS_OUTPUT

{

float4 Position : POSITION; // vertex position

float2 TextureUV : TEXCOORD0; // vertex texture coords

float3 WorldPos : TEXCOORD1; // vertex position in world space

};

//--------------------------------------------------------------------------------------

// This shader computes standard transform along with world normal and reflection direction

//--------------------------------------------------------------------------------------

TRANSFORM_REFLECT_VS_OUTPUT Transform_Reflect_VS(float3 vPos : POSITION, float2 vTexCoord0 : TEXCOORD0)

{

TRANSFORM_REFLECT_VS_OUTPUT Output;

float4x4 g_mWorldViewProjection = mul(g_mWorld, g_mViewProjection);

// Transform the position from object space to homogeneous projection space

Output.Position = mul(float4(vPos, 1), g_mWorldViewProjection);

// Just copy the texture coordinate through

Output.TextureUV = vTexCoord0;

// Transform the position from object space to world space

Output.WorldPos = mul(float4(vPos, 1), g_mWorld);

// Transform the normal from object space to world space

Output.Normal = normalize(mul(g_Normal, (float3x3)g_mWorld)); // normal (world space)

// Find reflection direction in world space

float3 v = g_Eye - Output.WorldPos;

Output.Reflect = reflect(-v, Output.Normal);

return Output;

}

//--------------------------------------------------------------------------------------

// This shader computes standard transform

//--------------------------------------------------------------------------------------

TRANSFORM_VS_OUTPUT Transform_VS(float3 vPos : POSITION, float2 vTexCoord0 : TEXCOORD0)

{

TRANSFORM_VS_OUTPUT Output;

float4x4 g_mWorldViewProjection = mul(g_mWorld, g_mViewProjection);

// Transform the position from object space to homogeneous projection space

Output.Position = mul(float4(vPos, 1), g_mWorldViewProjection);

// Just copy the texture coordinate through

Output.TextureUV = vTexCoord0;

// Transform the position from object space to world space

Output.WorldPos = mul(float4(vPos, 1), g_mWorld);

return Output;

}

//--------------------------------------------------------------------------------------

// Displacement mapping vertex shader

//--------------------------------------------------------------------------------------

TRANSFORM_VS_OUTPUT DisplacementMapping_VS(float3 vPos : POSITION, float2 vTexCoord0 : TEXCOORD0)

{

TRANSFORM_VS_OUTPUT Output;
float4x4 g_mWorldViewProjection = mul(g_mWorld, g_mViewProjection);

// Transform the position from object space to homogeneous projection space

Output.Position = mul(float4(vPos, 1), g_mWorldViewProjection);

// Just copy the texture coordinate through

Output.TextureUV = vTexCoord0;

// Transform the position from object space to world space

Output.WorldPos = mul(float4(vPos, 1), g_mWorld);

return Output;

}

//--------------------------------------------------------------------------------------

// Pixel shader output structure

//--------------------------------------------------------------------------------------

struct PS_OUTPUT

{

float4 RGBColor : COLOR0; // Pixel color

};

//--------------------------------------------------------------------------------------

// These functions returns normal (possible unnormalized) in (+t +b -n) space

//--------------------------------------------------------------------------------------

// Forward declarations

float3 FetchNormal(uniform sampler2D NormalHeightSampler, in float2 uv);

float3 FetchNormal(uniform sampler2D NormalHeightSampler, in float2 uv, in float2 dx, in float2 dy);
float3 FetchNormal(uniform sampler2D NormalHeightSampler, in float2 uv)

{

return FetchNormal(NormalHeightSampler, uv, ddx(uv), ddy(uv));

}
float3 FetchNormal(uniform sampler2D NormalHeightSampler, in float2 uv, in float2 dx, in float2 dy)

{

if(g_height_diff_samples == 0)

{

// fetch normal from normal map

float3 n = tex2Dgrad(NormalHeightSampler, uv, dx, dy).xyz;

// unpack [0..1]->[-1..1]

n = n * 2.0 - 1.0;

// reconstruct z

n.z = sqrt(1 - dot(n.xy, n.xy));

return float3(n.x, -n.y, -n.z);

}

else

{

/*------------------------------------------------------------------------------

compute normal based on height map in normalized (+t +b +n) space

U = u / g_tex_scale ( = 2u); dh/dU = 0.5 * dh/du

V = v / g_tex_scale ( = 2v); dh/dV = 0.5 * dh/dv

n = (dp/dU x dp/dV) - (dh/dU * dp/dU) - (dh/dV * dp/dV) (*)

------------------------------------------------------------------------------*/

// compute delta

// const float tex_compress = max(length(dx * g_normal_height_map_res), length(dy * g_normal_height_map_res));

// const float2 delta = clamp((float2)tex_compress, 1, g_normal_height_map_res) / g_normal_height_map_res * g_height_delta_scale;

const float2 delta = g_height_delta_scale / g_normal_height_map_res;

float3 n;

// ( * g_tex_scale) for d/du->d/dU, d/dv->d/dV

// ( / -g_tex_scale) for unnormalized (+T +B -N) -> normalized (+t +b +n) space

// (-) in formula (*)

if (g_height_diff_samples == 3)

{

float

height_centre = tex2Dgrad(NormalHeightSampler, float2(uv.x, uv.y), dx, dy).w,

height_x = tex2Dgrad(NormalHeightSampler, float2(uv.x + delta.x, uv.y), dx, dy).w,

heitht_y = tex2Dgrad(NormalHeightSampler, float2(uv.x, uv.y + delta.y), dx, dy).w;

n.x = g_max_height * (height_x - height_centre) / delta;

n.y = g_max_height * (heitht_y - height_centre) / delta;

}

else

if (g_height_diff_samples == 4)

{

float

height_px = tex2Dgrad(NormalHeightSampler, float2(uv.x + delta.x, uv.y), dx, dy).w,

height_nx = tex2Dgrad(NormalHeightSampler, float2(uv.x - delta.x, uv.y), dx, dy).w,

heitht_py = tex2Dgrad(NormalHeightSampler, float2(uv.x, uv.y + delta.y), dx, dy).w,

heitht_ny = tex2Dgrad(NormalHeightSampler, float2(uv.x, uv.y - delta.y), dx, dy).w;

n.x = g_max_height * (height_px - height_nx) / (delta.x * 2);

n.y = g_max_height * (heitht_py - heitht_ny) / (delta.y * 2);

}

else // 8 samples

{

float

height_nx_ny = tex2Dgrad(NormalHeightSampler, float2(uv.x - delta.x, uv.y - delta.y), dx, dy).w,

height_0x_ny = tex2Dgrad(NormalHeightSampler, float2(uv.x, uv.y - delta.y), dx, dy).w,

height_px_ny = tex2Dgrad(NormalHeightSampler, float2(uv.x + delta.x, uv.y - delta.y), dx, dy).w,

height_nx_0y = tex2Dgrad(NormalHeightSampler, float2(uv.x - delta.x, uv.y), dx, dy).w,

height_px_0y = tex2Dgrad(NormalHeightSampler, float2(uv.x + delta.x, uv.y), dx, dy).w,

height_nx_py = tex2Dgrad(NormalHeightSampler, float2(uv.x - delta.x, uv.y + delta.y), dx, dy).w,

height_0x_py = tex2Dgrad(NormalHeightSampler, float2(uv.x, uv.y + delta.y), dx, dy).w,

height_px_py = tex2Dgrad(NormalHeightSampler, float2(uv.x + delta.x, uv.y + delta.y), dx, dy).w;

n.x = g_max_height * (height_px_ny - height_nx_ny + height_px_py - height_nx_py + 2 * (height_px_0y - height_nx_0y)) / (delta.x * 8);

n.y = g_max_height * (height_nx_py - height_nx_ny + height_px_py - height_px_ny + 2 * (height_0x_py - height_0x_ny)) / (delta.y * 8);

}

n.z = 1;

// return in (+t +b -n) space

return float3(n.xy, -n.z);

}

};

//--------------------------------------------------------------------------------------

// This function compute Blinn-Phong lighting

//--------------------------------------------------------------------------------------

float3 BlinnPhong(float3 TexColor, float3 n, float3 v, float3 l, float shadow = 1)

{

// return v * 0.5 + 0.5;

float3 h = normalize(v + l);

float3 color = g_MaterialDiffuseColor * TexColor * saturate(dot(l, n));

color += g_MaterialSpecularColor * pow(saturate(dot(h, n)), g_Shine);

color *= g_LightDiffuse;

color *= shadow;

color += g_MaterialAmbientColor * TexColor;

return color;

}

//--------------------------------------------------------------------------------------

// Flat pixel shader

//--------------------------------------------------------------------------------------

PS_OUTPUT Flat_PS(TRANSFORM_REFLECT_VS_OUTPUT In)

{

PS_OUTPUT Output;

// view and light directions

float3 v = normalize(g_Eye - In.WorldPos);

float3 l = normalize(g_WorldLightDir);

float3 n = normalize(In.Normal);

// Lookup texture

float3 TexColor = tex2D(ColorTextureSampler, In.TextureUV).rgb;

Output.RGBColor.rgb = BlinnPhong(TexColor, n, v, l);

Output.RGBColor.a = 1.0;

if (g_reflections)

{

// Lookup cube map

float3 reflect_color = texCUBE(CubeMapSampler, In.Reflect);

// Combine with previous color

Output.RGBColor.rgb = lerp(Output.RGBColor.rgb, reflect_color, g_reflectance);

}
return Output;

}

//--------------------------------------------------------------------------------------

// Normal Mapping pixel shader

//--------------------------------------------------------------------------------------

PS_OUTPUT NormalMapping_PS(TRANSFORM_VS_OUTPUT In)

{

PS_OUTPUT Output;

// view and light directions

float3 v = normalize(g_Eye - In.WorldPos);

float3 l = g_WorldLightDir;

// Lookup texture

float3 TexColor = tex2D(ColorTextureSampler, In.TextureUV).rgb;

float3 n = FetchNormal(NormalHeightTextureSampler, In.TextureUV);

if (g_rendering_mode == RENDERING_MODE_LOCAL_NORMAL)

// pack normal [-1..1]->[0..1] and output

return (PS_OUTPUT)float4((normalize(n) + 1) * .5f, 1);

n = normalize(mul(n, (float3x3)g_mWorld));

if (g_rendering_mode == RENDERING_MODE_WORAL_NORMAL)

// pack normal [-1..1]->[0..1] and output

return (PS_OUTPUT)float4((n + 1) * .5f, 1);

Output.RGBColor.rgb = BlinnPhong(TexColor, n, v, l);

Output.RGBColor.a = 1.0;
if (g_reflections)

{

// find reflection direction in world space

float3 reflect_dir = reflect(-v, n);

// Lookup cube map

float3 reflect_color = texCUBE(CubeMapSampler, reflect_dir);

// Combine with previous color

Output.RGBColor.rgb = lerp(Output.RGBColor.rgb, reflect_color, g_reflectance);

}
if (g_rendering_mode == RENDERING_MODE_FINAL)

return Output;

return (PS_OUTPUT)0;

}

//--------------------------------------------------------------------------------------

// Parallax Mapping 1 pixel shader

//--------------------------------------------------------------------------------------

PS_OUTPUT ParallaxMapping_1_PS(TRANSFORM_VS_OUTPUT In)

{

PS_OUTPUT Output;
// view and light directions

float3 v = normalize(g_Eye - In.WorldPos);

float3 l = g_WorldLightDir;

// parallax

float height = (1.0 - tex2D(NormalHeightTextureSampler, In.TextureUV).w) * g_max_height;

float3 offset = mul((float3x3)g_mWorld, v) * g_tex_scale;
1   2   3   4   5   6   7   8   9

Похожие:

Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconРеферат: Коваленко А. Е. Разработка системы научной визуализации....
Коваленко А. Е. Разработка системы научной визуализации. Квалификационная работа на степень магистра наук по направлению «Математика....
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconРеферат Флягина Т. А. Проблемы разработки многооконных интерфейсов,...
Флягина Т. А. Проблемы разработки многооконных интерфейсов, квалификационная работа на степень бакалавра наук
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconКвалификационной работы на факультете математики и компьютерных наук
В соответствии с действующими государственными образовательными стандартами выпускная квалификационная работа по специальности «Математика»...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconДиссертация на степень магистра наук по направлению «Математика, компьютерные науки»
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconДипломная работа по направлению Математика. Прикладная математика студента гр. Мт 505
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины Современные методы принятия решений  для направления...
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 010400....
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины «Герменевтика» для направления 010400. 68 «Прикладная...
Программа предназначена для преподавателей, ведущих данную дисциплину, и студентов направления подготовки 010400. 68 "Прикладная...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» icon1 Нормативные документы для разработки ооп впо по направлению подготовки...
Общая характеристика вузовской основной образовательной программы высшего профессионального образования по направлению подготовки...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconРеферат Тычинин И. А. Разработка приложения для портативных устройств...
Тычинин И. А. Разработка приложения для портативных устройств с использованием qt framework, квалификационная работа на степень бакалавра...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconОсновная образовательная программа (ооп) бакалавриата, реализуемая...
Нормативные документы для разработки ооп бакалавриата по направлению подготовки «Прикладная математика и информатика»
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины Архитектура ЭВМ для направления 010400. 68 «Прикладная...
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направлений подготовки 010400....
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconОбразовательная программа высшего образования, реализуемая университетом...
...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconЛитература
Уросов А. П. Разработка методик визуализации для представления работы параллельных программ, квалификационная работа на степень бакалавра...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconЕН. Ф. 1 Математика и информатика: математика
Учебная дисциплина Математика и информатика: "Математика" введена в процесс обуче­ния для бакалавров по направлению подготовки "Художественное...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины «Модели корпусной лингвистики» для направления...
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления 010400. 68 "Прикладная...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины «История» для направления 231300. 62 и 230700....
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 231300....


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск