载入中...
搜索中...
未找到
Hd2d.cpp
浏览该文件的文档.
1#include "hd2d/Hd2d.h"
2
3#include "common/Exception.h"
4#include "graphics/Graphics.h"
6
7#include <simplesquirrel/simplesquirrel.hpp>
8
9namespace eve::hd2d {
10
11Hd2D::Hd2D() = default;
12Hd2D::~Hd2D() = default;
13
15
17
19 if (!gfx) throw eve::Exception("Hd2D.newSprite: null graphics");
20 auto *sprite = new Sprite3D();
21 sprite->buildQuad(gfx);
22 return sprite;
23}
24
25Hd2dLook *Hd2D::newLook() { return new Hd2dLook(); }
26
28
29void Hd2D::expose(ssq::Table &table) {
30 auto cls = table.addClass(name, Hd2D::create, false);
31 expose(cls);
32
33 auto tile = table.addClass<TileMap3D>(
34 "TileMap3D", std::function<TileMap3D *()>([]() { return nullptr; }), true);
35 tile.addFunc("setSideDepth", &TileMap3D::setSideDepth);
36 tile.addFunc("getSideDepth", &TileMap3D::getSideDepth);
37 tile.addFunc("setHeightScale", &TileMap3D::setHeightScale);
38 tile.addFunc("getHeightScale", &TileMap3D::getHeightScale);
39 tile.addFunc("setWallUV", &TileMap3D::setWallUV);
40 tile.addFunc("setTint", &TileMap3D::setTint);
41 tile.addFunc("buildMesh", &TileMap3D::buildMesh);
42 tile.addFunc("buildRenderable", &TileMap3D::buildRenderable);
43 tile.addFunc("getTileCount", &TileMap3D::getTileCount);
44
45 auto sprite = table.addClass<Sprite3D>(
46 "Sprite3D", std::function<Sprite3D *()>([]() { return nullptr; }), true);
47 sprite.addFunc("setTexture", &Sprite3D::setTexture);
48 sprite.addFunc("getTexture", &Sprite3D::getTexture);
49 sprite.addFunc("setFrame", &Sprite3D::setFrame);
50 sprite.addFunc("setFlipX", &Sprite3D::setFlipX);
51 sprite.addFunc("setFlipY", &Sprite3D::setFlipY);
52 sprite.addFunc("setFrameGrid", &Sprite3D::setFrameGrid);
53 sprite.addFunc("getFrameGridColumns", &Sprite3D::getFrameGridColumns);
54 sprite.addFunc("getFrameGridRows", &Sprite3D::getFrameGridRows);
55 sprite.addFunc("setFrameIndex", &Sprite3D::setFrameIndex);
56 sprite.addFunc("getFrameIndex", &Sprite3D::getFrameIndex);
57 sprite.addFunc("getFrameCount", &Sprite3D::getFrameCount);
58 sprite.addFunc("play", &Sprite3D::play);
59 sprite.addFunc("stop", &Sprite3D::stop);
60 sprite.addFunc("isPlaying", &Sprite3D::isPlaying);
61 sprite.addFunc("update", &Sprite3D::update);
62 sprite.addFunc("setCamera", &Sprite3D::setCamera);
63 sprite.addFunc("setPivot", &Sprite3D::setPivot);
64 sprite.addFunc("setPosition", &Sprite3D::setPosition);
65 sprite.addFunc("getPositionX", &Sprite3D::getPositionX);
66 sprite.addFunc("getPositionY", &Sprite3D::getPositionY);
67 sprite.addFunc("getPositionZ", &Sprite3D::getPositionZ);
68 sprite.addFunc("setSize", &Sprite3D::setSize);
69 sprite.addFunc("getWidth", &Sprite3D::getWidth);
70 sprite.addFunc("getHeight", &Sprite3D::getHeight);
71 sprite.addFunc("setTint", &Sprite3D::setTint);
72 sprite.addFunc("setVisible", &Sprite3D::setVisible);
73 sprite.addFunc("getVisible", &Sprite3D::getVisible);
74 sprite.addFunc("setAlphaCutoff", &Sprite3D::setAlphaCutoff);
75 sprite.addFunc("getAlphaCutoff", &Sprite3D::getAlphaCutoff);
76 sprite.addFunc("setDepthWrite", &Sprite3D::setDepthWrite);
77 sprite.addFunc("getDepthWrite", &Sprite3D::getDepthWrite);
78 sprite.addFunc("setDoubleSided", &Sprite3D::setDoubleSided);
79 sprite.addFunc("getDoubleSided", &Sprite3D::getDoubleSided);
80 sprite.addFunc("setBillboardMode", &Sprite3D::setBillboardMode);
81 sprite.addFunc("getBillboardMode", &Sprite3D::getBillboardMode);
82
83 auto look = table.addClass<Hd2dLook>(
84 "Hd2dLook", std::function<Hd2dLook *()>([]() { return nullptr; }), true);
85 look.addFunc("setFocusDistance", &Hd2dLook::setFocusDistance);
86 look.addFunc("getFocusDistance", &Hd2dLook::getFocusDistance);
87 look.addFunc("setMaxBlur", &Hd2dLook::setMaxBlur);
88 look.addFunc("getMaxBlur", &Hd2dLook::getMaxBlur);
89 look.addFunc("setFocusRange", &Hd2dLook::setFocusRange);
90 look.addFunc("getFocusRange", &Hd2dLook::getFocusRange);
91 look.addFunc("setBloomIntensity", &Hd2dLook::setBloomIntensity);
92 look.addFunc("getBloomIntensity", &Hd2dLook::getBloomIntensity);
93 look.addFunc("setBloomThreshold", &Hd2dLook::setBloomThreshold);
94 look.addFunc("getBloomThreshold", &Hd2dLook::getBloomThreshold);
95 look.addFunc("apply", &Hd2dLook::apply);
96 look.addFunc("applyPixelSampler", &Hd2dLook::applyPixelSampler);
97}
98
99void Hd2D::expose(ssq::Class &cls) {
100 cls.addFunc("getName", &Hd2D::getName);
101 cls.addFunc("newTileMap3D", &Hd2D::newTileMap3D);
102 cls.addFunc("newSprite", &Hd2D::newSprite);
103 cls.addFunc("newLook", &Hd2D::newLook);
104 cls.addFunc("newMiniatureLook", &Hd2D::newMiniatureLook);
105}
106
107} // namespace eve::hd2d
HSQOBJECT cls
Definition ECS.cpp:21
std::string name
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
EVENGINE_API_FOUNDATION public API.
Definition Exception.h:13
virtual std::string getName() const =0
Returns the name.
HD-2D module: tilemap-to-3D extrusion + 2D sprites as 3D billboards.
Definition Hd2d.h:356
Sprite3D * newSprite(graphics::Graphics *gfx)
Create a 3D billboard sprite bound to the given Graphics.
Definition Hd2d.cpp:18
Hd2dLook * newLook()
Create an HD-2D look preset with soft defaults. @ownership Caller owns the returned object and must d...
Definition Hd2d.cpp:25
~Hd2D() override
Hd 2 d.
TileMap3D * newTileMap3D()
Create a tilemap-to-3D builder.
Definition Hd2d.cpp:16
Hd2dLook * newMiniatureLook()
Create the miniature (strong DOF) look preset. @ownership Caller owns the returned object and must de...
Definition Hd2d.cpp:27
HD-2D presentation look inspired by HD2DURP (DOF + bloom + pixel sampling).
Definition Hd2d.h:297
float getFocusRange() const
Returns the focus range.
Definition Hd2d.h:313
float getMaxBlur() const
Returns the max blur.
Definition Hd2d.h:309
void setMaxBlur(float blurPx)
Max Gaussian blur radius in texels; 0 disables DOF (default 5).
Definition Hd2dLook.cpp:19
void setFocusRange(float range)
Distance from focus where blur reaches the max (default 14).
Definition Hd2dLook.cpp:25
void setBloomThreshold(float threshold)
HDR bloom threshold (default 1.2).
Definition Hd2dLook.cpp:37
void apply(graphics::Camera3D *camera) const
Write DOF + bloom onto a Camera3D (render-thread).
Definition Hd2dLook.cpp:43
float getBloomThreshold() const
Returns the bloom threshold.
Definition Hd2d.h:321
void setFocusDistance(float distance)
View-space focus plane distance (default 18).
Definition Hd2dLook.cpp:13
static Hd2dLook miniature()
Strong miniature preset matching HD2DURP-style shallow DOF.
Definition Hd2dLook.cpp:55
float getBloomIntensity() const
Returns the bloom intensity.
Definition Hd2d.h:317
float getFocusDistance() const
Returns the focus distance.
Definition Hd2d.h:305
void applyPixelSampler(graphics::Graphics *gfx, graphics::Texture *texture) const
Point-filter a texture for crisp pixel art (nearest / no mip).
Definition Hd2dLook.cpp:49
void setBloomIntensity(float intensity)
HDR bloom intensity (default 0.35).
Definition Hd2dLook.cpp:31
Camera-facing 2D sprite billboard rendered inside the 3D scene.
Definition Hd2d.h:119
int getFrameGridColumns() const
Returns the frame grid columns.
Definition Sprite3D.cpp:146
bool getDoubleSided() const
Returns the double sided.
Definition Sprite3D.cpp:293
bool getDepthWrite() const
Returns the depth write.
Definition Sprite3D.cpp:287
bool isPlaying() const
True when playing.
Definition Sprite3D.cpp:170
float getHeight() const
Returns the height.
Definition Sprite3D.cpp:258
float getPositionY() const
Returns the position y.
Definition Sprite3D.cpp:247
void setFlipX(bool flip)
Flip the sampled frame horizontally / vertically.
Definition Sprite3D.cpp:128
void setPosition(float x, float y, float z)
World position of the pivot (center by default).
Definition Sprite3D.cpp:237
float getPositionZ() const
Returns the position z.
Definition Sprite3D.cpp:248
int getFrameIndex() const
Returns the frame index.
Definition Sprite3D.cpp:160
void update(float dt)
Advance the animation clock and re-orient the billboard toward the attached camera....
Definition Sprite3D.cpp:172
std::string getBillboardMode() const
Returns the billboard mode.
Definition Sprite3D.cpp:305
void play(int start, int end, float fps)
Run a frame animation.
Definition Sprite3D.cpp:162
void setCamera(graphics::Camera3D *camera)
Borrow the camera used for screen alignment, including pitch/roll.
Definition Sprite3D.cpp:189
void setSize(float width, float height)
Billboard size in world units.
Definition Sprite3D.cpp:250
int getFrameCount() const
Total grid frames.
Definition Sprite3D.cpp:148
void stop()
Stops .
Definition Sprite3D.cpp:169
void setVisible(bool visible)
Sets the visible.
Definition Sprite3D.cpp:270
void setFrameIndex(int index)
Jump to a grid frame index, clamped within the grid.
Definition Sprite3D.cpp:150
float getPositionX() const
Returns the position x.
Definition Sprite3D.cpp:246
void setTint(float r, float g, float b, float a=1.f)
Color multiplier (alpha participates in cutout discards).
Definition Sprite3D.cpp:260
graphics::Texture * getTexture() const
Returns the texture.
Definition Sprite3D.cpp:113
float getWidth() const
Returns the width.
Definition Sprite3D.cpp:257
void setDepthWrite(bool enabled)
Whether opaque/cutout texels write depth (required for DOF focus). Default true — matches HD2DURP Dop...
Definition Sprite3D.cpp:283
void setBillboardMode(const std::string &mode)
Billboard orientation mode.
Definition Sprite3D.cpp:295
void setFrame(float u0, float v0, float u1, float v1)
Direct atlas sub-rect frame selection (0..1 UV).
Definition Sprite3D.cpp:115
void setFrameGrid(int columns, int rows)
Configure a sprite-sheet grid (frame 0 = top-left); stops the previous clip.
Definition Sprite3D.cpp:137
void setFlipY(bool flip)
Sets the flip y.
Definition Sprite3D.cpp:132
void setPivot(float x, float y)
Set the image-space pivot; (0,0) is visible top-left, (1,1) bottom-right.
Definition Sprite3D.cpp:230
void setTexture(graphics::Texture *texture)
Albedo texture (a sprite frame / sheet / animation image).
Definition Sprite3D.cpp:106
float getAlphaCutoff() const
Returns the alpha cutoff.
Definition Sprite3D.cpp:281
int getFrameGridRows() const
Returns the frame grid rows.
Definition Sprite3D.cpp:147
bool getVisible() const
Returns the visible.
Definition Sprite3D.cpp:274
void setDoubleSided(bool enabled)
Render both faces of the billboard quad (default true).
Definition Sprite3D.cpp:289
void setAlphaCutoff(float cutoff)
Alpha cutout threshold for the masked material (DopFix-style depth write).
Definition Sprite3D.cpp:276
Extrudes a 2D tile layer into a 3D terrain mesh (HD-2D ground).
Definition Hd2d.h:58
void setWallUV(float u0, float v0, float u1, float v1)
UV sub-rectangle of the atlas used for extruded side walls.
Definition TileMap3D.cpp:68
int getTileCount() const
Number of box tiles baked by the last build.
Definition Hd2d.h:94
graphics::Mesh * buildMesh(graphics::Graphics *gfx, map::TileLayer *layer)
Build and upload the terrain mesh from a tile layer.
Definition TileMap3D.cpp:81
void setTint(float r, float g, float b, float a=1.f)
Tint multiplier applied to the whole terrain.
Definition TileMap3D.cpp:74
float getSideDepth() const
Returns the side depth.
Definition TileMap3D.cpp:62
void setHeightScale(float scale)
World units per unit of tile "height" metadata (default 1).
Definition TileMap3D.cpp:63
float getHeightScale() const
Returns the height scale.
Definition TileMap3D.cpp:67
void setSideDepth(float depth)
Downward side-wall depth in world units (default 6).
Definition TileMap3D.cpp:58
graphics::Renderable3D * buildRenderable(graphics::Graphics *gfx, map::TileLayer *layer)
Build a scene-ready Renderable3D carrying the extruded terrain. The returned entity is already regist...