clamped texcoord anim; updated editor

This commit is contained in:
turanszkij
2016-10-14 01:26:04 +02:00
parent 4a1e589dac
commit 805aac3831
4 changed files with 54 additions and 19 deletions
+2 -2
View File
@@ -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;
+43 -13
View File
@@ -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);
}
+3
View File
@@ -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;
};
+6 -4
View File
@@ -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();
}
}