Пятница, 22.08.2025, 02:27
Приветствую Вас Гость | RSS
Поиск
Главная | Каталог статей | Регистрация | Вход
Direct3D. Разработка игр
Форма входа
Меню сайта

Категории каталога
Мои статьи [3]
Ваши статьи [37]
Сюда вы можете выставлять свои статьи (только для зарегистрированных пользователей)

Друзья сайта

Наш опрос
Как вам этот сайт?
Всего ответов: 188

Кто онлайн

Статистика

Главная » Статьи » Ваши статьи

Основы HLSL
HLSL основы.
Итак, во многих играх мы видим реалистичный ландшафт, воду тени и т.д. И все это делает шейдер. Давайте же разберемся, что за монстр та такой этот шейдер. Существует два вида шейдера: вершинный и пиксельный. Вершинный шейдер предназначен, как следует из названия, для работы с набором вершин. В нем будут производится трансформации и освещение вершин. Пиксельный шейдер предназначен для финального расчета цвета каждой точки сцены. Он заменяет процесс мультитекстурирования в пиксельном конвейере Direct3D. Ни вершинный, ни пиксельный шейдер не имеют представления о данных, поступающих в них. Итак, начнем изучать этот язык:
• bool – true или false
• int – целое число
• half – 16 битное дробноем число
• float – 32 битное дробное число
• double – 64 битное дробное число
 
Объявление переменных происходит как в C++ :
Float angle;
Float bias = 0.5;
Int index;
Int indexarray[3] = {1,2,3};
 
Также можем добовлять к переменным static или extern Первый делает переменную статичную (нельзя изменять ее), второй наоборот. Объявляются так:
static int index;
extern int ui;
вектор задается так:
vector direction; или float3 direction; или float direction[3];
матрицы объявляются подобным образом:
matrix transform; float2x2 transform;
структуры могут состоять из величин различных типов:
struct VS_OUTPUT { Float4 pos: position; Float4 diffuse: color; };
 
Операторы такие же как в c++: =, +=, -+, *=, /=, !, +, -, *, /, %, &&, ||, ?, <, >, !=, ==, <=, >=, ++, --, ., [] , (); Основные функции(не все):
Cos(x) – косинус x
Sin(x) – синус x
Distance(a,b) – растоянме между a и b
Dot(x, y) – вычисление dot prodact между двумя векторами x и y
Faceforward(n,I,g) – проверка видимости полигона
Frac(x) – возвращает дробную часть x
Length(x) – возвращает длину вектора
Max(a,b) – максимум
Min(a,b) – минимум
Mul(a,b) – умножает матрицы
Sqrt(x) – квадратный корень
Tex2d(s,t) – чтение из 2d текстуры И другие.
 
Повторяюсь здесь представлен не полный список функций. Вот собственно и все по теории. Теперь перейдем к практике, напишем простейший шейдер:
 
Float4x4 matWorldViewProject; //произведение всех матриц(World, ViewMatrix, ProjectMatrix)
Struct VS_Input { Float4 pos: POSITION; };
Struct VS_Output { Float4 pos: POSITION; };
VS_Output main(VS_Input in)
{
    VS_Output Out = (VS_Output)0;
    Out.Pos = mul(In.pos, matWorldViewProject);
    Return Out;
};
 
Ну вот очень простой шейдер, после применения которого объект станет белым, т.е. станет игнорировать свет. Ну вот в принципы и все.
Категория: Ваши статьи | Добавил: Svake (09.02.2008)
Просмотров: 3207 | Комментарии: 5 | Рейтинг: 2.5/4 |
Всего комментариев: 2
2 Виталий Серов  
0
http://serovsoft.0fees.net/ - поддержите мой сайт своим посещением

1 marple  
0
Рад был почитать.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Doom†Cross Software ® 2025
Создать бесплатный сайт с uCoz