Вопрос

Vintik

Мечтатель
Автор темы
Проверенный
1,468
916
Всефорумный @CleanLegend , очередной вопрос по плюсам.

Скажи пожалуйста, а как сделать твоего (и не только) педа полупрозрачным. Допустим, у меня есть "инвиз" и во время его работы хочется визуализировать пассивный режим, вот так вот...
 
Решение
C++:
class PluginSdkProject1 {
public:
    static RpMaterial* material_callback(RpMaterial* material, void* alpha) {
        material->color.alpha = reinterpret_cast<RwUInt8>(alpha);
        return material;
    }

    static RpAtomic* atomic_callback(RpAtomic* atomic, void* alpha) {
        if (atomic->geometry) {
            atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
            RpGeometryForAllMaterials(atomic->geometry, material_callback, alpha);
        }
        return atomic;
    }

    PluginSdkProject1() {
        Events::pedRenderEvent.before += [](CPed* ped) {
            if (ped == FindPlayerPed()) {
                RpClumpForAllAtomics(ped->m_pRwClump, atomic_callback, (void*)100);
            }
        }...

BlackKnigga

Известный
BH Team
922
444
C++:
class PluginSdkProject1 {
public:
    static RpMaterial* material_callback(RpMaterial* material, void* alpha) {
        material->color.alpha = reinterpret_cast<RwUInt8>(alpha);
        return material;
    }

    static RpAtomic* atomic_callback(RpAtomic* atomic, void* alpha) {
        if (atomic->geometry) {
            atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
            RpGeometryForAllMaterials(atomic->geometry, material_callback, alpha);
        }
        return atomic;
    }

    PluginSdkProject1() {
        Events::pedRenderEvent.before += [](CPed* ped) {
            if (ped == FindPlayerPed()) {
                RpClumpForAllAtomics(ped->m_pRwClump, atomic_callback, (void*)100);
            }
        };

        Events::pedRenderEvent.after += [](CPed* ped) {
            if (ped == FindPlayerPed()) {
                RpClumpForAllAtomics(ped->m_pRwClump, atomic_callback, (void*)255);
            }
        };
    }


} pluginSdkProject1;

1598279417210.png
но это не совсем правильно
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
C++:
class PluginSdkProject1 {
public:
    static RpMaterial* material_callback(RpMaterial* material, void* alpha) {
        material->color.alpha = reinterpret_cast<RwUInt8>(alpha);
        return material;
    }

    static RpAtomic* atomic_callback(RpAtomic* atomic, void* alpha) {
        if (atomic->geometry) {
            atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
            RpGeometryForAllMaterials(atomic->geometry, material_callback, alpha);
        }
        return atomic;
    }

    PluginSdkProject1() {
        Events::pedRenderEvent.before += [](CPed* ped) {
            if (ped == FindPlayerPed()) {
                RpClumpForAllAtomics(ped->m_pRwClump, atomic_callback, (void*)100);
            }
        };

        Events::pedRenderEvent.after += [](CPed* ped) {
            if (ped == FindPlayerPed()) {
                RpClumpForAllAtomics(ped->m_pRwClump, atomic_callback, (void*)255);
            }
        };
    }


} pluginSdkProject1;

но это не совсем правильно
Такой вопрос: а зачем после рендера альфу обратно на 255 ставить?