Тема: raycasting
Показать сообщение отдельно
Старый 29.12.2013, 17:26   #52
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: raycasting

Сообщение от alko Посмотреть сообщение
всё очень печально
Запускал только-что на пентиуме вариант без пола и потолка - 4 кадра в секунду (если в обзор попадает спрайт - 3 кадра)
Комп как бы намекает, что это всё плохая затея.
Ну как я уже выше написал мой код расчитан на новое железо и хорошую графику

Попробуй вот так (код я не проверял и не компилировал):
uint32_t fog( const uint32_t inColor, const uint32_t rayLen, const uint8_t factor ) {
	uint16_t color[ 3 ];
	color[ 0 ] = ( char )( inColor >> 8 );
	color[ 1 ] = ( char )( inColor >> 16 );
	color[ 2 ] = ( char )( inColor >> 24 );

	if ( rayLen < ( 256 << factor ) - 256 ) {
		color[ 0 ] += ( rayLen >> factor );
		color[ 1 ] += ( rayLen >> factor );
		color[ 2 ] += ( rayLen >> factor );
		if ( color[ 0 ] >= 256 ) color[ 0 ] = 255;
		if ( color[ 1 ] >= 256 ) color[ 1 ] = 255;
		if ( color[ 2 ] >= 256 ) color[ 2 ] = 255;
		uint32_t outColor = 0;
		outColor |= ( ( ( char )color[ 0 ] ) >> 8 );
		outColor |= ( ( ( char )color[ 1 ] ) >> 16 );
		outColor |= ( ( ( char )color[ 2 ] ) >> 24 );
		return outColor;
	} else {
		return 0xffffff00;
	}
}
factor сначала задавай 0, а потом 1 и выше до 7 включительно.

Тут главное не напутать с форматом цвета. Например согласно little endian 4 байтное число 0xaabbccdd на самом деле записывается в память в обратном порядке - ddccbbaa. Таким образом при преобразовании типа, например в 2 байтное число оно превратится в ddcc, то есть 0xccdd если в нормальном представлении. Так что я код написал что у тебя в памяти идет ARGB в таком порядке, то есть в 4 байтном числе это 0xBGRA. Однако операторы сдвига как раз работают с числами в нормальном представлении, то есть для числа 0xaabbccdd если применить >> 24 то будет ожидаемое aa, а не какое то значине справа от числа, так что я просто написал чтобы было понятно как работает внутри

Да кстати расширение mmx (а также sse в более новых машинах) может работать с упакованными значениями - и видимо они здесь как раз кстати подойдут, но я пока сам так еще не делал.
(Offline)
 
Ответить с цитированием