Современные технологии компьютерной графики

High Level Shader Language как высокоуровневый Си-подобный язык для написания шейдеров. Программа для работы с шейдерами, вид и краткое описание интерфейса. Характеристика особенностей создания трехмерных изображений. Структурные элементы программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 16.01.2014
Размер файла 485,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

[Введите текст]

Реферат

Курсовая работа посвящена изучению современных технологий компьютерной графики, а именно программированию шейдеров высокого уровня. Она направлена на получение начальных знаний о шейдерах написанных на высокоуровневом языке и современных методах создания реалистичных 3D и 2D изображений. В виду того, что тема работы не в ходит курс изучения компьютерной графики, то более детальное и подробное изучение останется на будущее самостоятельное изучение. Работа содержит в себе код шейдера (см. Приложение), краткое описание структурных элементов и изображение полученное методом программирования шейдеров.

Задача курсовой работы - изучить программирование шейдеров. Для этого будет использоваться язык HLSL и среда разработки FX Composer от компании nVidia, созданная для работы с языками программирования шейдеров высокого уровня и их оптимальной работы с видеокартами nVidia. В качестве основы взята модель пистолета с сайта http://3dlenta.com/ и текстура металла из официального каталога nVidia. На выходе я получу изображение в формате.bmp.

Введение

HLSL (High Level Shader Language) - высокоуровневый Си-подобный язык для написания шейдеров, разработанный Microsoft и являющийся частью DirectX. Аналоги: GLSL (OpenGL), Cg (OpenGL, Direct3D).

HLSL пришел на смену ассемблерному шейдерному языку и позиционируется как более удобный язык для разработки шейдеров. Доступен для Direct3D начиная с версии 9.0 (возможно комбинирование кода на HLSL и asm). Начиная с Direct3D10 ассемблерные вставки запрещены. [1]

HLSL является современным и удобным языком программирования шейдеров. Позволяет без особых усилий создавать красивые 3-х и 2-х мерные изображения. Множество сред разработки поддерживают этот язык. Я в своей работе буду использовать среду разработки nVidia FX Composer, которая поддерживается и свободно распространяется компанией nVidia.

В современной компьютерной графике большинство изображений создаются с помощью шейдеров из-за того, что они позволяют создавать реалистичные статичные и динамичные изображения с отражением окружающего мира и установкой источника света. В основе программирование шейдеров лежит задание функций - вершинных и пиксельных шейдеров. Они соответственно обрабатывают геометрию объекта и отдельные пиксели. После задания этих функций выполняется «проход» по ним. «Проходы» находятся в техниках, которые так же содержат некоторые вспомогательные данные, такие как: видимость объектов, включение альфа канала в цвета и др. В моей работе я использую один проход, т.к. мой проект довольно примитивен и направлен на изучение основ и возможностей программирования шейдеров. В серьезных коммерческих (и не только) проектах может использоваться множество проходов, для получения изображения лучшего качества.

При рендеринге сложных объектов требуется большая вычислительная мощность и для того, чтобы уменьшить нагрузку на аппаратуру и потребность разработчиков в более современной технике используется негласное правило: все что можно посчитать - считай сам, все что нельзя посчитать самому считай в вершинном шейдере, а все остальное в пиксельном. Такой подход обусловлен тем, что пиксельный шейдер и без того перегружен вычислениями, и такой подход помогает равномерно распределить вычисления в течении всего создания изображения. [2]

На настоящее время перспективы шейдеров довольно радужные, т.к. они предоставляют широкие возможности для дизайнеров и разработчиков, поддерживаются многими мировыми компаниями, активно развиваются. Но существуют, конечно, и проблемы. Одна из которых - требования конечных потребителей. С развитием компьютерной графики люди стали привыкать к все более и более качественным и реалистичным изображениям и сейчас уже никого не удивить качественно выполненным средствами компьютерной графики взрывом. И удовлетворение потребностей потребителей требует постоянного развития, как компьютерной графики, так и развития аппаратуры. С одной стороны это конечно можно назвать плюсом, т.к. способствует прогрессу, однако для создателей это становится действительно проблематично, потому что необходимо делать постоянные капиталовложения в технику и в обучение и переобучение специалистов.

