fix block LOD chunks rendering
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-05-28 18:07:56 -04:00
parent 649e2fb0cf
commit 258d73be9a
4 changed files with 31 additions and 35 deletions

View File

@ -40,6 +40,7 @@ public class ClientEntityUtils {
public static void reositionEntity(Entity entity, Vector3d position, Quaterniond rotation){
//reposition entity
CollisionObjUtils.clientPositionCharacter(entity, position, rotation);
EntityUtils.getPosition(entity).set(position);
}
/**

View File

@ -79,7 +79,7 @@ public class BlockChunkEntity {
EntityCreationUtils.makeEntityDrawablePreexistingModel(solidsEnt, modelPath);
if(levelOfDetail == BlockChunkData.LOD_FULL_RES){
PhysicsEntityUtils.clientAttachTriGeomCollider(solidsEnt, data);
CollisionObjUtils.clientPositionCharacter(solidsEnt, new Vector3d(EntityUtils.getPosition(solidsEnt)), new Quaterniond());
ClientEntityUtils.reositionEntity(solidsEnt, new Vector3d(EntityUtils.getPosition(solidsEnt)), new Quaterniond());
} else {
EntityCreationUtils.bypassShadowPass(solidsEnt);
EntityCreationUtils.bypassVolumetics(solidsEnt);

View File

@ -194,21 +194,24 @@ public class BlockMeshgen {
* @param depth The depth of the box
* @param blockType The type of block
* @param indexOffset The offset for the indices that will be added (ie, if there are already vertices in the verts list, pass in the size of the vert list)
* @param scalingFactor The factor to scale by
*/
protected static void meshifyBox(MeshGenStore meshStore, QuadMesh quad, int depth, int blockType){
protected static void meshifyBox(MeshGenStore meshStore, QuadMesh quad, int depth, int blockType, int scalingFactor){
int indexOffset = meshStore.getVertCount() / 3;
float finalScalingFactor = scalingFactor * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
//
//face 1
//
int samplerIndex = Globals.blockTextureAtlas.getVoxelTypeOffset(blockType);
//verts
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * finalScalingFactor, quad.y * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, quad.y * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert(quad.x * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, quad.z * finalScalingFactor);
//indices
meshStore.addFace(indexOffset + 0, indexOffset + 2, indexOffset + 3);
meshStore.addFace(indexOffset + 0, indexOffset + 3, indexOffset + 1);
@ -233,10 +236,10 @@ public class BlockMeshgen {
//
//verts
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * finalScalingFactor, quad.y * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert(quad.x * finalScalingFactor, quad.y * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
meshStore.addVert(quad.x * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert(quad.x * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
//indices
meshStore.addFace(indexOffset + 4, indexOffset + 7, indexOffset + 6);
meshStore.addFace(indexOffset + 4, indexOffset + 5, indexOffset + 7);
@ -261,14 +264,10 @@ public class BlockMeshgen {
//
//verts
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
// verts.add(new Vector3f(quad.x, quad.y, quad.z ).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x, quad.y, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x + quad.w, quad.y, quad.z ).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x + quad.w, quad.y, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
meshStore.addVert(quad.x * finalScalingFactor, quad.y * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert(quad.x * finalScalingFactor, quad.y * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, quad.y * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, quad.y * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
//indices
meshStore.addFace(indexOffset + 8, indexOffset + 10, indexOffset + 11);
meshStore.addFace(indexOffset + 9, indexOffset + 8, indexOffset + 11);
@ -293,14 +292,10 @@ public class BlockMeshgen {
//
//verts
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert(quad.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
// verts.add(new Vector3f(quad.x, quad.y, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x + quad.w, quad.y, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x, quad.y + quad.h, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x + quad.w, quad.y + quad.h, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
meshStore.addVert(quad.x * finalScalingFactor, quad.y * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, quad.y * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
meshStore.addVert(quad.x * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
//indices
meshStore.addFace(indexOffset + 12, indexOffset + 15, indexOffset + 14);
meshStore.addFace(indexOffset + 12, indexOffset + 13, indexOffset + 15);
@ -326,10 +321,10 @@ public class BlockMeshgen {
//
//verts
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, quad.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.y + quad.h) * BlockChunkData.BLOCK_SIZE_MULTIPLIER, (quad.z + depth) * BlockChunkData.BLOCK_SIZE_MULTIPLIER);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, quad.y * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, quad.y * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, quad.z * finalScalingFactor);
meshStore.addVert((quad.x + quad.w) * finalScalingFactor, (quad.y + quad.h) * finalScalingFactor, (quad.z + depth) * finalScalingFactor);
// verts.add(new Vector3f(quad.x + quad.w, quad.y, quad.z ).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x + quad.w, quad.y, quad.z + depth).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
// verts.add(new Vector3f(quad.x + quad.w, quad.y + quad.h, quad.z ).mul(BlockChunkData.BLOCK_SIZE_MULTIPLIER));
@ -426,7 +421,7 @@ public class BlockMeshgen {
if(quad1.x == quad2.x && quad1.y == quad2.y && quad1.w == quad2.w && quad1.h == quad2.h && quad1.z + zEnd == quad2.z){
zEnd++;
} else {
BlockMeshgen.meshifyBox(meshGenStore,quad1,zEnd,quad1.type);
BlockMeshgen.meshifyBox(meshGenStore,quad1,zEnd,quad1.type,scalingFactor);
quad1 = quad2;
// BlockSingleShape blockSingleShape = BlockMeshgen.copyDataToShape(meshGenStore, vertCount, faceCount);
@ -439,7 +434,7 @@ public class BlockMeshgen {
i = i + zEnd;
}
if(quad1 != null){
BlockMeshgen.meshifyBox(meshGenStore,quad1,zEnd,quad1.type);
BlockMeshgen.meshifyBox(meshGenStore,quad1,zEnd,quad1.type,scalingFactor);
// BlockSingleShape blockSingleShape = BlockMeshgen.copyDataToShape(meshGenStore, vertCount, faceCount);
// vertCount = meshGenStore.getVertCount();
// faceCount = meshGenStore.getFaceCount();

View File

@ -297,7 +297,7 @@ public class BlockMeshgenTests {
quad.set(0, 0, 0, 1, 1,1);
//call
BlockMeshgen.meshifyBox(store, quad, 1, 1);
BlockMeshgen.meshifyBox(store, quad, 1, 1, 1);
//error check result
@ -355,7 +355,7 @@ public class BlockMeshgenTests {
quad.set(0, 0, 0, 1, 1, 1);
//call
BlockMeshgen.meshifyBox(store, quad, 1, 1);
BlockMeshgen.meshifyBox(store, quad, 1, 1, 1);
//error check result
@ -411,7 +411,7 @@ public class BlockMeshgenTests {
quad.set(0, 0, 0, 1, 1, 1);
//call
BlockMeshgen.meshifyBox(store, quad, 1, 1);
BlockMeshgen.meshifyBox(store, quad, 1, 1, 1);
//error check result