载入中...
搜索中...
未找到
DynamicMeshUvPaintSession.cpp
浏览该文件的文档.
2
3#include "image/ImageData.h"
5
6namespace eve::procgen {
7namespace {
8bool validMesh(const MeshBuild& mesh) {
9 return !mesh.empty() && mesh.positions().size() % 3u == 0u &&
10 mesh.uvs().size() == static_cast<std::size_t>(mesh.getVertexCount()) * 2u;
11}
12}
14 if (!validMesh(mesh)) return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "dynamic UV paint requires mesh UVs", "mesh", {}, "procgen.dynamicMeshUvPaint"));
15 auto initialized = paint_.initializeResult(image);
16 if (!initialized.ok()) return initialized;
17 mesh_ = mesh;
18 ++meshRevision_;
19 initialized_ = true;
20 return Result<void>::success();
21}
23 if (!initialized_) return Result<void>::failure(Diagnostic::error(DiagnosticCode::PreconditionViolation, "dynamic UV paint is not initialized", "mesh", {}, "procgen.dynamicMeshUvPaint"));
24 if (!validMesh(mesh)) return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "updated dynamic mesh requires UVs", "mesh", {}, "procgen.dynamicMeshUvPaint"));
25 mesh_ = mesh; ++meshRevision_; return Result<void>::success();
26}
28 float radiusPixels, float r, float g, float b, float a,
29 bool wrapU, bool wrapV) {
30 if (!initialized_) return Result<void>::failure(Diagnostic::error(DiagnosticCode::PreconditionViolation, "dynamic UV paint is not initialized", "mesh", {}, "procgen.dynamicMeshUvPaint"));
31 auto uv = mapMeshSurfacePointToUvResult(mesh_, triangleIndex, x, y, z);
32 if (!uv.ok()) return Result<void>::failure(uv.status());
33 auto painted = paint_.paintCircleResult(uv.value().u, uv.value().v, radiusPixels, r, g, b, a, wrapU, wrapV);
34 if (!painted.ok()) return Result<void>::failure(painted.status());
35 return Result<void>::success();
36}
41} // namespace eve::procgen
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
float uv
tensor::Graph g
Definition GpuGraph.cpp:7
vk::UniqueImage image
float u
Definition Grass.cpp:233
double r
MeleePoint3 b
Definition MeleeHit.cpp:41
MeleePoint3 a
Definition MeleeHit.cpp:40
Mesh * mesh
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
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Represents raw pixel data.
Definition ImageData.h:38
Result< void > undoResult()
Restore the previous committed paint transaction.
Result< std::unique_ptr< ImageData > > currentImageResult() const
Return a caller-owned current pixel snapshot.
Result< void > initializeResult(const ImageData &image)
Initialize with an owning RGBA8 copy and clear history.
Result< UvPaintReceipt > paintCircleResult(float u, float v, float radiusPixels, float r, float g, float b, float a, bool wrapU=false, bool wrapV=false)
Paint one circular UV brush as a single undoable transaction.
Result< void > undoResult()
Undo the last paint transaction without changing mesh topology.
Result< void > paintSurfacePointResult(int triangleIndex, float x, float y, float z, float radiusPixels, float r, float g, float b, float a, bool wrapU=false, bool wrapV=false)
Map a triangle hit to UV and commit one canonical circular paint transaction.
Result< void > initializeResult(const MeshBuild &mesh, const image::ImageData &image)
Initialize owning mesh and RGBA8 image snapshots atomically.
Result< std::unique_ptr< image::ImageData > > currentImageResult() const
Return an owning current pixel snapshot.
Result< void > updateMeshResult(const MeshBuild &mesh)
Replace only the dynamic mesh snapshot after deformation.
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
Result< MeshSurfaceUv > mapMeshSurfacePointToUvResult(const MeshBuild &mesh, int triangleIndex, float x, float y, float z)
Map a surface point on a dynamic-mesh triangle to its interpolated UV.