Описание алгоритма решения задачи.

В виду того, что знаком с темой я слабо, то мой алгоритм значительно упрощен от реальных действий разработчиков шейдеров.

Скачать с репозиториев nVidia текстуру, соответствующую модели и задумке автора.

Средствами Composerа наложить текстуру на модель.

Добавить источник света. Выделив источник света с помощью появившихся трех векторов (по осям x, y, z), переместить источник света в нужную позицию, добившись необходимого освещения. Произвести рендеринг изображения для получения готового продукта.

Описание программного продукта

Среда разработки: nVidia FX Composer.

Язык разработки: HLSL.

Аппаратные требования: видеокарта - nVidia с поддержкой Directx 9.0 и выше, процессор - 1 гГц, оперативная память - 512 mb.

Структура программы: программа состоит из 4 техник (Simple, Textured, SimpleFalloff, TexturedFalloff), одного вершинного шейдера (std_dp_VS), 5 пиксельных шейдеров (metal_shared, metalPS, metalPS_t, metalQPS, metalQPS_t).

Входные и выходные данные

На вход программы я подаю модель и текстуру, а на выходе получаю изображение, обработанное с помощью шейдеров.

Модель была скачана с сайта http://netlib.narod.ru

Рис. 1

Текстура была скачана с официального репозитория текстур nVidia.

Рис. 2

Инструкция пользователю

Программу для работы с шейдерами можно скачать с официального сайта nVidia http://developer.download.nvidia.com. После установки запускать ярлыком с рабочего стола или из меню «Пуск». Более подробная информация дана далее в описании интерфейса.

Дополнительную информацию можно получить на сайте указанном выше, там можно найти подробный мануал по созданию шейдеров на английском языке.

Описание интерфейса

Рис. 3

После запуска программы появляется окно предлагающее создать новый проект, открыть проект, открыть недавние проекта, а так же несколько полезных ссылок на гайд по программированию шейдеров и форуму разработчиков.

После выбора готового проекта открывается интерфейс разработчика (т.к. именно он был включен для удобства разработки во время последнего запуска).

Рис. 4

В левой части окна можно видеть окна навигации по текстурам и материалам, в центральной - пустое окно для редактирования кода, которое заполнится текстом после выбора текстуры или материала, которые необходимо отредактировать, а в правой части окно свойств и моя законченная модель. Чтобы дать пользователю более комфортный режим работы с моделью необходимо переключится в режим PowerUser: Edit - Layouts - PowerUser.

Рис. 5

В таком режиме в левой части экрана располагается библиотека текстур и материалов nVidia, а в правой части - модель, которую можно вертуть, отдалять, приближать, выбирая лучший ракурс и сохранить 2D изображение с помощью крайней правой пентаграммы на панели инструментов Save Viewport to File, после чего появляется стандартное окно для сохранения файла с возможностью выбрать каталог для сохранения и расширение выходного изображения.bmp,.jpeg,.png.

Такой режим интерфейса программы наиболее удобен для пользователей как начинающих, так и более подкованных в этой области (не разработчиков), т.к. позволяет и видеть в реальном времени в большом размере результат действия, быстро найти новую текстуру, а с помощью всплывающих меню указать какие-то свойства или отредактировать код, если конечно есть необходимые знания.

Так же пользователь может самостоятельно удалить или изменить положение источника света, а так же добавить новый с помощью кнопки Add Point Light.

С помощью кнопок New и Open можно создать новый или открыть уже созданный проект. С помощью кнопки Import можно импортировать в проект еще модель или текстуру.

Описание структурных элементов программы

Вершинный шейдер std_dp_VS определяет вершины модели и в соответствии с ее формой применяет текстуру.

Пиксельный шейдер metal_shared нормализует вектора и задает цвет текстуре.

Пиксельный шейдер metalPS осуществляет предварительную подготовку цвета.

