载入中...
搜索中...
未找到
VegetationField.cpp
浏览该文件的文档.
12bool finite(glm::vec3 v) { return std::isfinite(v.x) && std::isfinite(v.y) && std::isfinite(v.z); }
19 return Diagnostic::error(DiagnosticCode::InvalidArgument, message, {}, {}, "graphics.vegetation");
22 return Diagnostic::error(DiagnosticCode::Failed, "vegetation allocation failed", {}, {}, "graphics.vegetation");
31 glm::mix(mask.pixels[size_t(y0) * mask.width + x0], mask.pixels[size_t(y0) * mask.width + x1], x - x0),
32 glm::mix(mask.pixels[size_t(y1) * mask.width + x0], mask.pixels[size_t(y1) * mask.width + x1], x - x0), y - y0);
63Result<void> VegetationField::replace(const VegetationGlobals& globals, std::span<const VegetationElement> elements) {
66 if (!finite(globals.color) || !finite(globals.extras) || !finite(globals.motion) || !finite(globals.vertex) ||
67 !std::isfinite(globals.season) || globals.season < 0.f || globals.season > 4.f || elements.size() > 4096)
75 !unit(e.opacity) || !unit(e.edgeFade) || !finite(e.value) || e.layers == 0 || (e.layers & ~0x1ffu))
76 return Result<void>::failure(invalid("invalid element shape, channel, blend, layers or parameters"));
85 if (totalPixels > 4 * 1024 * 1024) return Result<void>::failure(invalid("field mask pixel budget exceeded"));
87 if (!finite(pixel) || !unit(pixel.a)) return Result<void>::failure(invalid("invalid mask pixel"));
102VegetationSample VegetationField::evaluate(glm::vec3 position, std::array<uint8_t, 4> layers) const {
103 std::array<glm::vec4, 4> values{globals_.color, globals_.extras, globals_.motion, globals_.vertex};
122 values[channel] = blend(values[channel], target, t * t * (3.f - 2.f * t) * e.opacity * mask.a, e.blend);
127Result<VegetationSample> VegetationField::sample(glm::vec3 position, std::array<uint8_t, 4> layers) const {
136Result<VegetationAtlas> VegetationField::bake(glm::vec3 center, glm::vec3 extent, uint32_t width, uint32_t height,
138 if (!finite(center) || !finite(extent) || extent.x < 1e-4f || extent.y < 1e-4f || extent.z < 1e-4f || width == 0 ||
140 return Result<VegetationAtlas>::failure(invalid("invalid atlas geometry, dimensions or layer"));
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Result< std::vector< VegetationElement > > snapshotElements() const
Return an owning, priority-ordered element snapshot for revision-safe editor previews.
Definition VegetationField.cpp:53
Result< void > replace(const VegetationGlobals &globals, std::span< const VegetationElement > elements)
Validate and atomically replace the entire field; failure preserves prior state.
Definition VegetationField.cpp:63
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
@ Multiply
@ Ellipsoid
@ InvalidArgument
@ Failed
Definition Container.h:602
Four owning arrays in row-major X/Z order at texel centers.
Definition VegetationField.h:66
std::array< std::vector< glm::vec4 >, 4 > channels
Definition VegetationField.h:69
Owning global defaults. Extras = emission, wetness, overlay, alpha. Motion = signed world X/Z directi...
Definition VegetationField.h:52
Owning sampled field channels; no lifetime dependency on the field.
Definition VegetationField.h:61