-
Автор темы
- #1
Да, это не дота, но я не знаю куда еще написать с этим вопросом. Я пытаюсь отрисовать куб точно таким же методом как рисовал в доте, но почему то это не работает. Как будто центр смещен или что-то в этом роде. Иногда оно отрисовывает как надо, что очень странно. Помогите пожалуйста...
WorldToScreen брал отсюда
WorldToScreen брал отсюда
Пожалуйста, авторизуйтесь для просмотра ссылки.
WorldToScreen:
bool WorldToScreen( const Math::Vector_t< float, 3 >& vecWorld, Math::Vector_t< float, 2 >& vecOutScreen )
{
CRenderGameSystem* pRenderGameSystem = *CTX::DOTA->m_ppRenderGameSystem;
if ( !pRenderGameSystem )
return false;
const Math::ViewMatrix_t& matWorldToScreen = pRenderGameSystem->WorldToProjectionMatrix( );
const float flWidth = matWorldToScreen[ 3 ][ 0 ] * vecWorld[ 0 ] + matWorldToScreen[ 3 ][ 1 ] * vecWorld[ 1 ] + matWorldToScreen[ 3 ][ 2 ] * vecWorld[ 2 ] + matWorldToScreen[ 3 ][ 3 ];
if ( flWidth < 0.001f )
return false;
const float flInverse = 1.0f / flWidth;
vecOutScreen[ 0 ] = ( matWorldToScreen[ 0 ][ 0 ] * vecWorld[ 0 ] + matWorldToScreen[ 0 ][ 1 ] * vecWorld[ 1 ] + matWorldToScreen[ 0 ][ 2 ] * vecWorld[ 2 ] + matWorldToScreen[ 0 ][ 3 ] ) * flInverse;
vecOutScreen[ 1 ] = ( matWorldToScreen[ 1 ][ 0 ] * vecWorld[ 0 ] + matWorldToScreen[ 1 ][ 1 ] * vecWorld[ 1 ] + matWorldToScreen[ 1 ][ 2 ] * vecWorld[ 2 ] + matWorldToScreen[ 1 ][ 3 ] ) * flInverse;
vecOutScreen[ 0 ] = std::floor( ( vecDisplaySize[ 0 ] * 0.5f ) + ( vecOutScreen[ 0 ] * vecDisplaySize[ 0 ] ) * 0.5f );
vecOutScreen[ 1 ] = std::floor( ( vecDisplaySize[ 1 ] * 0.5f ) - ( vecOutScreen[ 1 ] * vecDisplaySize[ 1 ] ) * 0.5f );
return true;
}