-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Squashed commit of the following: commit 5fd46e2 Author: Michael Pollind <[email protected]> Date: Mon Nov 29 17:54:39 2021 -0800 chore: update to skinned mesh commit 06f2189 Author: Michael Pollind <[email protected]> Date: Mon Nov 29 12:11:06 2021 -0800 feat: add skinned mesh Material commit 63d817a Author: Michael Pollind <[email protected]> Date: Sun Nov 28 23:11:04 2021 -0800 feat: replace skeletalMesh with skinnedMesh commit 67bd3bf Author: Michael Pollind <[email protected]> Date: Sun Nov 28 21:02:39 2021 -0800 feat: implement skinned mesh
- Loading branch information
Showing
19 changed files
with
1,305 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
101 changes: 101 additions & 0 deletions
101
...c/main/java/org/terasology/engine/core/subsystem/headless/assets/HeadlessSkinnedMesh.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
// Copyright 2021 The Terasology Foundation | ||
// SPDX-License-Identifier: Apache-2.0 | ||
package org.terasology.engine.core.subsystem.headless.assets; | ||
|
||
import com.google.common.collect.Maps; | ||
import org.joml.Vector3f; | ||
import org.joml.Vector3fc; | ||
import org.terasology.engine.rendering.assets.mesh.SkinnedMesh; | ||
import org.terasology.engine.rendering.assets.mesh.SkinnedMeshData; | ||
import org.terasology.engine.rendering.assets.mesh.resource.VertexAttributeBinding; | ||
import org.terasology.engine.rendering.assets.mesh.resource.VertexByteAttributeBinding; | ||
import org.terasology.engine.rendering.assets.skeletalmesh.Bone; | ||
import org.terasology.gestalt.assets.AssetType; | ||
import org.terasology.gestalt.assets.ResourceUrn; | ||
import org.terasology.joml.geom.AABBf; | ||
import org.terasology.joml.geom.AABBfc; | ||
|
||
import java.util.List; | ||
import java.util.Map; | ||
|
||
public class HeadlessSkinnedMesh extends SkinnedMesh { | ||
|
||
private List<Bone> bones; | ||
private Map<String, Bone> boneLookup = Maps.newHashMap(); | ||
private VertexAttributeBinding<Vector3fc, Vector3f> positions; | ||
private VertexByteAttributeBinding boneIndex0; | ||
private VertexByteAttributeBinding boneIndex1; | ||
private VertexByteAttributeBinding boneIndex2; | ||
private VertexByteAttributeBinding boneIndex3; | ||
private AABBf bounds; | ||
|
||
public HeadlessSkinnedMesh(ResourceUrn urn, AssetType<?, SkinnedMeshData> assetType, SkinnedMeshData skinnedMesh) { | ||
super(urn, assetType); | ||
reload(skinnedMesh); | ||
} | ||
|
||
@Override | ||
protected void doReload(SkinnedMeshData data) { | ||
this.boneLookup.clear(); | ||
this.positions = data.positions(); | ||
this.boneIndex0 = data.boneIndex0(); | ||
this.boneIndex1 = data.boneIndex0(); | ||
this.boneIndex2 = data.boneIndex0(); | ||
this.boneIndex3 = data.boneIndex0(); | ||
this.bones.forEach(b -> { | ||
boneLookup.put(b.getName(), b); | ||
}); | ||
getBound(bounds); | ||
} | ||
|
||
@Override | ||
public AABBfc getAABB() { | ||
return bounds; | ||
} | ||
|
||
@Override | ||
public VertexAttributeBinding<Vector3fc, Vector3f> vertices() { | ||
return positions; | ||
} | ||
|
||
@Override | ||
public int elementCount() { | ||
return this.positions.elements(); | ||
} | ||
|
||
@Override | ||
public VertexByteAttributeBinding boneIndex0() { | ||
return boneIndex0; | ||
} | ||
|
||
@Override | ||
public VertexByteAttributeBinding boneIndex1() { | ||
return boneIndex1; | ||
} | ||
|
||
@Override | ||
public VertexByteAttributeBinding boneIndex2() { | ||
return boneIndex2; | ||
} | ||
|
||
@Override | ||
public VertexByteAttributeBinding boneIndex3() { | ||
return boneIndex3; | ||
} | ||
|
||
@Override | ||
public List<Bone> bones() { | ||
return bones; | ||
} | ||
|
||
@Override | ||
public Bone getBone(String boneName) { | ||
return boneLookup.get(boneName); | ||
} | ||
|
||
@Override | ||
public void render() { | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
60 changes: 60 additions & 0 deletions
60
engine/src/main/java/org/terasology/engine/rendering/assets/mesh/SkinnedMesh.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// Copyright 2021 The Terasology Foundation | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package org.terasology.engine.rendering.assets.mesh; | ||
|
||
import org.joml.Vector3f; | ||
import org.joml.Vector3fc; | ||
import org.terasology.engine.rendering.assets.mesh.resource.VertexAttributeBinding; | ||
import org.terasology.engine.rendering.assets.mesh.resource.VertexByteAttributeBinding; | ||
import org.terasology.engine.rendering.assets.skeletalmesh.Bone; | ||
import org.terasology.gestalt.assets.Asset; | ||
import org.terasology.gestalt.assets.AssetType; | ||
import org.terasology.gestalt.assets.DisposableResource; | ||
import org.terasology.gestalt.assets.ResourceUrn; | ||
import org.terasology.joml.geom.AABBf; | ||
import org.terasology.joml.geom.AABBfc; | ||
|
||
import java.util.List; | ||
|
||
public abstract class SkinnedMesh extends Asset<SkinnedMeshData> { | ||
|
||
protected SkinnedMesh(ResourceUrn urn, AssetType<?, SkinnedMeshData> assetType) { | ||
super(urn, assetType); | ||
} | ||
|
||
protected SkinnedMesh(ResourceUrn urn, AssetType<?, SkinnedMeshData> assetType, DisposableResource resource) { | ||
super(urn, assetType, resource); | ||
} | ||
|
||
public abstract AABBfc getAABB(); | ||
|
||
protected AABBf getBound(AABBf dest) { | ||
VertexAttributeBinding<Vector3fc, Vector3f> vertices = this.vertices(); | ||
if (elementCount() == 0) { | ||
dest.set(Float.POSITIVE_INFINITY, | ||
Float.POSITIVE_INFINITY, | ||
Float.POSITIVE_INFINITY, | ||
Float.NEGATIVE_INFINITY, | ||
Float.NEGATIVE_INFINITY, | ||
Float.NEGATIVE_INFINITY); | ||
return dest; | ||
} | ||
Vector3f pos = new Vector3f(); | ||
for (int x = 0; x < elementCount(); x++) { | ||
dest.union(vertices.get(x, pos)); | ||
} | ||
return dest; | ||
} | ||
|
||
public abstract VertexAttributeBinding<Vector3fc, Vector3f> vertices(); | ||
public abstract int elementCount(); | ||
|
||
public abstract VertexByteAttributeBinding boneIndex0(); | ||
public abstract VertexByteAttributeBinding boneIndex1(); | ||
public abstract VertexByteAttributeBinding boneIndex2(); | ||
public abstract VertexByteAttributeBinding boneIndex3(); | ||
public abstract List<Bone> bones(); | ||
public abstract Bone getBone(String name); | ||
public abstract void render(); | ||
} |
33 changes: 33 additions & 0 deletions
33
engine/src/main/java/org/terasology/engine/rendering/assets/mesh/SkinnedMeshData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2021 The Terasology Foundation | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package org.terasology.engine.rendering.assets.mesh; | ||
|
||
import org.joml.Vector4f; | ||
import org.joml.Vector4fc; | ||
import org.terasology.engine.rendering.assets.mesh.resource.AllocationType; | ||
import org.terasology.engine.rendering.assets.mesh.resource.DrawingMode; | ||
import org.terasology.engine.rendering.assets.mesh.resource.VertexAttributeBinding; | ||
import org.terasology.engine.rendering.assets.mesh.resource.VertexByteAttributeBinding; | ||
import org.terasology.engine.rendering.assets.skeletalmesh.Bone; | ||
|
||
import java.util.List; | ||
|
||
public abstract class SkinnedMeshData extends MeshData { | ||
|
||
public SkinnedMeshData() { | ||
this(DrawingMode.TRIANGLES, AllocationType.STATIC); | ||
} | ||
|
||
public SkinnedMeshData(DrawingMode mode, AllocationType allocationType) { | ||
super(mode, allocationType); | ||
} | ||
|
||
public abstract VertexByteAttributeBinding boneIndex0(); | ||
public abstract VertexByteAttributeBinding boneIndex1(); | ||
public abstract VertexByteAttributeBinding boneIndex2(); | ||
public abstract VertexByteAttributeBinding boneIndex3(); | ||
public abstract VertexAttributeBinding<Vector4fc, Vector4f> weight(); | ||
public abstract List<Bone> bones(); | ||
|
||
} |
Oops, something went wrong.