Пиксельный шейдер metalPS_t осуществляет окончательное применение цвета в мировых координатах

Пиксельный шейдер metalQPS осуществляет предварительную подготовку отражения и источника света

Пиксельный шейдер metalQPS_t отображает отражения и тени на лицевой стороне модели.

Изображение, полученное с помощью шейдеров:

шейдер трехмерный изображение программа

Рис. 6

Заключение

В результате работы я получил базовые знания в области создания трехмерных изображений с помощью шейдеров. С разрешения преподавателя использовал заранее готовую модель и текстуру, и после изучения начальных аспектов темы с помощью программы FX Composer совместил текстуру с моделью, выставил источник света и выбрал ракурс, с которого получил двухмерное изображение приложенное выше. При дальнейшем самостоятельном изучении компьютерной графики я планирую глубже разобраться в заинтересовавшей меня теме, получить навыки в создании 3D моделей и текстур в различных редакторах.

Список литературы

1. http://ru.wikipedia.org/wiki/HLSL

2. http://www.gamedev.ru

3. http://netlib.narod.ru

4. http://developer.download.nvidia.com

Приложение

// #define _XSI_/* predefined when running in XSI */

// #define TORQUE/* predefined in TGEA 1.7 and up */

// #define _3DSMAX_/* predefined in 3DS Max */

#ifdef _3DSMAX_

int ParamID = 0x0003;/* Used by Max to select the correct parser */

#endif /* _3DSMAX_ */

#ifdef _XSI_

#define Main Static/* Technique name used for export to XNA */

#endif /* _XSI_ */

#ifndef FXCOMPOSER_VERSION/* for very old versions */

#define FXCOMPOSER_VERSION 180

#endif /* FXCOMPOSER_VERSION */

#ifndef DIRECT3D_VERSION

#define DIRECT3D_VERSION 0x900

#endif /* DIRECT3D_VERSION */

#define FLIP_TEXTURE_Y/* Different in OpenGL & DirectX */

/*** EFFECT-SPECIFIC CODE BEGINS HERE *********************/

/******* Lighting Macros *******/

/** To use "Object-Space" lighting definitions, change these two macros: **/

#define LIGHT_COORDS "World"

// #define OBJECT_SPACE_LIGHTS /* Define if LIGHT_COORDS is "Object" */

float Script: STANDARDSGLOBAL <

string UIWidget = "none";

string ScriptClass = "object";

string ScriptOrder = "standard";

string ScriptOutput = "color";

// string Script = "Technique=Technique?Simple:Simple10:Textured:Textured10:SimpleFalloff:SimpleFalloff10:TexturedFalloff:TexturedFalloff10;";

> = 0.8;

/**** UNTWEAKABLES: Hidden & Automatically-Tracked Parameters **********/

// transform object vertices to world-space:

float4x4 gWorldXf: World < string UIWidget="None"; >;

// transform object normals, tangents, & binormals to world-space:

float4x4 gWorldITXf: WorldInverseTranspose < string UIWidget="None"; >;

// transform object vertices to view space and project them in perspective:

float4x4 gWvpXf: WorldViewProjection < string UIWidget="None"; >;

// provide tranform from "view" or "eye" coords back to world-space:

float4x4 gViewIXf: ViewInverse < string UIWidget="None"; >;

/************* TWEAKABLES **************/

// "DirPos" Lamp 0 /////////

float4 gLamp0DirPos: POSITION < // or direction, if W==0

string Object = "Light0";

string UIName = "Lamp 0 Position/Direction";

string Space = (LIGHT_COORDS);

> = {-0.5f,2.0f,1.25f,1.0};

float3 gLamp0Color: SPECULAR <

string UIName = "Lamp 0";

string Object = "Light0";

string UIWidget = "Color";

> = {1.0f,1.0f,1.0f};

float gLamp0Intensity <

string UIWidget = "slider";

float UIMin = 1.0;

float UIMax = 10000.0f;

float UIStep = 0.1;

