- Mesaj
- 524
- Çözümler
- 33
- Beğeni
- 129
- Puan
- 940
- Ticaret Puanı
- 0
Merhabalar. Neyi önizliyorsam şeffaf bir görünüm mevcut. Çoğu filesla karşılaştırdım ama çözümünü bulamadım.
anlaşılan specular ile alakalı bir şey var
void CRenderTarget::RenderModel()
void CRenderTarget::RenderModel()
{
// En üste bunu ekle
STATEMANAGER.SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
[...]
// Aşağısı olduğu gibi kalsın
}
Eğer şöyle bir fonksiyon varsa;
C++:void CRenderTarget::RenderModel()
Test amacıyla bu fonksiyona şöyle bir ekleme yapmayı deneyebilir misin?
C++:void CRenderTarget::RenderModel() { // En üste bunu ekle STATEMANAGER.SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); [...] // Aşağısı olduğu gibi kalsın }
Anladım. Sorun render state ile alakalı büyük ihtimalle.Değişen bir şey olmadı maalesef.
Anladım. Sorun render state ile alakalı büyük ihtimalle.
D3DRS_ALPHABLENDENABLE veya D3DRS_FOGENABLE şahsen şüphelendiğim iki state ayarıdır. Tabi bu sadece bir tahmin. Senin attığın görsellerde default saç stili mevcut, onlarda alpha olmadığı için karışıma uğramıyor.
25944 eklentisini görüntüle
Örnek olarak bir savaşçı karakterde şu saç stilini takıp yine render targetı test et. Eğer bu sefer karakterin kafası da şeffaflaşırsa tahminim büyük ihtimalle doğrudur.
RenderModel fonksiyonun tamamını buraya eklersen bir göz atabilirim. Gerçi o fonksiyondan kaynaklanması düşük bir ihtimal, muhtemelen kendisinden önce gelen renderların birinde bozuk bir state ayarı var, render target da o bozuk ayarı devralıyor. Ama yinede göz atmakta fayda var.
Ek olarak, PythonApplication.cpp - RenderGame fonksiyonunu kontrol et. Oradaki render sıralaması tamamen sorunsuz olmalı. Yanlış bir sıralama veya yanlış bir render işlemi, kendisinden sonra gelen render çağrılarını ezer veya bozuntuya uğratır. Yani sorun render target sisteminde değil, senin projendeki diğer render işlemlerinin birinde de olabilir.
m_kChrMgr.Render();
#ifdef ENABLE_RENDER_TARGET
m_kRenderTargetManager.RenderModels();
#endif
void CRenderTarget::RenderModel()
{
if (!IsReady())
return;
auto& python_graphic = CPythonGraphic::Instance();
auto& camera_manager = CCameraManager::instance();
auto& state_manager = CStateManager::Instance();
auto& rectRender = *m_renderTargetTexture->GetRenderingRect();
m_renderTargetTexture->SetRenderTarget();
if (!m_background)
m_renderTargetTexture->Clear();
python_graphic.ClearDepthBuffer();
const auto fov = python_graphic.GetFOV();
const auto aspect = python_graphic.GetAspect();
const auto near_y = python_graphic.GetNear();
const auto far_y = python_graphic.GetFar();
const auto width = static_cast<float>(rectRender.right - rectRender.left);
const auto height = static_cast<float>(rectRender.bottom - rectRender.top);
python_graphic.SetViewport(0.0f, 0.0f, width, height);
python_graphic.PushState();
camera_manager.SetCurrentCamera(CCameraManager::SHOPDECO_CAMERA); // burasi hata verirse sendekiyle değiştir
camera_manager.GetCurrentCamera()->SetViewParams(m_v3Eye, m_v3Target, m_v3Up);
camera_manager.GetCurrentCamera()->RotateEyeAroundTarget(m_v3AngularVelocity.z, m_v3AngularVelocity.x);
python_graphic.UpdateViewMatrix();
python_graphic.SetPerspective(10.0f, width / height, 100.0f, 15000.0f);
if (m_bShowModel)
{
m_pModel->Update();
if (m_bMotion)
m_pModel->Update();
m_pModel->Render();
}
camera_manager.ResetToPreviousCamera();
python_graphic.RestoreViewport();
python_graphic.PopState();
python_graphic.SetPerspective(fov, aspect, near_y, far_y);
m_renderTargetTexture->ResetRenderTarget();
}
C++:m_kChrMgr.Render(); #ifdef ENABLE_RENDER_TARGET m_kRenderTargetManager.RenderModels(); #endif
Bu kısım doğru görünüyor.
Aşağıdaki kodu komple değiştirip dener misin?
C++:void CRenderTarget::RenderModel() { if (!IsReady()) return; auto& python_graphic = CPythonGraphic::Instance(); auto& camera_manager = CCameraManager::instance(); auto& state_manager = CStateManager::Instance(); auto& rectRender = *m_renderTargetTexture->GetRenderingRect(); m_renderTargetTexture->SetRenderTarget(); if (!m_background) m_renderTargetTexture->Clear(); python_graphic.ClearDepthBuffer(); const auto fov = python_graphic.GetFOV(); const auto aspect = python_graphic.GetAspect(); const auto near_y = python_graphic.GetNear(); const auto far_y = python_graphic.GetFar(); const auto width = static_cast<float>(rectRender.right - rectRender.left); const auto height = static_cast<float>(rectRender.bottom - rectRender.top); python_graphic.SetViewport(0.0f, 0.0f, width, height); python_graphic.PushState(); camera_manager.SetCurrentCamera(CCameraManager::SHOPDECO_CAMERA); // burasi hata verirse sendekiyle değiştir camera_manager.GetCurrentCamera()->SetViewParams(m_v3Eye, m_v3Target, m_v3Up); camera_manager.GetCurrentCamera()->RotateEyeAroundTarget(m_v3AngularVelocity.z, m_v3AngularVelocity.x); python_graphic.UpdateViewMatrix(); python_graphic.SetPerspective(10.0f, width / height, 100.0f, 15000.0f); if (m_bShowModel) { m_pModel->Update(); if (m_bMotion) m_pModel->Update(); m_pModel->Render(); } camera_manager.ResetToPreviousCamera(); python_graphic.RestoreViewport(); python_graphic.PopState(); python_graphic.SetPerspective(fov, aspect, near_y, far_y); m_renderTargetTexture->ResetRenderTarget(); }
Eğer devam ederse sonraki adım olarak m_pModel->Render(); çağrısına yoğunlaşman gerek. ActorInstanceRender.cpp - Material.cpp - ModelInstanceRender.cpp - ThingInstance.cpp gibi dosyalarda tutarsız davranan bir state ayarı olabilir.