Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кубическая панорама, Получить стороны куба 
:(
    Опции темы
Snake174
Дата 23.1.2014, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Имеется кубическая панорама (развёртка куба), построенная из 6 изображений.
Как можно из этой развёртки получить обратно 6 изображений (стороны куба)?
PM MAIL   Вверх
tzirechnoy
Дата 23.1.2014, 08:42 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Сначала жэлательно распечатать эту панораму, взять ножницы, и получить эти 6 изображэний.

Потом взять [gimp, photoshop, etc], и проделать то жэ самое -- только без распечатывания, с ножницами компьютэрного редактора.

Если потом останутся конкретные вопросы -- обращайтесь.
PM MAIL   Вверх
Snake174
Дата 23.1.2014, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вы немного не поняли.
Мне нужна какая-нибудь формула для перевода этой панорамы в стороны куба.
И жЭлательно без ножниц и компьютЭрного редактора для получения этих шести изображЭний  smile 
user posted image user posted image user posted image user posted image user posted image user posted image user posted image
PM MAIL   Вверх
Bitter
Дата 23.1.2014, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Цитата(Snake174 @  23.1.2014,  13:50 Найти цитируемый пост)
жЭлательно без ножниц и компьютЭрного редактора для получения этих шести изображЭний

Наверное его зовут жЭня  smile 

Цитата(Snake174 @  23.1.2014,  13:50 Найти цитируемый пост)
какая-нибудь формула

Думаете для этого существует формула? Как вы куб загружаете в программу? Если импортируете из редактора, то предварительно в редакторе накладывате на каждую сторону нужную текстуру. Если вы создаете куб вручную, то и вручную для каждой стороны указываете материал с соответствующей текстурой.

Хотя я скорее всего не понял вопрос, может вы имеете в виду что у вас есть панорама как справа, а вы хотите ее переделать в 6 текстур? Тогда вместо этого попробуйте просто использовать не куб, а сферу, так как это текстура сферы (растянутые низ и верх говорят о том что эти места сходятся в точку, то есть полюса сферы)
PM MAIL ICQ Skype   Вверх
Snake174
Дата 24.1.2014, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



C построением куба и накладыванием на него текстур проблем нет. Первые 6 изображений - это исходные изображения, по которым строится последнее изображение:
Код

QImage *LocationEditor::getEquirect()
{
  int i, j, f, w, h, k, l;
  float az, el, x, y;
  QImage *faces[6];
  w = 360;
  h = 180;

  QStringList cubeMapImages = getCubeMapImages();

  for (i = 0; i < cubeMapImages.count(); ++i)
  {
    QImage image;
    QString s = QString("%1/%2").arg( locationName ).arg( cubeMapImages.at(i) );

    if (!image.load( s, PathUtils::getExt(s).toUpper().toAscii().constData() ))
    {
      qDebug("Can't load image");
      return 0;
    }

    faces[i] = new QImage( image.convertToFormat( QImage::Format_RGB888 ) );
  }

  QImage *equirect = new QImage( w, h, QImage::Format_RGB888 );

  for (i = 0; i < w; ++i)
  {
    for (j = 0; j < h; ++j)
    {
      az = (i + 0.5f) / w * 2 * (float)M_PI;
      el = ((-0.5f - j) / h + 0.5f) * (float)M_PI;
      f = 0;

      while (az > M_PI / 4)
      {
        az -= M_PI / 2;
        f++;
      }

      if (f == 4)
        f = 0;

      x = tanf( az );
      y = -sqrtf( 1 + x * x ) * tanf( el );

      if (y < -1)
      {
        f = 4;
        az = (i + 0.5f) / w * 360 * (float)M_PI / 180;
        x = sinf( az ) / tanf( el );
        y = cosf( az ) / tanf( el );
      }
      else if (y > 1)
      {
        f = 5;
        az = (i + 0.5f) / w * 360 * (float)M_PI / 180;
        x = -sinf( az ) / tanf( el );
        y = cosf( az ) / tanf( el );
      }

      k = (int)floorf( (faces[f]->width() - 1) * (x + 1) / 2 + 0.5f );
      l = (int)floorf( (faces[f]->height() - 1) * (y + 1) / 2 + 0.5f );

      ((unsigned char *)(equirect->bits()))[ j * equirect->bytesPerLine() + 3 * i + 0 ] = ((unsigned char *)(faces[f]->bits()))[ l * faces[f]->bytesPerLine() + 3 * k + 0 ];
      ((unsigned char *)(equirect->bits()))[ j * equirect->bytesPerLine() + 3 * i + 1 ] = ((unsigned char *)(faces[f]->bits()))[ l * faces[f]->bytesPerLine() + 3 * k + 1 ];
      ((unsigned char *)(equirect->bits()))[ j * equirect->bytesPerLine() + 3 * i + 2 ] = ((unsigned char *)(faces[f]->bits()))[ l * faces[f]->bytesPerLine() + 3 * k + 2 ];
    }
  }

  for (int i = 0; i < cubeMapImages.count(); ++i)
  {
    delete faces[i];
    faces[i] = 0;
  }

  return equirect;
}

На выходе получается нужный QImage (последнее изображение).
Теперь вот надо из этого изображения получить исходные (первые 6 изображений).
Всё никак алгоритм не найду.
PM MAIL   Вверх
Bitter
Дата 24.1.2014, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



как на счет этого?
http://www.youtube.com/watch?v=qqMmjBSWByw

Еще вот тут есть инверсные формулы для преобразования вручную
http://mathworld.wolfram.com/CylindricalEq...Projection.html

Это сообщение отредактировал(а) Bitter - 24.1.2014, 11:10
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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