zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« : 05-02-2009 20:06 » |
|
Вот я и подошёл к изучению 3D объектов.ЗадачаДелаю куб с буфером индексов и без z-буфера. Хочу чтобы он вертелся вокруг своего центра по оси Y. А у меня он начинает вертется как буд-то во круг какого-то другого объекта. Вот часть кода// Глобальная переменная DWORD OneTick = 0;
// Установка матриц преобоазования void Matrix(void) { // Мировая матрица D3DXMATRIX MatrixWorld; // Матрица вида D3DXMATRIX MatrixView; //матрица проекции D3DXMATRIX MatrixProjection; float fAngle; float BeginAngle; float rps; UINT iTime; BeginAngle = D3DX_PI/4.0f; rps = 0.05f; iTime = GetTickCount();
if(!OneTick) OneTick = iTime; fAngle = BeginAngle + (iTime - OneTick) * (D3DX_PI * 2.0f * rps / 1000.0f); // Поворот мировой матрицы MatrixWorldRotation D3DXMatrixRotationY(&MatrixWorld, fAngle);
// Устанавливаем мировую матрицу pDirect3DDevice->SetTransform(D3DTS_WORLD, &MatrixWorld);
// Изменяем видовую матрицу D3DXMatrixLookAtLH(&MatrixView, // полученная в итоге видовая матрица &D3DXVECTOR3(0.0f, 0.0f, 80.0f), // точка, из которой смотрим &D3DXVECTOR3(0.0f, 0.0f, 0.0f), // куда смотрим &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); // направление верха // Устанавливаем видовую матрицу pDirect3DDevice->SetTransform(D3DTS_VIEW, &MatrixView); // Изменяем матрицу проекции D3DXMatrixPerspectiveFovLH(&MatrixProjection, // полученная итоговая матрица проекции D3DX_PI/4, // поле зрения в направлении оси Y в радианах 1.54f, // соотношения сторон экрана 770/500=1.54 10.0f, // передний план отсечения сцены 200.0f); // задний план отсечения сцены // Устанавливаем матрицу проекции pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &MatrixProjection); }
Что я делаю не так, помогите пожалуйста разобраться.Для лучшего понимания проблемы прикрепляю архив Cube3DnotZ-buffer.rar который содержит два файла: 1. Cube3DnotZ-buffer.cpp код программы 2. Cube3DnotZ-buffer.exe исполняемый файл
|
|
« Последнее редактирование: 11-02-2009 08:00 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 06-02-2009 04:52 » |
|
подозреваю, что вращать надо не миром, а кубом, то есть относительно центра куба менять кообдинаты вертиксов куба. Функции щас не найду, но должны быть для поворота
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #2 : 06-02-2009 05:14 » |
|
Странно, но в примере из книги автора Станислава Горнакова "DirectX 9: Уроки программирования на С++" вертится мировая матрица и куб при этом нормально вращается.
Для лучшего понимания проблемы прикрепляю архив Cube3DnotZ-buffer.rar который содержит два файла: 1. Cube.cpp код программы (в начало кода добавлен код для компиляции в Borland C++ Builder 5.5, а остальное всё как в книге) 2. Cube.exe исполняемый файл
|
|
« Последнее редактирование: 11-02-2009 08:00 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 06-02-2009 05:19 » |
|
дык а фигли ) CUSTOMVERTEX Vertices[]=//создаём массив вершин и инициализируем его { {1.0f, -1.0f, -1.0f, 0x00345800f}, // A1 {-1.0f, -1.0f, -1.0f, 0x0097FF00f}, // B1 {-1.0f, 1.0f, -1.0f, 0x00538C00f}, // C1 {1.0f, 1.0f, -1.0f, 0x00538C00f}, // D1
{-1.0f, -1.0f, 1.0f, 0x00345800f}, // A2 {-1.0f, -1.0f, -1.0f, 0x0097FF00f}, // B2 {-1.0f, 1.0f, -1.0f, 0x00538C00f}, // C2 {-1.0f, 1.0f, 1.0f, 0x00538C00f}, // D2
{1.0f, -1.0f, 1.0f, 0x00345800f}, // A3 {-1.0f, -1.0f, 1.0f, 0x0097FF00f}, // B3 {-1.0f, 1.0f, 1.0f, 0x00538C00f}, // C3 {1.0f, 1.0f, 1.0f, 0x00538C00f}, // D3
{1.0f, -1.0f, -1.0f, 0x00345800f}, // A4 {1.0f, -1.0f, 1.0f, 0x0097FF00f}, // B4 {1.0f, 1.0f, 1.0f, 0x00538C00f}, // C4 {1.0f, 1.0f, -1.0f, 0x00538C00f}, // D4
{1.0f, 1.0f, 1.0f, 0x00345800f}, // A5 {-1.0f, 1.0f, 1.0f, 0x0097FF00f}, // B5 {-1.0f, 1.0f, -1.0f, 0x00538C00f}, // C5 {1.0f, 1.0f, -1.0f, 0x00538C00f}, // D5
{1.0f, -1.0f, 1.0f, 0x00345800f}, // A6 {-1.0f, -1.0f, 1.0f, 0x0097FF00f}, // B6 {-1.0f, -1.0f, -1.0f, 0x00538C00f}, // C6 {1.0f, -1.0f, -1.0f, 0x00538C00f}, // D6 };
на бумаге не чертил, но интуитивно догадываюсь, что центр куба - (0,0,0). А у тебя - центр куба смещён относительно центра мира. Либо надо как-то вращать мир вокруг центра куба (не разбирался ещё, так же подсказать точно не смогу...)
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #4 : 06-02-2009 05:44 » |
|
Понятно. А я решил в графической программе нарисовать куб и экспортировать в файл с расширением wrl, что бы самому куб не чертить а координаты куба в wrl файле посмотреть, но я не учёл того что центр куба смещён относительно центра мира.
Конешно в книге плохой пример приведён в ней координаты центра куба равены координатам центра мира. А что будет если на экране несколько объектов, так что этот вариант из книги мне не подходит.
Так что буду разбиратся с вращанием мировой матрицы вокруг центра куба.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 06-02-2009 06:00 » |
|
zuze, на пример ругаться не стОит, дело в другом: автор показал использование "общих" настроек мира, а так же чтобы читатель попрактиковался с работой с матрицами. Обычно же мир вряд ли вращают, вращают камеры и объекты. А раз два объекта должны двигаться относительно друг друга - какой смысл вертеть весь мир ? ) Так что буду разбиратся с вращанием мировой матрицы вокруг центра куба.
так что надо разбираться с вращением объекта вокруг заданной оси
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #6 : 06-02-2009 16:29 » |
|
Пока нашёл вращение камеры, а про вращения самих объектов ни слова. Может это не возможно?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 06-02-2009 17:06 » |
|
zuze, да как невозможно то, что мешает менять координаты - легко
Vertices[0].x+=5;
только все вершины надо одинаково повернуть вокруг 3 осей. Формулы типа таких : вокруг оси Z, например
Vertices[0].x = Vertices[0].x * cos(Angle) – Vertices[0].y * sin(Angle); Vertices[0].y = Vertices[0].x * sin(Angle) + Vertices[0].y * cos(Angle);
но по идее должны быть функции, которые это делают, а может их и нету ) Ищи. Я порылся, но так сразу не нашёл тоже
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #8 : 06-02-2009 20:31 » |
|
Я как раз про функции говорил. Я так понял для нормального вращения вокруг собственной оси Y нужно сделать так?for (i = 0; i < 24; i++) { Vertices[i].z +=5; Vertices[i].x = Vertices[i].x * cos(Angle) – Vertices[i].y * sin(Angle); Vertices[i].y = Vertices[i].x * sin(Angle) + Vertices[i].y * cos(Angle); }
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #9 : 06-02-2009 22:33 » |
|
Ну тригометрические функции очень тяжелые в вычислении. Я бы постарался бы их заменить, а тем более в цикле.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #10 : 07-02-2009 06:02 » |
|
Есть идея объект поместить в центр координат в независимости где объект находится на сцене, а после повернуть, а после поворота переместить назад. Вот код в котором я пока ещё не возвращаю назад объект, но он почемуто не крутится вокрук собственной оси, а крутится во круг другой точки// Установка матриц преобоазования void Matrix(void) { // Мировая матрица D3DXMATRIX MatrixWorld; // Матрица перемещения D3DXMATRIX MatrixTranslation; // Матрица вращения D3DXMATRIX MatrixRotation; // Матрица вида D3DXMATRIX MatrixView; //матрица проекции D3DXMATRIX MatrixProjection; // Ось вращения - вектор D3DXVECTOR3 axis; float fAngle; float BeginAngle; float rps; UINT iTime; D3DXMatrixIdentity(&MatrixWorld); BeginAngle = D3DX_PI/4.0f; rps = 0.05f; iTime = GetTickCount();
if(!OneTick) OneTick = iTime; fAngle = BeginAngle + (iTime - OneTick) * (D3DX_PI * 2.0f * rps / 1000.0f);
// Поворот D3DXMatrixRotationY(&MatrixRotation, fAngle); // Перемещаем мировую матрицу D3DXMatrixTranslation(&MatrixTranslation, 0.0f, 0.0f, 0.0f); D3DXMatrixMultiply(&MatrixWorld, &MatrixTranslation, &MatrixRotation); pDirect3DDevice->SetTransform(D3DTS_WORLD, &MatrixWorld);
// Изменяем видовую матрицу D3DXMatrixLookAtLH(&MatrixView, // полученная в итоге видовая матрица &D3DXVECTOR3(0.0f, 0.0f, 80.0f), // точка, из которой смотрим &D3DXVECTOR3(0.0f, 0.0f, 0.0f), // куда смотрим &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); // направление верха // Устанавливаем видовую матрицу pDirect3DDevice->SetTransform(D3DTS_VIEW, &MatrixView); // Изменяем матрицу проекции D3DXMatrixPerspectiveFovLH(&MatrixProjection, // полученная итоговая матрица проекции D3DX_PI/4, // поле зрения в направлении оси Y в радианах 1.54f, // соотношения сторон экрана 770/500=1.54 10.0f, // передний план отсечения сцены 200.0f); // задний план отсечения сцены // Устанавливаем матрицу проекции pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &MatrixProjection); }
|
|
« Последнее редактирование: 07-02-2009 15:33 от zuze »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 07-02-2009 06:14 » |
|
zuze, а смысл. У тебя щас всего один объект, сделай второй - сразу поймёшь, что миром вращать бесполезно
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #12 : 07-02-2009 08:17 » |
|
Ну первое, что бы я сделал. Вывел бы вычисление sin(Angle) и cos(Angle) из цикла. Что то типа этого double sinA = sin(Angle); double cosA = cos(Angle); for (i = 0; i < 24; i++) { Vertices[i].z +=5; Vertices[i].x = Vertices[i].x * cosA – Vertices[i].y * sinA; Vertices[i].y = Vertices[i].x * sinA + Vertices[i].y * cosA; }
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 07-02-2009 09:24 » |
|
ээээ, Vertices[i ].z +=5; не надо для вращения , это я для примера ляпнул )) и, кстати, не Vertices[i].x = Vertices[i].x * cosA – Vertices[i].y * sinA; Vertices[i].y = Vertices[i].x * sinA + Vertices[i].y * cosA;
а float x = Vertices[i].x; Vertices[i].x = x * cosA – Vertices[i].y * sinA; Vertices[i].y = x * sinA + Vertices[i].y * cosA;
ведь во второй формуле Vertices[i ].x тоже используется, а его в первой формуле уже изменили
|
|
« Последнее редактирование: 07-02-2009 09:27 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 07-02-2009 09:41 » |
|
о, и самое то главное. Если хотим вращать вокруг оси, параллельной Z и проходящей через X=X0, Y=Y0, то float x = Vertices[i].x-X0; float y = Vertices[i].y-Y0;
Vertices[i].x =X0 + x * cosA – y * sinA; Vertices[i].y =Y0 + x * sinA + y * cosA;
вроде так )
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #15 : 07-02-2009 15:34 » |
|
zuze, а смысл. У тебя щас всего один объект, сделай второй - сразу поймёшь, что миром вращать бесполезно
Хотя я думаю для каждого объекта своя мировая матрица, то есть если допустим в редеринге сделать два объекта, тогда нужны две разные функции установка матриц преобоазования, хотя может я и не прав. А на счёт моего кода я его в ответе №10 подправил, но всё равно не работает, мне кажется из-за того что я не правельно задал координаты у меня там 0.0f, 0.0f, 0.0f а это единичная матрица при перемножении результат не меняется, а какие нужны координаты я не понимаю. Хотя Вы говорите что мировая матрица общая, специально сделаю два куба, и две разных функции матрицы преобразования, если мировая матрца общая объекты (кубы) должны себя одинакого себя вести.
|
|
« Последнее редактирование: 07-02-2009 15:41 от zuze »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 07-02-2009 19:26 » |
|
zuze, хм, ты прав, меня вот сейчас тоже вдруг осенило - зачем вращать отдельно объект, когда это сделает видюха:
для 1 объекта поворачиваем-двигаем мир (мартицу делаем) , выводим , потом для второго объекта - свои действия (другая матрица) , выводим. Так наверное ?
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #17 : 07-02-2009 20:01 » |
|
Я так понял у меня не работает пример из ответа №10 из-за того что в строчке D3DXMatrixTranslation(&MatrixTranslation, 0.0f, 0.0f, 0.0f); Не правельные координаты. Вопрос как найти нужные координаты?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 07-02-2009 21:05 » |
|
центр твоего куба ?
x = (xmax+xmin)/2; y = (ymax+ymin)/2; z = (zmax+zmin)/2;
(исправил формулы)
|
|
« Последнее редактирование: 07-02-2009 22:04 от Алексей1153++ »
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #19 : 07-02-2009 21:30 » |
|
Я пощитал x = 2.5f, y = 2.5f, z = 2.5f А всёравно вращается вокруг другой точки, а не вокруг своей оси // Установка матриц преобоазования void Matrix(void) { // Мировая матрица D3DXMATRIX MatrixWorld; // Матрица перемещения D3DXMATRIX MatrixTranslation; // Матрица вращения D3DXMATRIX MatrixRotation; // Матрица вида D3DXMATRIX MatrixView; //матрица проекции D3DXMATRIX MatrixProjection; // Ось вращения - вектор D3DXVECTOR3 axis; float fAngle; float BeginAngle; float rps; UINT iTime; D3DXMatrixIdentity(&MatrixWorld); BeginAngle = D3DX_PI/4.0f; rps = 0.05f; iTime = GetTickCount();
if(!OneTick) OneTick = iTime; fAngle = BeginAngle + (iTime - OneTick) * (D3DX_PI * 2.0f * rps / 1000.0f);
// Поворот D3DXMatrixRotationY(&MatrixRotation, fAngle); // Перемещаем мировую матрицу D3DXMatrixTranslation(&MatrixTranslation, 2.5f, 2.5f, 2.5f); D3DXMatrixMultiply(&MatrixWorld, &MatrixTranslation, &MatrixRotation); // Устанавливаем мировую матрицу pDirect3DDevice->SetTransform(D3DTS_WORLD, &MatrixWorld);
// Изменяем видовую матрицу D3DXMatrixLookAtLH(&MatrixView, // полученная в итоге видовая матрица &D3DXVECTOR3(0.0f, 0.0f, 80.0f), // точка, из которой смотрим &D3DXVECTOR3(0.0f, 0.0f, 0.0f), // куда смотрим &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); // направление верха // Устанавливаем видовую матрицу pDirect3DDevice->SetTransform(D3DTS_VIEW, &MatrixView); // Изменяем матрицу проекции D3DXMatrixPerspectiveFovLH(&MatrixProjection, // полученная итоговая матрица проекции D3DX_PI/4, // поле зрения в направлении оси Y в радианах 1.54f, // соотношения сторон экрана 770/500=1.54 10.0f, // передний план отсечения сцены 200.0f); // задний план отсечения сцены // Устанавливаем матрицу проекции pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &MatrixProjection); }
Чтоже опять не так?
|
|
« Последнее редактирование: 11-02-2009 08:02 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #20 : 07-02-2009 22:03 » |
|
ой, я, кстати, нагнал, ценрр же
x = (xmax+xmin)/2; y = (ymax+ymin)/2; z = (zmax+zmin)/2;
тогда D3DXMatrixTranslation(&MatrixTranslation, -5, -4, -4.1);
(y=-4 - это для наглядности, чтобы верхнюю грань было видно)
|
|
« Последнее редактирование: 07-02-2009 22:05 от Алексей1153++ »
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #21 : 07-02-2009 22:13 » |
|
Да, теперь вертится вокруг своей оси. А Вы могли объяснить по потробней почему такие координаты получились?
Ведь по формуле выходит так x = 5.0f, y = 0.6f, z = 4.1f.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 07-02-2009 22:22 » |
|
zuze, тут всё просто, если центр куба - в точке x0,y0,z0 , то, чтобы совместить центр мира (0,0,0) с этой точкой, нужно от координат мира отнять координаты точки:
x= 0-x0 = 0-5 = -5 y= 0-y0 = 0-0.6 = -0.6 z= 0-z0 = 0-4.1 = -4.1
наш сдвиг: D3DXMatrixTranslation(&MatrixTranslation, -5, -0.6, -4.1);
но, так как вращение происходит у тебя вокруг оси Y , то на место координаты y можем поставить любое число - куб при этом будет лишь выше или ниже
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #23 : 07-02-2009 22:29 » |
|
Спасибо, всё понял. Только разницу если задашь y = -4.0f или y = -0.6f я не увидел, так что буду доверять формулам, а не глазам. Выбираю y = -0.6f.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #24 : 07-02-2009 22:31 » |
|
и правильно делаешь! )
но я просто приблизился к кубу, поэтому мне было заметно D3DXMatrixLookAtLH(&MatrixView, &D3DXVECTOR3(0.0f, 0, 20.0f), &D3DXVECTOR3(0.0f, 0.0f, 0.0f), &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #25 : 07-02-2009 22:35 » |
|
Вот ещё два маленьких вопроса в тему
1. Как вообще находятся координаты у сложного объекта, где очень много вершин я не представляю, есть специальные программы или как вычисляют?
2. После совмещения координат центра куба и мира их надо потом обратно разъединять?
Второй вопрос это к тому я задал если на сцене два или более объектов.
|
|
« Последнее редактирование: 07-02-2009 22:44 от zuze »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #26 : 08-02-2009 06:33 » |
|
1. смотря, что понимаешь под "находятся координаты " , если ты о геометрическом центре, то а) если фигура правильной формы, то центр X0,Y0,Z0=(сумма X,Y,Z всех верших)/(количество вершин) б) те координаты, которые ты задашь для модели Можно же в 3D редакторе сразу определиться, где будут оси вращения и использовать эти оси, не вычисляя их каждый раз. Это повышение быстродействия, кстати 2. на самом же деле ничего не совмещается, просто перед выводом объекта задаём матрицы трансформации мира Я ещё не пробовал, но чисто теоретически: задали матрицы для первого объекта, нарисовали. Задали для второго , нарисовали. Если не прокатит, то эту затею надо бросить и трансформировать вертексы отдельных объектов
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #27 : 08-02-2009 10:23 » |
|
На счёт первого вопроса понятно, а на счёт второго не очень. Я правельно понимаю мы объединяем центры, но объект как был например в углу экрана так и остаётся?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 08-02-2009 15:55 » |
|
zuze, если ты не пересчитываешь сам координаты объекта, то он никогда не меняется, он всегда постоянен.
Если не ошибаюсь, то: имеются координаты мира - объект изначально описан в этой системе координат. Функция SetTransform позволяет изменить систему координат мира (при этом не затрагивается сам объект). Относительно этой же системы координат задаётся просмотр (== камера)
это можно представить как стационарную сцену с объектами, окружённую камерами, а изображение на мониторе при этом двигается
и именно поэтому, чтобы двигать объекты относительно друг друга, нужно менять их координаты. А для того, чтобы не накапливалась ошибка, каждый объект должен иметь набор свойств: изначальное описание модели, матрицу сдвига, поворота, масштаба и перед расчётами сначала "мысленно перемещать" объект в нужное положение (для этого по любому должны быть некие функции в видяхе - "наложить" матрицу трансформации на массив вертексов)
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #29 : 08-02-2009 16:43 » |
|
Всё я понял спасибо. Ну Вы сомной и помучились, был бы у Вас на форуме рейтинг я бы его поднял Вам за помощь и терпение при объяснении.
|
|
|
Записан
|
|
|
|
|