Показать сообщение отдельно
Старый 24.03.2012, 13:48   #1
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию DXT декомпрессия

В общем решил начать изучать OpenGL, но все понемногу. Решил разобраться как устроен modelviewer. Естественно, использую Qt4 и его модуль, но вопрос сейчас не по 3D графике

Не могу прочитать BLP %)
Точней могу, но не понимаю как правильно оперировать с данными.

Использую squish библиотеку для декомпрессии изображения, но наверное делаю что-то не так. Никак не получается вывести картинку - вместо нее набор цветопикселей

Вот код (может кому-то он ничего не скажет, но суть, я думаю, поймете)

Код:
QPixmap Texture::getImage()
{
	int mipmax = m_header.hasMips ? 16 : 1;

	QDataStream stream(m_buffer);
	stream.setByteOrder(QDataStream::LittleEndian);

	QVector<quint8> data;
	quint8 d = 0;

	for (quint8 i = 0; i < mipmax; i++)
	{
		stream.skipRawData(m_header.offsets[i]);
		for (quint32 j = 0; j < m_header.lengths[i]; j++)
		{
			stream >> d;
			data << d;
		}
	}
	
	QVector<quint8> v;
	v.resize(m_header.width * m_header.height * 16 * 4);
	squish::DecompressImage(&v[0], m_header.width, m_header.height, data.data(), m_header.encoding);

	QImage img(v.data(), m_header.width, m_header.height, QImage::Format::Format_ARGB32);

	return QPixmap::fromImage(img);
}
Смотрел как в modelviewer считывается BLP, но там декомпрессия через opengl происходит, и этих методов нет в модуле Qt. Поэтому использовал библиотеку. Вопрос - правилен этот код хоть на пару процентов?))

PS WMV 0.4 http://wowmv.svn.sourceforge.net/viewvc/wowmv/src/
WMV Latest http://code.google.com/p/wowmodelviewer/source/browse/
SQUISH http://code.google.com/p/libsquish/
__________________
SpellWork Qt4

Последний раз редактировалось Sid; 24.03.2012 в 13:52.
Sid вне форума   Ответить с цитированием