From 805aac383128a1db504190cf7fc89d7fe2bb88ba Mon Sep 17 00:00:00 2001 From: turanszkij Date: Fri, 14 Oct 2016 01:26:04 +0200 Subject: [PATCH] clamped texcoord anim; updated editor --- WickedEngine/Editor.h | 4 +-- WickedEngine/MaterialWindow.cpp | 56 +++++++++++++++++++++++++-------- WickedEngine/MaterialWindow.h | 3 ++ WickedEngine/wiLoader.cpp | 10 +++--- 4 files changed, 54 insertions(+), 19 deletions(-) diff --git a/WickedEngine/Editor.h b/WickedEngine/Editor.h index aca43710a..603afa8a3 100644 --- a/WickedEngine/Editor.h +++ b/WickedEngine/Editor.h @@ -24,9 +24,9 @@ public: class Editor; class EditorComponent - //: public DeferredRenderableComponent + : public DeferredRenderableComponent //: public ForwardRenderableComponent - : public TiledForwardRenderableComponent + //: public TiledForwardRenderableComponent { private: wiGraphicsTypes::Texture2D pointLightTex, spotLightTex, dirLightTex; diff --git a/WickedEngine/MaterialWindow.cpp b/WickedEngine/MaterialWindow.cpp index 7e17446fa..57cc933c6 100644 --- a/WickedEngine/MaterialWindow.cpp +++ b/WickedEngine/MaterialWindow.cpp @@ -12,7 +12,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) float screenH = (float)wiRenderer::GetDevice()->GetScreenHeight(); materialWindow = new wiWindow(GUI, "Material Window"); - materialWindow->SetSize(XMFLOAT2(600, 400)); + materialWindow->SetSize(XMFLOAT2(600, 550)); materialWindow->SetEnabled(false); GUI->AddWidget(materialWindow); @@ -23,24 +23,32 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) materialWindow->AddWidget(materialLabel); float x = 400, y = 0; + float step = 35; waterCheckBox = new wiCheckBox("Water: "); - waterCheckBox->SetPos(XMFLOAT2(470, y += 30)); + waterCheckBox->SetPos(XMFLOAT2(470, y += step)); waterCheckBox->OnClick([&](wiEventArgs args) { material->water = args.bValue; }); materialWindow->AddWidget(waterCheckBox); planarReflCheckBox = new wiCheckBox("Planar Reflections: "); - planarReflCheckBox->SetPos(XMFLOAT2(470, y += 30)); + planarReflCheckBox->SetPos(XMFLOAT2(470, y += step)); planarReflCheckBox->OnClick([&](wiEventArgs args) { material->planar_reflections = args.bValue; }); materialWindow->AddWidget(planarReflCheckBox); + shadowCasterCheckBox = new wiCheckBox("Cast Shadow: "); + shadowCasterCheckBox->SetPos(XMFLOAT2(470, y += step)); + shadowCasterCheckBox->OnClick([&](wiEventArgs args) { + material->cast_shadow = args.bValue; + }); + materialWindow->AddWidget(shadowCasterCheckBox); + normalMapSlider = new wiSlider(0, 4, 1, 4000, "Normalmap: "); normalMapSlider->SetSize(XMFLOAT2(100, 30)); - normalMapSlider->SetPos(XMFLOAT2(x, y += 30)); + normalMapSlider->SetPos(XMFLOAT2(x, y += step)); normalMapSlider->OnSlide([&](wiEventArgs args) { material->normalMapStrength = args.fValue; }); @@ -48,7 +56,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) roughnessSlider = new wiSlider(0, 1, 0.5f, 1000, "Roughness: "); roughnessSlider->SetSize(XMFLOAT2(100, 30)); - roughnessSlider->SetPos(XMFLOAT2(x, y += 30)); + roughnessSlider->SetPos(XMFLOAT2(x, y += step)); roughnessSlider->OnSlide([&](wiEventArgs args) { material->roughness = args.fValue; }); @@ -56,7 +64,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) reflectanceSlider = new wiSlider(0, 1, 0.5f, 1000, "Reflectance: "); reflectanceSlider->SetSize(XMFLOAT2(100, 30)); - reflectanceSlider->SetPos(XMFLOAT2(x, y += 30)); + reflectanceSlider->SetPos(XMFLOAT2(x, y += step)); reflectanceSlider->OnSlide([&](wiEventArgs args) { material->reflectance = args.fValue; }); @@ -64,7 +72,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) metalnessSlider = new wiSlider(0, 1, 0.0f, 1000, "Metalness: "); metalnessSlider->SetSize(XMFLOAT2(100, 30)); - metalnessSlider->SetPos(XMFLOAT2(x, y += 30)); + metalnessSlider->SetPos(XMFLOAT2(x, y += step)); metalnessSlider->OnSlide([&](wiEventArgs args) { material->metalness = args.fValue; }); @@ -72,7 +80,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) alphaSlider = new wiSlider(0, 1, 1.0f, 1000, "Alpha: "); alphaSlider->SetSize(XMFLOAT2(100, 30)); - alphaSlider->SetPos(XMFLOAT2(x, y += 30)); + alphaSlider->SetPos(XMFLOAT2(x, y += step)); alphaSlider->OnSlide([&](wiEventArgs args) { material->alpha = args.fValue; }); @@ -80,7 +88,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) refractionIndexSlider = new wiSlider(0, 1.0f, 0.02f, 1000, "Refraction Index: "); refractionIndexSlider->SetSize(XMFLOAT2(100, 30)); - refractionIndexSlider->SetPos(XMFLOAT2(x, y += 30)); + refractionIndexSlider->SetPos(XMFLOAT2(x, y += step)); refractionIndexSlider->OnSlide([&](wiEventArgs args) { material->refractionIndex = args.fValue; }); @@ -88,7 +96,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) emissiveSlider = new wiSlider(0, 1, 0.0f, 1000, "Emissive: "); emissiveSlider->SetSize(XMFLOAT2(100, 30)); - emissiveSlider->SetPos(XMFLOAT2(x, y += 30)); + emissiveSlider->SetPos(XMFLOAT2(x, y += step)); emissiveSlider->OnSlide([&](wiEventArgs args) { material->emissive = args.fValue; }); @@ -96,7 +104,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) sssSlider = new wiSlider(0, 1, 0.0f, 1000, "Subsurface Scattering: "); sssSlider->SetSize(XMFLOAT2(100, 30)); - sssSlider->SetPos(XMFLOAT2(x, y += 30)); + sssSlider->SetPos(XMFLOAT2(x, y += step)); sssSlider->OnSlide([&](wiEventArgs args) { material->subsurfaceScattering = args.fValue; }); @@ -104,15 +112,31 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) pomSlider = new wiSlider(0, 0.1f, 0.0f, 1000, "Parallax Occlusion Mapping: "); pomSlider->SetSize(XMFLOAT2(100, 30)); - pomSlider->SetPos(XMFLOAT2(x, y += 30)); + pomSlider->SetPos(XMFLOAT2(x, y += step)); pomSlider->OnSlide([&](wiEventArgs args) { material->parallaxOcclusionMapping = args.fValue; }); materialWindow->AddWidget(pomSlider); + movingTexSliderU = new wiSlider(-0.05f, 0.05f, 0, 1000, "Texcoord anim U: "); + movingTexSliderU->SetSize(XMFLOAT2(100, 30)); + movingTexSliderU->SetPos(XMFLOAT2(x, y += step)); + movingTexSliderU->OnSlide([&](wiEventArgs args) { + material->movingTex.x = args.fValue; + }); + materialWindow->AddWidget(movingTexSliderU); + + movingTexSliderV = new wiSlider(-0.05f, 0.05f, 0, 1000, "Texcoord anim V: "); + movingTexSliderV->SetSize(XMFLOAT2(100, 30)); + movingTexSliderV->SetPos(XMFLOAT2(x, y += step)); + movingTexSliderV->OnSlide([&](wiEventArgs args) { + material->movingTex.y = args.fValue; + }); + materialWindow->AddWidget(movingTexSliderV); + colorPickerToggleButton = new wiButton("Color"); - colorPickerToggleButton->SetPos(XMFLOAT2(x, y += 30)); + colorPickerToggleButton->SetPos(XMFLOAT2(x, y += step)); colorPickerToggleButton->OnClick([&](wiEventArgs args) { colorPicker->SetVisible(!colorPicker->IsVisible()); }); @@ -139,6 +163,7 @@ MaterialWindow::~MaterialWindow() SAFE_DELETE(materialLabel); SAFE_DELETE(waterCheckBox); SAFE_DELETE(planarReflCheckBox); + SAFE_DELETE(shadowCasterCheckBox); SAFE_DELETE(normalMapSlider); SAFE_DELETE(roughnessSlider); SAFE_DELETE(reflectanceSlider); @@ -148,6 +173,8 @@ MaterialWindow::~MaterialWindow() SAFE_DELETE(emissiveSlider); SAFE_DELETE(sssSlider); SAFE_DELETE(pomSlider); + SAFE_DELETE(movingTexSliderU); + SAFE_DELETE(movingTexSliderV); SAFE_DELETE(colorPickerToggleButton); SAFE_DELETE(colorPicker); } @@ -162,6 +189,7 @@ void MaterialWindow::SetMaterial(Material* mat) materialLabel->SetText(material->name); waterCheckBox->SetCheck(material->water); planarReflCheckBox->SetCheck(material->planar_reflections); + shadowCasterCheckBox->SetCheck(material->cast_shadow); normalMapSlider->SetValue(material->normalMapStrength); roughnessSlider->SetValue(material->roughness); reflectanceSlider->SetValue(material->reflectance); @@ -171,6 +199,8 @@ void MaterialWindow::SetMaterial(Material* mat) emissiveSlider->SetValue(material->emissive); sssSlider->SetValue(material->subsurfaceScattering); pomSlider->SetValue(material->parallaxOcclusionMapping); + movingTexSliderU->SetValue(material->movingTex.x); + movingTexSliderU->SetValue(material->movingTex.x); materialWindow->SetEnabled(true); colorPicker->SetEnabled(true); } diff --git a/WickedEngine/MaterialWindow.h b/WickedEngine/MaterialWindow.h index f7a659f06..8dcdf5857 100644 --- a/WickedEngine/MaterialWindow.h +++ b/WickedEngine/MaterialWindow.h @@ -25,6 +25,7 @@ public: wiLabel* materialLabel; wiCheckBox* waterCheckBox; wiCheckBox* planarReflCheckBox; + wiCheckBox* shadowCasterCheckBox; wiSlider* normalMapSlider; wiSlider* roughnessSlider; wiSlider* reflectanceSlider; @@ -34,6 +35,8 @@ public: wiSlider* emissiveSlider; wiSlider* sssSlider; wiSlider* pomSlider; + wiSlider* movingTexSliderU; + wiSlider* movingTexSliderV; wiButton* colorPickerToggleButton; wiColorPicker* colorPicker; }; diff --git a/WickedEngine/wiLoader.cpp b/WickedEngine/wiLoader.cpp index 2aa2e2661..8fb289f75 100644 --- a/WickedEngine/wiLoader.cpp +++ b/WickedEngine/wiLoader.cpp @@ -2659,12 +2659,14 @@ void Model::FinishLoading() } void Model::UpdateModel() { - for (MaterialCollection::iterator iter = materials.begin(); iter != materials.end(); ++iter) { + for (MaterialCollection::iterator iter = materials.begin(); iter != materials.end(); ++iter) + { Material* iMat = iter->second; iMat->framesToWaitForTexCoordOffset -= 1.0f; - if (iMat->framesToWaitForTexCoordOffset <= 0) { - iMat->texMulAdd.z += iMat->movingTex.x*wiRenderer::GetGameSpeed(); - iMat->texMulAdd.w += iMat->movingTex.y*wiRenderer::GetGameSpeed(); + if (iMat->framesToWaitForTexCoordOffset <= 0) + { + iMat->texMulAdd.z = fmodf(iMat->texMulAdd.z + iMat->movingTex.x*wiRenderer::GetGameSpeed(), 1); + iMat->texMulAdd.w = fmodf(iMat->texMulAdd.w + iMat->movingTex.y*wiRenderer::GetGameSpeed(), 1); iMat->framesToWaitForTexCoordOffset = iMat->movingTex.z*wiRenderer::GetGameSpeed(); } }