mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
model transformations
This commit is contained in:
1 parent
c6c0e02fea
commit
333c310d5b
2 files changed
+35
-17
No files matched your search
@@ -32,8 +32,8 @@ public class MonoGltf
|
|||||||
readonly SceneBuilder scene = new();
|
readonly SceneBuilder scene = new();
|
||||||
readonly Dictionary<string, MaterialBuilder> materialMap = [];
|
readonly Dictionary<string, MaterialBuilder> materialMap = [];
|
||||||
|
|
||||||
readonly MaterialBuilder emptyMaterial = new("empty_material");
|
static readonly MaterialBuilder emptyMaterial = new("empty_material");
|
||||||
readonly ExporterOptions options = new() { TextureFormat = ETextureFormat.Jpeg };
|
static readonly ExporterOptions options = new() { TextureFormat = ETextureFormat.Jpeg };
|
||||||
public static readonly Dictionary<string, KnownChannel[]> knownChannels = new()
|
public static readonly Dictionary<string, KnownChannel[]> knownChannels = new()
|
||||||
{
|
{
|
||||||
{ "BaseColor", [KnownChannel.BaseColor] },
|
{ "BaseColor", [KnownChannel.BaseColor] },
|
||||||
@@ -41,7 +41,8 @@ public class MonoGltf
|
|||||||
{ "RMAO", [KnownChannel.MetallicRoughness, KnownChannel.Occlusion] },
|
{ "RMAO", [KnownChannel.MetallicRoughness, KnownChannel.Occlusion] },
|
||||||
// { "CDE", ?? },
|
// { "CDE", ?? },
|
||||||
};
|
};
|
||||||
readonly byte[] stubBytes = File.ReadAllBytes("../game/stub/small.png");
|
static readonly byte[] stubBytes = File.ReadAllBytes("../game/stub/small.png");
|
||||||
|
static readonly float scaleCorrection = 0.01f;
|
||||||
|
|
||||||
public MonoGltf(FStructFallback settings)
|
public MonoGltf(FStructFallback settings)
|
||||||
{
|
{
|
||||||
@@ -59,23 +60,43 @@ public class MonoGltf
|
|||||||
|
|
||||||
if (settings.TryGet<UStaticMesh>(key, out var staticMesh))
|
if (settings.TryGet<UStaticMesh>(key, out var staticMesh))
|
||||||
{
|
{
|
||||||
AddMesh(key, parent, staticMesh);
|
AddMesh(parent.CreateNode(key), staticMesh);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.TryGet<USkeletalMesh>(key, out var skeletalMesh))
|
if (settings.TryGet<USkeletalMesh>(key, out var skeletalMesh))
|
||||||
{
|
{
|
||||||
AddMesh(key, parent, skeletalMesh);
|
AddMesh(parent.CreateNode(key), skeletalMesh);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.TryGet<FStructFallback[]>(key, out var array))
|
if (settings.TryGet<FStructFallback[]>(key, out var array))
|
||||||
{
|
{
|
||||||
var group = parent.CreateNode(key);
|
|
||||||
|
|
||||||
foreach (var item in array)
|
foreach (var item in array)
|
||||||
{
|
{
|
||||||
Traverse(item, group);
|
Traverse(item, parent.CreateNode(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == "BoneTransform")
|
||||||
|
{
|
||||||
|
var transform = settings.Get<FStructFallback>(key);
|
||||||
|
|
||||||
|
if (transform.TryGet<FQuat>("Rotation", out var rotation))
|
||||||
|
{
|
||||||
|
parent.WithLocalRotation(rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (transform.TryGet<FVector>("Translation", out var translation))
|
||||||
|
{
|
||||||
|
parent.WithLocalTranslation(SwapYZ(translation) * scaleCorrection);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (transform.TryGet<FVector>("Scale3D", out var scale))
|
||||||
|
{
|
||||||
|
parent.WithLocalScale(SwapYZ(scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@@ -87,10 +108,8 @@ public class MonoGltf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddMesh(string key, NodeBuilder parent, UObject mesh)
|
void AddMesh(NodeBuilder meshNode, UObject mesh)
|
||||||
{
|
{
|
||||||
var meshNode = parent.CreateNode(key);
|
|
||||||
|
|
||||||
if (mesh is UStaticMesh staticMesh)
|
if (mesh is UStaticMesh staticMesh)
|
||||||
{
|
{
|
||||||
staticMesh.TryConvert(out var convertedStaticMesh);
|
staticMesh.TryConvert(out var convertedStaticMesh);
|
||||||
@@ -236,17 +255,17 @@ public class MonoGltf
|
|||||||
) PrepareTriangles(CMeshVertex vert1, CMeshVertex vert2, CMeshVertex vert3)
|
) PrepareTriangles(CMeshVertex vert1, CMeshVertex vert2, CMeshVertex vert3)
|
||||||
{
|
{
|
||||||
var v1 = new VertexPositionNormalTangent(
|
var v1 = new VertexPositionNormalTangent(
|
||||||
SwapYZ(vert1.Position * 0.01f),
|
SwapYZ(vert1.Position * scaleCorrection),
|
||||||
SwapYZAndNormalize((FVector)vert1.Normal),
|
SwapYZAndNormalize((FVector)vert1.Normal),
|
||||||
SwapYZAndNormalize((Vector4)vert1.Tangent)
|
SwapYZAndNormalize((Vector4)vert1.Tangent)
|
||||||
);
|
);
|
||||||
var v2 = new VertexPositionNormalTangent(
|
var v2 = new VertexPositionNormalTangent(
|
||||||
SwapYZ(vert2.Position * 0.01f),
|
SwapYZ(vert2.Position * scaleCorrection),
|
||||||
SwapYZAndNormalize((FVector)vert2.Normal),
|
SwapYZAndNormalize((FVector)vert2.Normal),
|
||||||
SwapYZAndNormalize((Vector4)vert2.Tangent)
|
SwapYZAndNormalize((Vector4)vert2.Tangent)
|
||||||
);
|
);
|
||||||
var v3 = new VertexPositionNormalTangent(
|
var v3 = new VertexPositionNormalTangent(
|
||||||
SwapYZ(vert3.Position * 0.01f),
|
SwapYZ(vert3.Position * scaleCorrection),
|
||||||
SwapYZAndNormalize((FVector)vert3.Normal),
|
SwapYZAndNormalize((FVector)vert3.Normal),
|
||||||
SwapYZAndNormalize((Vector4)vert3.Tangent)
|
SwapYZAndNormalize((Vector4)vert3.Tangent)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ export function TankopediaSandbox({ parameters }: TankopediaSandboxProps) {
|
|||||||
<div className={styles.wrapper}>
|
<div className={styles.wrapper}>
|
||||||
<div className={styles.sandbox}>
|
<div className={styles.sandbox}>
|
||||||
<Canvas
|
<Canvas
|
||||||
// scene={{ fog: new FogExp2("black", 0.05) }}
|
|
||||||
camera={{ fov: 40 }}
|
camera={{ fov: 40 }}
|
||||||
shadows
|
shadows
|
||||||
className={styles.canvas}
|
className={styles.canvas}
|
||||||
@@ -43,11 +42,11 @@ function Content({ parameters }: TankopediaSandboxProps) {
|
|||||||
<primitive object={hull} />
|
<primitive object={hull} />
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
<group position={[19.515463 / 100, 129.6958 / 100, 0.0039617573 / 100]}>
|
<group>
|
||||||
<primitive object={turret} />
|
<primitive object={turret} />
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
<group position={[154.39078 / 100, 178.7401 / 100, 0.11611016 / 100]}>
|
<group>
|
||||||
<primitive object={gun} />
|
<primitive object={gun} />
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user