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





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

offset = normalize(float3(offset.xy, -offset.z)) * g_max_height;

In.TextureUV += height * offset;

// 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 2 pixel shader

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

PS_OUTPUT ParallaxMapping_2_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);

offset = float3(offset.xy, -offset.z);

offset *= g_max_height / offset.z;

In.TextureUV += height * offset;

// 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 Occlusion Mapping pixel shader

//--------------------------------------------------------------------------------------
// Search intersection point in (+T +B -N) space
static float start_diff;
bool LinearSearch(in float3 dir, out float3 delta, inout float3 offset, in float2 uv, in float2 dx, in float2 dy, in float linear_search_delta, inout int steps)

{

if (dir.z > 0)

{

// search down

delta = dir / dir.z;

delta *= g_max_height - offset.z;

}

else

{

// search up

delta = dir / -dir.z;

delta *= offset.z;

}

float2 delta_tex = abs(delta.xy);

const float2 target_delta_tex = linear_search_delta / g_normal_height_map_res;

float2 delta_scale_xy = target_delta_tex / delta_tex;

float delta_scale = min(min(delta_scale_xy.x, delta_scale_xy.y), 1);

delta *= delta_scale;

start_diff = tex2Dgrad(NormalHeightTextureSampler, uv + offset, dx, dy).w * g_max_height - offset.z;

int cur_step = 0;

bool no_intersect = true;

while (offset.z <= g_max_height && offset.z >= 0 && (no_intersect = (tex2Dgrad(NormalHeightTextureSampler, uv + offset, dx, dy).w * g_max_height - offset.z) * start_diff > 0))

{

cur_step++;

offset += delta;

steps++;

}

return no_intersect;

}

void BinarySearch(inout float3 dir, inout float3 delta, inout float3 offset, out float3 offset_back, in float2 uv, in float2 dx, in float2 dy, in int binary_search_steps, inout int steps)

{

offset_back = offset - delta;

if (start_diff != 0)

{

float delta_len = length(delta);

for (int cur_step = 0; cur_step < binary_search_steps; cur_step++)

{

delta *= 0.5;

if ((tex2Dgrad(NormalHeightTextureSampler, uv + offset, dx, dy).w * g_max_height - offset.z) * start_diff > 0)

{

// outside

if (delta_len > g_max_raytrace_bias)

offset_back = offset;

offset += delta;

}

else

// inside

offset -= delta;

delta_len *= 0.5;

}

steps += binary_search_steps;

}

}

PS_OUTPUT ParallaxOcclusionMapping_PS(TRANSFORM_VS_OUTPUT In)

