#pragma once #include "node.h" #include "node_stroke_preview.h" #include "node_slider.h" #include "brush.h" #include "node_checkbox.h" #include "node_combobox.h" #include "node_image_texture.h" #include "node_button.h" #include "shape.h" #include "image.h" #define NANORT_USE_CPP11_FEATURE #define NANORT_ENABLE_PARALLEL_BUILD #include "nanort.h" class NodeHeightmapOverlay : public NodeBorder { NodeBorder* m_picker{ nullptr }; bool dragging = false; public: glm::vec2 m_value{ 0.5f, 0.5f }; glm::vec2 m_old_value{ 0.f }; std::function on_value_changed; virtual Node* clone_instantiate() const override; virtual void clone_finalize(Node* dest) const override; virtual void init() override; void set_value(float x, float y); virtual kEventResult handle_event(Event* e) override; virtual void draw() override; virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override; }; class NodePanelGrid : public Node { public: enum class ShadeMode : uint8_t { Transparent, Flat, Solid, Textured }; NodeSliderH* m_groud_opacity; NodeSliderH* m_groud_value; NodeComboBox* m_groud_resolution; NodeSliderH* m_groud_offset; NodeImageTexture* m_hm_preview; NodeButton* m_hm_load; NodeButton* m_hm_clear; NodeButton* m_hm_reload; NodeComboBox* m_hm_shading; NodeSliderH* m_hm_height; NodeSliderH* m_hm_wireframe; NodeSliderH* m_hm_thickness; NodeSliderH* m_hm_lyaw; NodeSliderH* m_hm_lpitch; NodeComboBox* m_hm_texres; NodeComboBox* m_hm_samples; NodeButton* m_render; NodeButton* m_commit; HeightmapPlane m_hm_plane; NodeHeightmapOverlay* m_hm_preview_nav; Sphere m_sphere; Image m_hm_image; Texture2D m_texture; Sampler m_sampler_linear; std::string m_file_path; nanort::BVHAccel m_rt_accel; bool m_rt_dirty = true;; ShadeMode m_shade_mode{ ShadeMode::Transparent }; GLfloat m_line_range[2]; GLfloat m_line_granularity; virtual Node* clone_instantiate() const override; virtual void clone_finalize(Node* dest) const override; virtual void init() override; void init_controls(); int get_samples() const; int get_texres() const; float get_thickness() const; float get_resolution() const; float get_height() const; float get_offset() const; void draw_heightmap(const glm::mat4& proj, const glm::mat4& camera) const; void bake_uvs(); };