Цитата:
2. Возможно ли вместо родных трансформаций, типа device.Transform использовать шейдеры для трансформации объектов, и если можно, то какой из способов будет быстрее работать. И еще, можно ли писать шейдеры непосредственно в программе?
Можно. Вот пример шейдера, который выполняет трансформацию.
// Матрица преобразования. Инициализируем ее из приложения
matrix ViewProjMatrix;
//
// Структуры
//
// Входная структура описывает вершины, которые будут
// передаваться в шейдер. Здесь входная вершина содержит
// только данные о местоположении.
struct VS_INPUT
{
vector position : POSITION;
};
// Выходная структура описывает вершину, которая
// возвращается шейдером. Здесь выходная вершина
// содержит данные о местоположении
struct VS_OUTPUT
{
vector position : POSITION;
};
//
// Собственно шейдер
//
VS_OUTPUT Main(VS_INPUT input)
{
// Обнуляем данные выходной вершины
VS_OUTPUT output = (VS_OUTPUT)0;
// Преобразование
output.position = mul(input.position, ViewProjMatrix);
// Возвращаем преобразованную вершину
return output;
}
Соответственно мы можете динамически генерировать код шейдера в программе (в виде текстовой строки), а затем из программы же компилировать его.