Современные технологии компьютерной графики - Программирование, компьютеры и кибернетика курсовая работа

Современные технологии компьютерной графики - Программирование, компьютеры и кибернетика курсовая работа




































Главная

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

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


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


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

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

Курсовая работа посвящена изучению современных технологий компьютерной графики, а именно программированию шейдеров высокого уровня. Она направлена на получение начальных знаний о шейдерах написанных на высокоуровневом языке и современных методах создания реалистичных 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.
Аппаратные требования: видеокарта - 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
Текстура была скачана с официального репозитория текстур nVidia.
Программу для работы с шейдерами можно скачать с официального сайта nVidia http://developer.download.nvidia.com. После установки запускать ярлыком с рабочего стола или из меню «Пуск». Более подробная информация дана далее в описании интерфейса.
Дополнительную информацию можно получить на сайте указанном выше, там можно найти подробный мануал по созданию шейдеров на английском языке.
После запуска программы появляется окно предлагающее создать новый проект, открыть проект, открыть недавние проекта, а так же несколько полезных ссылок на гайд по программированию шейдеров и форуму разработчиков.
После выбора готового проекта открывается интерфейс разработчика (т.к. именно он был включен для удобства разработки во время последнего запуска).
В левой части окна можно видеть окна навигации по текстурам и материалам, в центральной - пустое окно для редактирования кода, которое заполнится текстом после выбора текстуры или материала, которые необходимо отредактировать, а в правой части окно свойств и моя законченная модель. Чтобы дать пользователю более комфортный режим работы с моделью необходимо переключится в режим PowerUser: Edit - Layouts - PowerUser.
В таком режиме в левой части экрана располагается библиотека текстур и материалов 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 отображает отражения и тени на лицевой стороне модели.
Изображение, полученное с помощью шейдеров:
шейдер трехмерный изображение программа
В результате работы я получил базовые знания в области создания трехмерных изображений с помощью шейдеров. С разрешения преподавателя использовал заранее готовую модель и текстуру, и после изучения начальных аспектов темы с помощью программы FX Composer совместил текстуру с моделью, выставил источник света и выбрал ракурс, с которого получил двухмерное изображение приложенное выше. При дальнейшем самостоятельном изучении компьютерной графики я планирую глубже разобраться в заинтересовавшей меня теме, получить навыки в создании 3D моделей и текстур в различных редакторах.
1. http://ru.wikipedia.org/wiki/HLSL
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 */
int ParamID = 0x0003;/* Used by Max to select the correct parser */
#define Main Static/* Technique name used for export to XNA */
#ifndef FXCOMPOSER_VERSION/* for very old versions */
#define FLIP_TEXTURE_Y/* Different in OpenGL & DirectX */
/*** EFFECT-SPECIFIC CODE BEGINS HERE *********************/
/** To use "Object-Space" lighting definitions, change these two macros: **/
// #define OBJECT_SPACE_LIGHTS /* Define if LIGHT_COORDS is "Object" */
// string Script = "Technique=Technique?Simple:Simple10:Textured:Textured10:SimpleFalloff:SimpleFalloff10:TexturedFalloff:TexturedFalloff10;";
/**** 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 **************/
float4 gLamp0DirPos: POSITION < // or direction, if W==0
string UIName = "Lamp 0 Position/Direction";
string UIName = "Lamp 0 Quadratic Intensity";
string UIName = "Specular Exponent";
string ResourceName = "default_color.dds";
sampler2D gColorSampler = sampler_state {
#else /* DIRECT3D_VERSION < 0xa00 */
string ResourceName = "default_reflection.dds";
samplerCUBE gEnvSampler = sampler_state {
#else /* DIRECT3D_VERSION < 0xa00 */
/************* DATA STRUCTS **************/
/* data from application vertex buffer */
/* data passed from vertex shader to pixel shader */
// 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.
/*********** vertex shader for pixel-shaded versions ******/
/*********** Generic Vertex Shader ******/
uniform float4x4 WorldITXf, // our four standard "untweakable" xforms
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
float4 Lw = mul(LampDirPos,WorldXf);// convert to "world" space
#else /* !OBJECT_SPACE_LIGHTS -- standard world-space lights */
// we are still passing a (non-normalized) vector
OUT.UV = float2(IN.UV.x,(1.0-IN.UV.y));
OUT.WorldView = normalize(ViewIXf[3].xyz - Pw.xyz);
float3 Ln = normalize(IN.LightVec.xyz);
float3 Nn = normalize(IN.WorldNormal);
float3 Vn = normalize(IN.WorldView);
float4 litV = lit(dot(Ln,Nn),dot(Hn,Nn),SpecExpon);
DiffuseContrib = litV.y * Kd * LightColor + AmbiColor;
SpecularContrib = litV.z * LightColor;
float3 ReflectionContrib = Kr * texCUBE(EnvSampler,reflVect).rgb;
SpecularContrib += ReflectionContrib;
float3 result = SurfaceColor * (specContrib + diffContrib);
float3 map = tex2D(ColorSampler,IN.UV).xyz;
float3 result = SurfaceColor * map * (specContrib + diffContrib);
float3 Cl = (LampIntensity/dot(IN.LightVec.xyz,IN.LightVec.xyz)) * LampColor;
float3 result = SurfaceColor * (specContrib + diffContrib);
float3 Cl = (LampIntensity/dot(IN.LightVec.xyz,IN.LightVec.xyz)) * LampColor;
float3 map = tex2D(ColorSampler,IN.UV).xyz;
float3 result = SurfaceColor * map * (diffContrib+specContrib);
/// TECHNIQUES ////////////////////////
// Standard DirectX10 Material State Blocks
RasterizerState DisableCulling {CullMode = NONE;};
DepthStencilState DepthEnabling {DepthEnable = TRUE;};
BlendState DisableBlend {BlendEnable[0] = FALSE;};
SetVertexShader(CompileShader(vs_4_0, std_dp_VS(gWorldITXf,gWorldXf,
SetPixelShader(CompileShader(ps_4_0, metalPS(gSurfaceColor,
SetRasterizerState(DisableCulling);
SetDepthStencilState(DepthEnabling, 0);
SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}
#endif /* DIRECT3D_VERSION >= 0xa00 */
VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf,
PixelShader = compile ps_3_0 metalPS(gSurfaceColor,
SetVertexShader (CompileShader (vs_4_0, std_dp_VS (gWorldITXf,gWorldXf,
SetPixelShader(CompileShader(ps_4_0, metalPS_t(gSurfaceColor,gColorSampler,
SetRasterizerState(DisableCulling);
SetDepthStencilState(DepthEnabling, 0);
SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}
#endif /* DIRECT3D_VERSION >= 0xa00 */
VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf,
PixelShader = compile ps_3_0 metalPS_t(gSurfaceColor,gColorSampler,
SetVertexShader(CompileShader(vs_4_0, std_dp_VS(gWorldITXf,gWorldXf,
SetPixelShader(CompileShader(ps_4_0, metalQPS(gSurfaceColor,
SetRasterizerState(DisableCulling);
SetDepthStencilState(DepthEnabling, 0);
SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);
#endif /* DIRECT3D_VERSION >= 0xa00 */
VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf,
PixelShader = compile ps_3_0 metalQPS(gSurfaceColor,
SetVertexShader(CompileShader(vs_4_0, std_dp_VS(gWorldITXf,gWorldXf,
SetPixelShader(CompileShader(ps_4_0, metalQPS_t(gSurfaceColor,gColorSampler,
SetRasterizerState(DisableCulling);
SetDepthStencilState(DepthEnabling, 0);
SetBlendState(DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}
#endif /* DIRECT3D_VERSION >= 0xa00 */
VertexShader = compile vs_3_0 std_dp_VS(gWorldITXf,gWorldXf,
PixelShader = compile ps_3_0 metalQPS_t(gSurfaceColor,gColorSampler,
Основы программирования на языке 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
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Современные технологии компьютерной графики курсовая работа. Программирование, компьютеры и кибернетика.
Дипломная работа по теме Особенности организации творческой деятельности младших школьников на уроках технологии
Сочинение Отцы России
Реферат: Surface Currents Essay Research Paper In the
Курсовая работа по теме Формування творчої активностi школярів загальноосвiтньої школи на уроках музичного мистецтва
Структура гап.
Реферат: Character Analysis Of Prospero In The Tempest
Реферат по теме Осип Мандельштам
Курсовая работа по теме Операции инвестиционных банков и компаний
Почему Я Люблю Войну Сочинение
Шпаргалка: Современная наука философия, ее учения и концепции
Курсовой По Изысканиям Новая Линия
Реферат: Антигуа и Барбуда
Виды Ревизий Реферат
Контрольная Работа По Английскому 6
Курсовая работа по теме Технико-экономическое обоснование создания рекламного агентства в г. Киров
Реферат: Нравственные ценности ислама: наука и искусство
Экономическая сущность, содержание и состав доходов и расходов организации
Курсовая работа по теме Основы линейной алгебры на примере балансовой модели
Реферат по теме Динамика численности населения в странах ЕС
Реферат Основы Деонтологии
Определение роли и места PR технологии в режиссуре театрализованного представления и праздника - Маркетинг, реклама и торговля дипломная работа
Культура Киевской Руси - Культура и искусство реферат
Товароведческая экспертиза и оценка качества кофе - Маркетинг, реклама и торговля курсовая работа


Report Page