string UIName = "Lamp 0 Quadratic Intensity";

> = 1.0f;

// Ambient Light

float3 gAmbiColor: AMBIENT <

string UIName = "Ambient Light";

string UIWidget = "Color";

> = {0.07f,0.07f,0.07f};

// surface color

float3 gSurfaceColor: DIFFUSE <

string UIName = "Surface";

string UIWidget = "Color";

> = {1,1,1};

float gSpecExpon <

string UIWidget = "slider";

float UIMin = 1.0;

float UIMax = 128.0;

float UIStep = 1.0;

string UIName = "Specular Exponent";

> = 12.0;

float gKd <

string UIWidget = "slider";

float UIMin = 0.0;

float UIMax = 1.0;

float UIStep = 0.01;

string UIName = "Diffuse";

> = 0.1;

float gKr <

string UIWidget = "slider";

float UIMin = 0.0;

float UIMax = 1.0;

float UIStep = 0.05;

string UIName = "Reflection";

> = 0.2;

texture gColorTexture: DIFFUSE <

string ResourceName = "default_color.dds";

string UIName = "Diffuse Texture";

string ResourceType = "2D";

>;

sampler2D gColorSampler = sampler_state {

Texture = <gColorTexture>;

#if DIRECT3D_VERSION >= 0xa00

Filter = MIN_MAG_MIP_LINEAR;

#else /* DIRECT3D_VERSION < 0xa00 */

MinFilter = Linear;

MipFilter = Linear;

MagFilter = Linear;

#endif /* DIRECT3D_VERSION */

AddressU = Wrap;

AddressV = Wrap;

};

texture gEnvTexture: ENVIRONMENT <

string ResourceName = "default_reflection.dds";

string UIName = "Environment";

string ResourceType = "Cube";

>;

samplerCUBE gEnvSampler = sampler_state {

Texture = <gEnvTexture>;

#if DIRECT3D_VERSION >= 0xa00

Filter = MIN_MAG_MIP_LINEAR;

#else /* DIRECT3D_VERSION < 0xa00 */

MinFilter = Linear;

MipFilter = Linear;

MagFilter = Linear;

#endif /* DIRECT3D_VERSION */

AddressU = Clamp;

AddressV = Clamp;

AddressW = Clamp;

};

/************* DATA STRUCTS **************/

/* data from application vertex buffer */

struct appdata {

float3 Position: POSITION;

float4 UV: TEXCOORD0;

float4 Normal: NORMAL;

float4 Tangent: TANGENT0;

float4 Binormal: BINORMAL0;

};

/* data passed from vertex shader to pixel shader */

struct vertexOutput {

float4 HPosition: POSITION;

float2 UV: TEXCOORD0;

// The following values are passed in "World" coordinates since

// it tends to be the most flexible and easy for handling

// reflections, sky lighting, and other "global" effects.

float3 LightVec: TEXCOORD1;

float3 WorldNormal: TEXCOORD2;

float3 WorldTangent: TEXCOORD3;

float3 WorldBinormal: TEXCOORD4;

float3 WorldView: TEXCOORD5;

};

/*********** vertex shader for pixel-shaded versions ******/

/*********** Generic Vertex Shader ******/

