mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-28 21:19:52 +01:00
all objects
This commit is contained in:
1 parent
14a2658a83
commit
965acadc3f
3 files changed
+48
-12
No files matched your search
@@ -224,10 +224,24 @@ public partial class GameInterface
|
||||
|
||||
var visualData = row.Get<UObject>("VisualData");
|
||||
var meshSettings = visualData.Get<FStructFallback>("MeshSettings");
|
||||
// var collisionMesh = meshSettings.Get<UStaticMesh>("CollisionMesh");
|
||||
var mesh = meshSettings.Get<UStaticMesh>("Mesh");
|
||||
var meshes = new List<UStaticMesh>();
|
||||
|
||||
var gltf = new MonoGltf(mesh);
|
||||
foreach (var property in meshSettings.Properties)
|
||||
{
|
||||
var name = property.Name.Text;
|
||||
|
||||
if (name == "CollisionMesh")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (meshSettings.TryGet<UStaticMesh>(name, out var mesh))
|
||||
{
|
||||
meshes.Add(mesh);
|
||||
}
|
||||
}
|
||||
|
||||
var gltf = new MonoGltf(meshes);
|
||||
|
||||
return gltf.Write($"{tag}/{part}");
|
||||
}
|
||||
|
||||
@@ -41,13 +41,15 @@ public class MonoGltf
|
||||
};
|
||||
readonly byte[] stubBytes = File.ReadAllBytes("../game/stub/small.png");
|
||||
|
||||
public MonoGltf(UStaticMesh staticMesh)
|
||||
public MonoGltf(List<UStaticMesh> meshes)
|
||||
{
|
||||
var options = new ExporterOptions() { TextureFormat = ETextureFormat.Jpeg };
|
||||
|
||||
staticMesh.TryConvert(out var convertedMesh);
|
||||
foreach (var mesh in meshes)
|
||||
{
|
||||
mesh.TryConvert(out var converted);
|
||||
var lod0 =
|
||||
convertedMesh.LODs.Find(lod => !lod.SkipLod) ?? throw new Exception("Failed to find lod0");
|
||||
converted.LODs.Find(lod => !lod.SkipLod) ?? throw new Exception("Failed to find lod0");
|
||||
|
||||
var emptyMaterial = new MaterialBuilder("empty_material");
|
||||
var materialMap = new Dictionary<string, MaterialBuilder>();
|
||||
@@ -125,6 +127,7 @@ public class MonoGltf
|
||||
scene.AddRigidMesh(meshBuilder, Matrix4x4.Identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] Write(string name)
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@ import { OrbitControls } from "@react-three/drei";
|
||||
import { Canvas, useLoader } from "@react-three/fiber";
|
||||
import { Mesh, MeshStandardMaterial } from "three";
|
||||
import { GLTFLoader } from "three-stdlib";
|
||||
import { useProtagonist } from "../../hooks/useProtagonist";
|
||||
import styles from "./index.module.css";
|
||||
|
||||
export function TankopediaSandbox() {
|
||||
@@ -22,11 +23,19 @@ export function TankopediaSandbox() {
|
||||
}
|
||||
|
||||
function Content() {
|
||||
const gltf = useLoader(
|
||||
GLTFLoader,
|
||||
"/models/tanks/TankEntity.A128_Concept_1b/hull.glb",
|
||||
);
|
||||
const tank = useProtagonist();
|
||||
|
||||
const turret = useLoader(
|
||||
GLTFLoader,
|
||||
`/models/tanks/${tank.id}/turret_01.glb`,
|
||||
);
|
||||
const gun = useLoader(GLTFLoader, `/models/tanks/${tank.id}/gun_01.glb`);
|
||||
const hull = useLoader(GLTFLoader, `/models/tanks/${tank.id}/hull.glb`);
|
||||
const chassis = useLoader(GLTFLoader, `/models/tanks/${tank.id}/chassis.glb`);
|
||||
|
||||
const gltfs = [turret, gun, hull, chassis];
|
||||
|
||||
for (const gltf of gltfs) {
|
||||
gltf.scene.traverse((child) => {
|
||||
if (
|
||||
child instanceof Mesh &&
|
||||
@@ -39,11 +48,21 @@ function Content() {
|
||||
child.castShadow = true;
|
||||
child.receiveShadow = true;
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<group>
|
||||
<primitive object={gltf.scene} />
|
||||
<primitive object={chassis.scene} />
|
||||
<primitive object={hull.scene} />
|
||||
</group>
|
||||
|
||||
<group position={[0, 0, 5]}>
|
||||
<primitive object={turret.scene} />
|
||||
</group>
|
||||
|
||||
<group position={[0, 0, -5]}>
|
||||
<primitive object={gun.scene} />
|
||||
</group>
|
||||
|
||||
<spotLight
|
||||
@@ -54,7 +73,7 @@ function Content() {
|
||||
/>
|
||||
<ambientLight />
|
||||
|
||||
<mesh receiveShadow position={[0, -1, 0]} rotation={[-Math.PI / 2, 0, 0]}>
|
||||
<mesh receiveShadow rotation={[-Math.PI / 2, 0, 0]}>
|
||||
<planeGeometry args={[2 ** 8, 2 ** 8]} />
|
||||
<meshStandardMaterial color="gray" />
|
||||
</mesh>
|
||||
|
||||
Reference in new issue
Block a user