{

PS_OUTPUT Output;

bool grads_from_base_plane;

float2

IntersectUV, // offset texcoords

dx, dy; // corresponding grads

int overall_search_steps = 0;
// view and light directions

float3 local_view = In.WorldPos - g_Eye;

float3 local_light = g_WorldLightDir;

// transform in (+T +B -N) space

local_view = mul((float3x3)g_mWorld, local_view);

float3 delta;

// offset in (+T +B -N) space

float3

offset = 0,

offset_back;

// compute gradients in base plane

float2 base_dx, base_dy;

float4(base_dx, base_dy) = float4(ddx(In.TextureUV), ddy(In.TextureUV));

// search intersection in view direction

LinearSearch(local_view, delta, offset, In.TextureUV, base_dx, base_dy, g_linear_search_delta, overall_search_steps);

BinarySearch(local_view, delta, offset, offset_back, In.TextureUV, base_dx, base_dy, g_binary_search_steps, overall_search_steps);

// offset texture coords

IntersectUV = In.TextureUV + offset;

// transform base offset in world space

float3 obj_offset = offset / g_tex_scale; // in object space

float3 world_offset = mul(obj_offset, (float3x3)g_mWorld);

// Intersection point in world space (used for lighting direction computation for point light sources)

float3 world_pos = In.WorldPos + world_offset;

// return (PS_OUTPUT)float4(obj_offset * 0.5 + 0.5, 1);

float shadow_factor;

// search intersection in light direction

if (g_cast_shadows)

{

local_light = mul((float3x3)g_mWorld, local_light); // in (+T +B -N) space

offset = offset_back;

shadow_factor = LinearSearch(local_light, delta, offset, In.TextureUV, base_dx, base_dy, g_linear_search_delta, overall_search_steps);

}

else

shadow_factor = 1;
// lookup texture

float3 TexColor;

float3 n;

if (g_grad_method == GRAD_METHOD_STD)

grads_from_base_plane = false;

else

if (g_grad_method == GRAD_METHOD_BASE_PLANE)

grads_from_base_plane = true;

else

if (g_grad_method == GRAD_METHOD_HYBRID)

{

float4(dx, dy) = float4(ddx(IntersectUV), ddy(IntersectUV));

grads_from_base_plane = max(dot(dx, dx), dot(dy, dy)) > g_grad_threshold;

}

else

return (PS_OUTPUT)0;

//float4(dx, dy) = float4(ddx(IntersectUV), ddy(IntersectUV));

//if (g_grad_method == GRAD_METHOD_BASE_PLANE || g_grad_method == GRAD_METHOD_HYBRID && max(dot(dx, dx), dot(dy, dy)) > g_grad_threshold)

if (grads_from_base_plane)

{

TexColor = tex2Dgrad(ColorTextureSampler, IntersectUV, base_dx, base_dy).rgb;

n = FetchNormal(NormalHeightTextureSampler, IntersectUV, base_dx, base_dy).xyz;

}

else

{

TexColor = tex2D(ColorTextureSampler, IntersectUV).rgb;

n = FetchNormal(NormalHeightTextureSampler, IntersectUV).xyz;

}

if (g_height_diff_samples == 0) // normal from normal map

n.z *= 0.5 / g_max_height;

n = normalize(n);

float3 local_normal = n;

if (g_rendering_mode == RENDERING_MODE_LOCAL_NORMAL)

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

return (PS_OUTPUT)float4((local_normal + 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);

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

float3 l = g_WorldLightDir;

Output.RGBColor.rgb = BlinnPhong(TexColor, n, v, l, shadow_factor);
// search intersection in reflection direction

if (g_reflections)

{

offset = offset_back;

float3 local_reflect = reflect(local_view, local_normal);

bool cube_map_reflect = LinearSearch(local_reflect, delta, offset, In.TextureUV, base_dx, base_dy, g_linear_search_delta, overall_search_steps);

// Transoform reflection direction in world space

// Length is meaningless, so it is not required to transform from unnormalized (+T +B -N) space to normalized (+t +b -n) space (object space) (in general case transformation in tangent space required)

// Normalize for lighting calculations (normalization not required if g_mWorld orthogonal)

float3 world_reflect = normalize(mul(local_reflect, (float3x3)g_mWorld));

if (cube_map_reflect)

{

float3 reflect_color = texCUBE(CubeMapSampler, world_reflect).rgb;

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

}

else

{

BinarySearch(local_reflect, delta, offset, offset_back, In.TextureUV, base_dx, base_dy, g_binary_search_steps, overall_search_steps);

// transform offset in world space

obj_offset = offset / g_tex_scale; // in object space

world_offset = mul(obj_offset, (float3x3)g_mWorld);

// Intersection point in world space (used for lighting direction computation for point light sources)

world_pos = In.WorldPos + world_offset;
// offset texture coords

IntersectUV = In.TextureUV + offset;

if (g_grad_method == GRAD_METHOD_STD)

grads_from_base_plane = false;

else

if (g_grad_method == GRAD_METHOD_BASE_PLANE)

grads_from_base_plane = true;

else

if (g_grad_method == GRAD_METHOD_HYBRID)

{

float4(dx, dy) = float4(ddx(IntersectUV), ddy(IntersectUV));

grads_from_base_plane = max(dot(dx, dx), dot(dy, dy)) > g_grad_threshold;

}

else

return (PS_OUTPUT)0;

//float4(dx, dy) = float4(ddx(IntersectUV), ddy(IntersectUV));

//if (g_grad_method == GRAD_METHOD_BASE_PLANE || g_grad_method == GRAD_METHOD_HYBRID && max(dot(dx, dx), dot(dy, dy)) > g_grad_threshold)

if (grads_from_base_plane)

{

TexColor = tex2Dgrad(ColorTextureSampler, IntersectUV, base_dx, base_dy).rgb;

n = FetchNormal(NormalHeightTextureSampler, IntersectUV, base_dx, base_dy).xyz;

}

else

{

TexColor = tex2D(ColorTextureSampler, IntersectUV).rgb;

n = FetchNormal(NormalHeightTextureSampler, IntersectUV).xyz;

}

if (g_cast_shadows)

{

offset = offset_back;

shadow_factor = LinearSearch(local_light, delta, offset, In.TextureUV, base_dx, base_dy, g_linear_search_delta, overall_search_steps);

}

else

shadow_factor = 1;

if (g_height_diff_samples == 0) // normal from normal map

n.z *= 0.5 / g_max_height;

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

float3 reflect_color = BlinnPhong(TexColor, n, -world_reflect, l, shadow_factor);

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

}

}

Output.RGBColor.a = 1.0;

// if (g_rendering_mode == RENDERING_MODE_SEARCH_STEPS)

// return (PS_OUTPUT)(float(overall_search_steps) / (255 * 6));

if (g_rendering_mode == RENDERING_MODE_FINAL)

return Output;

return (PS_OUTPUT)0;

}

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

// Displacement mapping pixel shader

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

PS_OUTPUT DisplacementMapping_PS(TRANSFORM_VS_OUTPUT In)

{

PS_OUTPUT Output;

Output.RGBColor.rgb = In.WorldPos;

Output.RGBColor.a = 1.0;
return Output;

}

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

// Techniques

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

technique Flat

{

pass P0

{

VertexShader = compile vs_2_0 Transform_Reflect_VS();

PixelShader = compile ps_2_0 Flat_PS();

}

}
technique NormalMapping

{

pass P0

{

VertexShader = compile vs_3_0 Transform_VS();

PixelShader = compile ps_3_0 NormalMapping_PS();

}

}
technique ParallaxMapping_1

{

pass P0

{

VertexShader = compile vs_3_0 Transform_VS();

PixelShader = compile ps_3_0 ParallaxMapping_1_PS();

}

}
technique ParallaxMapping_2

{

pass P0

{

VertexShader = compile vs_3_0 Transform_VS();

PixelShader = compile ps_3_0 ParallaxMapping_2_PS();

}

}
technique ParallaxOcclusionMapping

{

pass P0

{

VertexShader = compile vs_3_0 Transform_VS();

PixelShader = compile ps_3_0 ParallaxOcclusionMapping_PS();

}

}
technique DisplacementMapping

{

pass P0

{

VertexShader = compile vs_3_0 DisplacementMapping_VS();

PixelShader = compile ps_3_0 DisplacementMapping_PS();

}

}


LocalRayTracing.fx

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

// File: LocalRayTracing.fx

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

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

// Includes

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

#include "shared.fxh"

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

// Global variables
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
Поиск