Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Умножение на матрицу преобразования 
:(
    Опции темы
NPLana
  Дата 8.9.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 13.5.2005
Где: СПб

Репутация: нет
Всего: нет



Есть изображение. Надо его "положить" - ну т.е. повернуть не на угол по ОХ, а так чтобы был объем (по ОУ чтоли).. Говорят надо наше изображение умножить на некую матрицу преобразования. Помогите бестолковой... smile
PM MAIL   Вверх
DENNN
Дата 9.9.2005, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Вы бы хоть объяснять научилсисьтолково что требуется....
PM ICQ   Вверх
MBo
Дата 9.9.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



NPLana
Есть подозрение, что речь идет о перспективных преобразованиях. Это так?

PM MAIL   Вверх
Rob
Дата 9.9.2005, 20:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Это трехмерное преобразование, эсли надо "положить".
Вообще поворот производится по ОХ.
Берется матрица 4 на 4:
1 0 0 0
0 c s 0
0 -s c 0
0 0 0 1
где c - cos r, s - sin r, а r - угол поворота.
Координаты ложатся в массив в 4 столбика и n строк.
x y z 0 - это одна строка такого масива, правда z = 0 в этом случае.
Потом эта одна строка умножается на матрицу.
Результатом будет новая строка - координаты одной точки для "положенного" изображения.
Правда тогда изображение ложится на без перспективы.

  Вверх
SoWa
Дата 12.9.2005, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



А умножать ао правилам матрицы. Т.е. если у матриц высота одной не равна ширине другой, они не перемножатся smile ! А вот про матричные вычисления для 3D графики я знаю очень мало... А собственно обязательно матрицей? Можно ведь просто координату Z выкинуть... Я так в своем рендере делал. А еще есть много способов поворота, но это потом.....


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Rob
Дата 12.9.2005, 21:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Почему? Как раз в этом случае перемножатся. Матрицу 1х4 умножаем на 4х4. Число колонок в первой равно числу строк во второй!
Можно конечно без матриц. Но тогда перспективу уже нельзя будет добавить (во всяком случае я не знаю как). Да и вообще так проще с матрицами как мне кажется.
Кстати, вот матрица перспективы:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 1/d 0
где д - дистанция до плоскости проекции.
Ее надо умножить на предыдущую матрицу. Тогда изображение должно быть не просто сжатым а "положенным". Но сам перспективу я не делал, в книге так написанно.smile



  Вверх
NPLana
Дата 12.9.2005, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 13.5.2005
Где: СПб

Репутация: нет
Всего: нет



Rob'у спасибо за участие, DENNN Могли бы оставить свои замечания при себе !
На самом деле хотела бы увидеть пример (delphi или builder c++)... А вообще суть такова -имеется изображение карты, надо применить к этому изображение какое-нибудь преобразование для имитации 3D...
PM MAIL   Вверх
podval
Дата 13.9.2005, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



Цитата(NPLana @ 12.9.2005, 22:12)
А вообще суть такова -имеется изображение карты, надо применить к этому изображение какое-нибудь преобразование для имитации 3D

Это же совсем другая задача. Для нее надо знать матрицу высот.
PM WWW ICQ   Вверх
DENNN
Дата 13.9.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(NPLana @ 12.9.2005, 21:12)
А вообще суть такова -имеется изображение карты, надо применить к этому изображение какое-нибудь преобразование для имитации 3D

Однако же критика помогла объяснить задачу smile
PM ICQ   Вверх
Rob
Дата 13.9.2005, 20:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

typedef float MATRIX_4x4[4][4];

typedef float VECTOR_4[4];


void Mult(VECTOR_4 v,MATRIX_4x4 m){
VECTOR_4 t;
for(int i=0;i<4;i++)
  for(int j=0;j<4;j++)
    t[i]=t[i]+v[j]*m[j][i];

for(int i=0;i<4;i++)
  v[i]=t[i];
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bm=new Graphics::TBitmap;
bm->LoadFromFile("c:\\db\\img1.bmp");
VECTOR_4 v;
float r=1;
float s=sin(r),c=cos(r);
MATRIX_4x4 m={
1,0,0,0,
0,c,s,0,
0,-s,c,0,
0,0,0,1
};
MATRIX_4x4 m_iden={
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
for(int y=0;y<bm->Height;y++)
for(int x=0;x<bm->Width;x++){
v[0]=x;  v[1]=y;  v[2]=0;  v[3]=0;
Mult(v,m);
Mult(v,m_iden); // ????????
Form1->Canvas->Pixels[v[0]+100][v[1]+100]=bm->Canvas->Pixels[x][y];
}

bm->Free();
}


Вот так могла бы выглядеть эта прога. Как выяснилось перспективу моим способом добавить не удалось. smile Только теперь у меня самого вопрос. smile Почему при умножении v на m_iden творятся чудеса??? Ведь при умножении на матрицу равенства умножаемая матрица не меняется.
  Вверх
NPLana
Дата 13.9.2005, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 13.5.2005
Где: СПб

Репутация: нет
Всего: нет



Спасибо.. что-то получилось...
А может кто расскажет как натянуть на эллипсоид наше изображение карты?... средствами opengl...
PM MAIL   Вверх
neutrino
Дата 13.9.2005, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



А текстурой нельзя? Надо именно программно все считать?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
NPLana
Дата 14.9.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 13.5.2005
Где: СПб

Репутация: нет
Всего: нет



Цитата(neutrino @ 13.9.2005, 23:52)
А текстурой нельзя? Надо именно программно все считать?

можно текстурой. а как?

Это сообщение отредактировал(а) NPLana - 14.9.2005, 22:41
PM MAIL   Вверх
Rob
Дата 15.9.2005, 19:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть хорошая книга Тарасова по OpenGL.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.