Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как вертеть в D3d не весь мир?

5.1K
07 марта 2006 года
Fess exe
19 / / 21.05.2004
Я недавно начал использовать D3D, и поэтому до сих пор не понимаю, как повернуть обьект, не поворачивая весь мир. Я так понял, что матрицы действуют сразу на все вектора, так что не ясно, как, например создать два вращающихся в разные стороны треугольника.
5.1K
09 марта 2006 года
Fess exe
19 / / 21.05.2004
Я думаю, может нарисовать сначала один обьект, потом мир повернуть, а потом нарисовать второй. Я прав?
6.5K
10 марта 2006 года
a.k.a Throne
39 / / 07.08.2005
Элементарно Ватсон, сделаем тебе два вращающихся треугольника, не вращая мир(На паскале):

//Device - 3D-устройство, интерфейс //IDirect3DDevice8 или 9

//Процедура в которой будем рисовать треугольники
var
//Угол (радианы)
angle:single=0;
procedure DrawTriangles(Device:IDirect3DDevice9);
var
//Матрицы
Rotation,Translation,mat,save:TD3DMatrix;
begin
//Берем текущую матрицу мира
Device.GetTransform(save);
//Вращаем матрицу по оси Y
angle:=angle+0.05;
if angle>2*pi then angle:=0;
D3DXMatrixRotationY(Rotation,angle);
//... и чуть справа от начала координат
D3DXMatrixTranslation(Translation,3,0,0);
//Складываем матрицы
D3DXMatrixMultiply(mat,Translation,Matrix);
//Устанавливаем матрицу
Device.SetTransform(mat);
//Рисуем трегольник
Device.DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
//Вращаем матрицу по оси Y, но уже в обратную
//сторону и слева от начала координат
D3DXMatrixRotationY(Rotation,-angle);
D3DXMatrixTranslation(Translation,-3,0,0);
//Складываем матрицы
D3DXMatrixMultiply(mat,Translation,Matrix);
//Устанавливаем матрицу
Device.SetTransform(mat);
//Рисуем трегольник
Device.DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
//Устанавливаем матрицу мира
device.SetTransform(save);
end;


За счет вызова функций GetTransform(save) и
SetTransform(save) и происходит вращение двух треугольников в разные стороны, не поворачивая мир.
5.1K
11 марта 2006 года
Fess exe
19 / / 21.05.2004
Ага, спасибо. Сейчас попробую использовать. Но всё-таки, что же делает SetTransform? Оно действует на все вектора или нет? Если да, то это наверное, весьма тормознуто, если надо повернуть маленький кубик на огромном поле. Есть ли встроенные функции для поворота объекта до его отображения, то есть изменения коородинат самих векторов объекта в памяти?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог