Показать сообщение отдельно
Старый 23.10.2014, 03:14   #564
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

и еще вопрос вдогонку: как мне отрисовывать фонарик перед камерой, так чтобы он не загораживался другими объектами - кароч поверх всех? вроде бы ответ прост: нарисуй все объекты, затри буфер глубины, и нарисуй фонарик. но нифига! буфер глубины у меня используется в дефереде для оптимизаций буфером трафарета. поэтому это не вариант. форвард рендер у меня в зачаточном состоянии - рисует только полупрозрачные объекты и без освещения. я уже перепробовал рисовать фонарик после всех с отключенной записью в буфер глубины, с отключенным буфером вообще. получается шлак - полигоны перемешиваются в кашу - один на другой накладываются. че делать?
в коде дума3 нашел интересный код

/*
===============
RB_EnterModelDepthHack
===============
*/
void RB_EnterModelDepthHack( float depth ) {
    qglDepthRange( 0.0f, 1.0f );

    float    matrix[16];

    memcpy( matrix, backEnd.viewDef->projectionMatrix, sizeof( matrix ) );

    matrix[14] -= depth;

    qglMatrixMode(GL_PROJECTION);
    qglLoadMatrixf( matrix );
    qglMatrixMode(GL_MODELVIEW);
}

/*
===============
RB_LeaveDepthHack
===============
*/
void RB_LeaveDepthHack() {
    qglDepthRange( 0, 1 );

    qglMatrixMode(GL_PROJECTION);
    qglLoadMatrixf( backEnd.viewDef->projectionMatrix );
    qglMatrixMode(GL_MODELVIEW);
}
может он как-то поможет?

update. перевел его на dx. и он работает, это классно.

вот мой вариант:

void Camera::EnterDepthHack( float depth )
{
    if( !inDepthHack ) {
        depthHackMatrix = projection;
    }
    inDepthHack = true;
    projection._43 -= depth;
    CalculateInverseViewProjection();
}

void Camera::LeaveDepthHack()
{
    inDepthHack = false;
    projection = depthHackMatrix;
    CalculateInverseViewProjection();
}
при рендере фонарика ставлю EnterDepthHack( 0.1 ) и все! он рендерится поверх всего и не "проваливается" ни в какие объекты.
__________________

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
Mr_F_ (23.10.2014), Samodelkin (23.10.2014)