vertexOutput std_dp_VS(appdata IN,

uniform float4x4 WorldITXf, // our four standard "untweakable" xforms

uniform float4x4 WorldXf,

uniform float4x4 ViewIXf,

uniform float4x4 WvpXf,

uniform float4 LampDirPos

) {

vertexOutput OUT = (vertexOutput)0;

OUT.WorldNormal = mul(IN.Normal,WorldITXf).xyz;

OUT.WorldTangent = mul(IN.Tangent,WorldITXf).xyz;

OUT.WorldBinormal = mul(IN.Binormal,WorldITXf).xyz;

float4 Po = float4(IN.Position.xyz,1);

float4 Pw = mul(Po,WorldXf);// convert to "world" space

#ifdef OBJECT_SPACE_LIGHTS

float4 Lw = mul(LampDirPos,WorldXf);// convert to "world" space

#else /* !OBJECT_SPACE_LIGHTS -- standard world-space lights */

float4 Lw = LampDirPos;

#endif /* !OBJECT_SPACE_LIGHTS */

if (Lw.w == 0) {

OUT.LightVec = -normalize(Lw.xyz);

} else {

// we are still passing a (non-normalized) vector

OUT.LightVec = Lw.xyz - Pw.xyz;

}

#ifdef FLIP_TEXTURE_Y

OUT.UV = float2(IN.UV.x,(1.0-IN.UV.y));

#else /* !FLIP_TEXTURE_Y */

OUT.UV = IN.UV.xy;

#endif /* !FLIP_TEXTURE_Y */

OUT.WorldView = normalize(ViewIXf[3].xyz - Pw.xyz);

OUT.HPosition = mul(Po,WvpXf);

return OUT;

}

/********* pixel shaders ********/

void metal_shared(vertexOutput IN,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

float3 LightColor,

uniform float3 AmbiColor,

out float3 DiffuseContrib,

out float3 SpecularContrib)

{

float3 Ln = normalize(IN.LightVec.xyz);

float3 Nn = normalize(IN.WorldNormal);

float3 Vn = normalize(IN.WorldView);

float3 Hn = normalize(Vn + Ln);

float4 litV = lit(dot(Ln,Nn),dot(Hn,Nn),SpecExpon);

DiffuseContrib = litV.y * Kd * LightColor + AmbiColor;

SpecularContrib = litV.z * LightColor;

float3 reflVect = -reflect(Vn,Nn);

float3 ReflectionContrib = Kr * texCUBE(EnvSampler,reflVect).rgb;

SpecularContrib += ReflectionContrib;

}

float4 metalPS(vertexOutput IN,

uniform float3 SurfaceColor,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

metal_shared(IN,Kd,SpecExpon,Kr,

EnvSampler,LampColor,AmbiColor,

diffContrib,specContrib);

float3 result = SurfaceColor * (specContrib + diffContrib);

return float4(result,1);

}

float4 metalPS_t(vertexOutput IN,

uniform float3 SurfaceColor,

uniform sampler2D ColorSampler,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

metal_shared(IN,Kd,SpecExpon,Kr,

EnvSampler,LampColor,AmbiColor,

diffContrib,specContrib);

float3 map = tex2D(ColorSampler,IN.UV).xyz;

float3 result = SurfaceColor * map * (specContrib + diffContrib);

return float4(result,1);

}

float4 metalQPS(vertexOutput IN,

uniform float3 SurfaceColor,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float LampIntensity,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

float3 Cl = (LampIntensity/dot(IN.LightVec.xyz,IN.LightVec.xyz)) * LampColor;

metal_shared(IN,Kd,SpecExpon,Kr,

EnvSampler,Cl,AmbiColor,

diffContrib,specContrib);

float3 result = SurfaceColor * (specContrib + diffContrib);

return float4(result,1);}

float4 metalQPS_t(vertexOutput IN,

uniform float3 SurfaceColor,

uniform sampler2D ColorSampler,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float LampIntensity,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

float3 Cl = (LampIntensity/dot(IN.LightVec.xyz,IN.LightVec.xyz)) * LampColor;

metal_shared(IN,Kd,SpecExpon,Kr,

EnvSampler,Cl,AmbiColor,

diffContrib,specContrib);

float3 map = tex2D(ColorSampler,IN.UV).xyz;

float3 result = SurfaceColor * map * (diffContrib+specContrib);

return float4(result,1);}

/// TECHNIQUES ////////////////////////

#if 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 <

string Script = "Pass=p0;";

