载入中...
搜索中...
未找到
GraphicsFoliage.cpp
浏览该文件的文档.
1#include <array>
2#include <cstdint>
3#include "graphics/Graphics.h"
4#include "graphics/Material.h"
5#include "image/ImageData.h"
6
7namespace eve::graphics {
8Result<void> Graphics::configureFoliageWind(Material* material, float directionX, float directionZ, float strength,
9 float bending, float bendingSpeed, float branch, float branchSpeed,
10 float flutter, float flutterSpeed, float fadeDistance, float bendFactor) {
11 if (!material)
12 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "null foliage material", {}, {},
13 "graphics.foliage.wind"));
15 std::array<uint16_t, 9 * 4> neutral{};
16 for (size_t layer = 0; layer < 9; ++layer) {
17 neutral[layer * 4] = 0x3c00; // 1.0
18 neutral[layer * 4 + 2] = 0x3800; // 0.5
19 }
20 auto uploaded = newTextureArrayRgba16f(1, 1, 9, neutral);
21 if (!uploaded) return Result<void>::failure(uploaded.status());
22 foliageWindMotionTexture_ = uploaded.value();
23 }
25 image::ImageData noise(4, 4, "RGBA8");
26 for (int y = 0; y < 4; ++y) {
27 for (int x = 0; x < 4; ++x) {
28 const float value = float((x * 73 + y * 151 + x * y * 29 + 37) & 255) / 255.f;
29 noise.setPixel(x, y, image::ImageData::Colorf{value, 1.f - value, .5f, 1.f});
30 }
31 }
34 return Result<void>::failure(Diagnostic::error(DiagnosticCode::Failed, "foliage noise upload failed", {},
35 {}, "graphics.foliage.wind"));
36 }
37 return material->setFoliageWind(foliageWindMotionTexture_, foliageWindNoiseTexture_, directionX, directionZ,
38 strength, bending, bendingSpeed, branch, branchSpeed, flutter, flutterSpeed,
39 fadeDistance, bendFactor);
40}
41} // namespace eve::graphics
double value
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
TileLayer * layer
Material * material
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 failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Result< void > configureFoliageWind(Material *material, float directionX, float directionZ, float strength, float bending, float bendingSpeed, float branch, float branchSpeed, float flutter, float flutterSpeed, float fadeDistance, float bendFactor)
Apply a source-derived foliage wind profile using graphics-owned shared field textures....
Texture * foliageWindNoiseTexture_
Definition Graphics.h:2288
Texture * newTextureFromImageData(image::ImageData *data, bool repeatU=false, bool repeatV=false)
Creates a texture from image data. @ownership Caller deletes unless documented otherwise.
Texture * foliageWindMotionTexture_
Definition Graphics.h:2287
virtual Result< Texture * > newTextureArrayRgba16f(uint32_t width, uint32_t height, uint32_t layers, std::span< const uint16_t > rgbaHalf)
Upload a sampled 2D array of tightly packed linear RGBA16F texels.
Packages shading method + surface parameters into one attachable asset.
Definition Material.h:35
Represents raw pixel data.
Definition ImageData.h:38
void setPixel(int x, int y, const Colorf &p)
Sets the pixel at location (x,y).
medialoader::Colorf Colorf
Definition ImageData.h:41
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25