implement shading modes switch for heightmap

This commit is contained in:
2018-12-24 23:47:00 +01:00
parent 52c87d9ec6
commit f823451546
5 changed files with 44 additions and 17 deletions

View File

@@ -285,9 +285,9 @@
</node>
</node>
<node height="30" pad="1" width="100%" dir="row">
<combobox id="grid-heightmap-shading" text="Normal" width="100%" height="30" combo-list="Transparent,Flat,Solid" default="0"/>
<combobox id="grid-heightmap-shading" width="100%" height="30" combo-list="Transparent,Flat,Solid" default="0"/>
</node>
<node height="20" pad="1" width="100%"><slider-h id="grid-heightmap-wireframe"/></node>
<node height="20" pad="1" width="100%"><slider-h id="grid-heightmap-wireframe" value="1.0"/></node>
<node height="20" pad="1" width="100%"><slider-h id="grid-heightmap-height" value="0.25"/></node>
<node height="20" pad="1" width="100%"><slider-h id="grid-heightmap-lyaw" value="0.5"/></node>
<node height="20" pad="1" width="100%"><slider-h id="grid-heightmap-lpitch" value="0.5"/></node>
@@ -1120,10 +1120,11 @@ Here's a list of what's available in this release.
<!--Colors-->
<!--<panel-color id="panel-color"/>-->
<!--Grids-->
<panel-grid/>
<!--<panel-grid/>-->
</scroll>
</node>
<!-- timeline -->
<!--
<node height="100%" width="1" grow="1" dir="col" justify="flex-start" rtl="ltr">
<border color=".3 .3 .3 .4" height="50" width="100%" pad="10" dir="row">
<text text="Timeline: " font-face="arial" font-size="11" margin="8 10 0 0"/>
@@ -1133,6 +1134,7 @@ Here's a list of what's available in this release.
</node>
</border>
</node>
-->
<!--<node height="100%" width="1" grow="1" dir="col" align="center" justify="flex-start" rtl="ltr">
<border border-color="0 0 0 0" thickness="2" color=".2 .2 .2 .6" pad="10" dir="row" margin="2 0 0 0">

View File

@@ -297,8 +297,9 @@ void NodeCanvas::draw()
* glm::scale(glm::vec3(1, glm::pow(App::I.grid->m_hm_height->get_value() - 0.5f, 3.f) * 10.f, 1))
* glm::eulerAngleX(glm::radians(90.f));
// DRAW SOLID
if (App::I.grid->m_shade_mode == NodePanelGrid::ShadeMode::Solid)
{
glDisable(GL_BLEND);
ShaderManager::use(kShader::Lambert);
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
@@ -307,6 +308,17 @@ void NodeCanvas::draw()
auto light_pos = glm::vec3(sinf(light_yaw), cosf(light_yaw), light_pitch);
ShaderManager::u_vec3(kShaderUniform::LightDir, glm::normalize(-light_pos));
App::I.grid->m_hm_plane.draw_fill();
}
else if (App::I.grid->m_shade_mode == NodePanelGrid::ShadeMode::Flat)
{
ShaderManager::use(kShader::Color);
ShaderManager::u_vec4(kShaderUniform::Col, glm::vec4(
glm::vec3(1.f - App::I.grid->m_groud_value->get_value()),
App::I.grid->m_groud_opacity->get_value()
));
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
App::I.grid->m_hm_plane.draw_fill();
}
// DRAW GRIDS
if (App::I.grid->m_hm_wireframe->get_value() > 0.f)
@@ -319,9 +331,12 @@ void NodeCanvas::draw()
App::I.grid->m_hm_wireframe->get_value()
));
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
//glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
//App::I.grid->m_hm_plane.draw_fill();
//glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
if (App::I.grid->m_shade_mode == NodePanelGrid::ShadeMode::Transparent)
{
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
App::I.grid->m_hm_plane.draw_fill();
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
}
App::I.grid->m_hm_plane.draw_stroke();
}

View File

@@ -19,6 +19,8 @@ void NodeComboBox::clone_copy(Node* dest) const
void NodeComboBox::loaded()
{
NodeButton::loaded();
m_text->set_text(m_data[m_current_index].c_str());
m_selected_child_index = m_current_index;
on_click = [this](Node* target) {
NodePopupMenu* popup = new NodePopupMenu;
popup->init();

View File

@@ -37,6 +37,10 @@ void NodePanelGrid::init_controls()
m_hm_height = find<NodeSliderH>("grid-heightmap-height");
m_hm_lyaw = find<NodeSliderH>("grid-heightmap-lyaw");
m_hm_lpitch = find<NodeSliderH>("grid-heightmap-lpitch");
m_hm_shading = find<NodeComboBox>("grid-heightmap-shading");
m_hm_preview->SetHeight(0);
m_hm_plane.create(1, 1, 100);
//m_hm_height->on_value_changed = update_hm;
m_groud_resolution->on_value_changed = [this](Node* target, float v) {
@@ -46,9 +50,10 @@ void NodePanelGrid::init_controls()
m_hm_plane.create(1, 1, 100 * v * 5.f);
LOG("resolution value %f", v);
};
m_hm_preview->SetHeight(0);
m_hm_plane.create(1, 1, 100);
m_hm_shading->on_select = [this](Node*, int index) {
m_shade_mode = (ShadeMode)index;
};
m_hm_load->on_click = [this](Node*) {
App::I.pick_image([this](std::string path) {

View File

@@ -13,6 +13,8 @@
class NodePanelGrid : public Node
{
public:
enum class ShadeMode : uint8_t { Transparent, Flat, Solid };
NodeSliderH* m_groud_opacity;
NodeSliderH* m_groud_value;
NodeSliderH* m_groud_resolution;
@@ -29,6 +31,7 @@ public:
HeightmapPlane m_hm_plane;
Image m_hm_image;
std::string m_file_path;
ShadeMode m_shade_mode{ ShadeMode::Transparent };
virtual Node* clone_instantiate() const override;
virtual void clone_finalize(Node* dest) const override;