> {

pass p0 <

string Script = "Draw=geometry;";

> {

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 <

string Script = "Pass=p0;";

> {pass p0 <

string Script = "Draw=geometry;";

> {

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 <

string Script = "Pass=p0;";

> { pass p0 <

string Script = "Draw=geometry;";

> {

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 <

string Script = "Pass=p0;";

> {

pass p0 <

string Script = "Draw=geometry;";

> {

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 <

string Script = "Pass=p0;";

> { pass p0 <

string Script = "Draw=geometry;";

> {

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 <

string Script = "Pass=p0;";

> {

pass p0 <

string Script = "Draw=geometry;";

> {

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 <

string Script = "Pass=p0;";

> {

pass p0 <

string Script = "Draw=geometry;";

> {

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,gLamp0Intensity,

gAmbiColor)));

SetRasterizerState(DisableCulling);

SetDepthStencilState(DepthEnabling, 0);

SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}

#endif /* DIRECT3D_VERSION >= 0xa00 */

technique TexturedFalloff <

string Script = "Pass=p0;";

> {pass p0 <

string Script = "Draw=geometry;";

> {

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_t(gSurfaceColor,gColorSampler,

gKd,gSpecExpon,gKr,

gEnvSampler,

gLamp0Color,gLamp0Intensity,

gAmbiColor);

}

}

Размещено на Allbest.ru


Подобные документы

  • Основы программирования на языке VB.NET. Область применения трехмерных изображений. Форматы хранения пакетов инженерной графики. Преимущества трехмерного моделирования. Разработка программы по вращению трехмерных изображений на языках VB.NET и VRML.

    курсовая работа [195,1 K], добавлен 11.03.2013

  • Методы создания двумерных и трехмерных изображений. Классификация средств компьютерной графики и анимации. Системы для работы с видео и компоновки. Обзор программных продуктов для создания презентаций, двумерной и трехмерной анимации, 3D-моделирования.

    реферат [30,5 K], добавлен 25.03.2015

  • Технология компьютерной графики, форматы графических файлов. Общие сведения о компании и программных продуктах Adobe Systems Inc, элементы интерфейса. Краткое описание учебника Adobe Photoshop CS3, программное обеспечение, используемое для его создания.

    дипломная работа [32,1 K], добавлен 23.06.2010

  • Описание и изучение техники построения плоских и трехмерных изображений чертежей машиностроительных деталей средствами компьютерной графики: втулка, гайка, штуцер. Выполнение упрощенного теоретического чертежа судна на плоскости: бок, корпус, полуширота.

    курсовая работа [832,6 K], добавлен 15.08.2012

  • Назначение компьютерной графики. Особенности трехмерной анимации. Технология создания реалистичных трехмерных изображений. Компьютерная графика для рисования на SGI: StudioPaint 3D. Пакет PowerAnimator как одна из программ трехмерной анимации на SGI.

    реферат [25,7 K], добавлен 31.03.2014

  • Понятие компьютерной графики. Представление графической информации в компьютере. Графические форматы и редакторы. Характеристика программы, интерфейса. Возможности использования программы CorelDraw. Возможности создания сложных графических изображений.

    дипломная работа [1,1 M], добавлен 04.01.2011

  • Виды компьютерной графики. Photoshop – программа для создания и обработки растровой графики. Пакет программ для работы с векторной графикой CorelDraw. Обработка растровых изображений с использованием Photoshop. Этапы создания коллажа на тему "Музыка".

    курсовая работа [2,3 M], добавлен 27.12.2014

  • Методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов. Основные понятия компьютерной графики. Особенности применения растровой, векторной и фрактальной графики. Обзор форматов графических данных.

    реферат [49,1 K], добавлен 24.01.2017

  • Рассмотрение понятия компьютерной графики; характеристика ее видов - растровой, векторной, фрактальной, трехмерной. Описание интерфейса и основных инструментов графического программного обеспечения - Adobe Photoshop, Corel Draw, Autodesk 3ds Max.

    реферат [387,8 K], добавлен 02.01.2012

  • Характеристика программы векторной графики CorelDRAW 12, ее новые возможности, дополнительные функции и инструменты. Специфика векторных и растровых изображений. Требования к компьютеру, рабочая среда и элементы интерфейса. Работа с файлами и их форматы.

    учебное пособие [49,6 K], добавлен 18.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.