forked from mirror/ObjToSchematic
Added some voxelising tests
This commit is contained in:
parent
ae648e4a95
commit
69f38a9362
@ -51,6 +51,7 @@ export class Mesh extends Warnable {
|
|||||||
this._loadedTextures = {};
|
this._loadedTextures = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Always check
|
||||||
public processMesh() {
|
public processMesh() {
|
||||||
this._checkMesh();
|
this._checkMesh();
|
||||||
this._checkMaterials();
|
this._checkMaterials();
|
||||||
|
@ -295,6 +295,7 @@ export const PALETTES_DIR = path.join(RESOURCES_DIR, './palettes/');
|
|||||||
export const STATIC_DIR = path.join(RESOURCES_DIR, './static/');
|
export const STATIC_DIR = path.join(RESOURCES_DIR, './static/');
|
||||||
export const SHADERS_DIR = path.join(RESOURCES_DIR, './shaders/');
|
export const SHADERS_DIR = path.join(RESOURCES_DIR, './shaders/');
|
||||||
export const TOOLS_DIR = path.join(BASE_DIR, './tools/');
|
export const TOOLS_DIR = path.join(BASE_DIR, './tools/');
|
||||||
|
export const TESTS_DATA_DIR = path.join(BASE_DIR, './tests/data/');
|
||||||
|
|
||||||
export function getRandomID(): string {
|
export function getRandomID(): string {
|
||||||
return (Math.random() + 1).toString(36).substring(7);
|
return (Math.random() + 1).toString(36).substring(7);
|
||||||
|
@ -18,7 +18,7 @@ export interface VoxelMeshParams {
|
|||||||
desiredHeight: number,
|
desiredHeight: number,
|
||||||
useMultisampleColouring: boolean,
|
useMultisampleColouring: boolean,
|
||||||
textureFiltering: TextureFiltering,
|
textureFiltering: TextureFiltering,
|
||||||
ambientOcclusionEnabled: boolean,
|
ambientOcclusionEnabled: boolean, // TODO: Refactor into rendering
|
||||||
}
|
}
|
||||||
|
|
||||||
export class VoxelMesh {
|
export class VoxelMesh {
|
||||||
@ -55,6 +55,13 @@ export class VoxelMesh {
|
|||||||
return this._voxelsHash.has(pos);
|
return this._voxelsHash.has(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getVoxelAt(pos: Vector3) {
|
||||||
|
const voxelIndex = this._voxelsHash.get(pos);
|
||||||
|
if (voxelIndex !== undefined) {
|
||||||
|
return this._voxels[voxelIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public getMesh() {
|
public getMesh() {
|
||||||
return this._mesh;
|
return this._mesh;
|
||||||
}
|
}
|
||||||
|
82
tests/data/cube.mtl
Normal file
82
tests/data/cube.mtl
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# Blender 3.1.0 MTL File: 'None'
|
||||||
|
# www.blender.org
|
||||||
|
|
||||||
|
newmtl black
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.000000 0.000000 0.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl blue
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.000000 0.000000 1.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl cyan
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.000000 1.000000 1.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl green
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.000000 1.000000 0.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl magenta
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 1.000000 0.000000 1.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl red
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 1.000000 0.000000 0.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl white
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 1.000000 1.000000 1.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
|
||||||
|
newmtl yellow
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 1.000000 1.000000 0.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
123
tests/data/cube.obj
Normal file
123
tests/data/cube.obj
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
# Blender 3.1.0
|
||||||
|
# www.blender.org
|
||||||
|
mtllib cube.mtl
|
||||||
|
o Cube
|
||||||
|
v -1.000000 -1.000000 1.000000
|
||||||
|
v -1.000000 1.000000 1.000000
|
||||||
|
v -1.000000 -1.000000 -1.000000
|
||||||
|
v -1.000000 1.000000 -1.000000
|
||||||
|
v 1.000000 -1.000000 1.000000
|
||||||
|
v 1.000000 1.000000 1.000000
|
||||||
|
v 1.000000 -1.000000 -1.000000
|
||||||
|
v 1.000000 1.000000 -1.000000
|
||||||
|
v -1.000000 -1.000000 0.000000
|
||||||
|
v -1.000000 1.000000 0.000000
|
||||||
|
v 1.000000 -1.000000 0.000000
|
||||||
|
v 1.000000 1.000000 0.000000
|
||||||
|
v -1.000000 0.000000 1.000000
|
||||||
|
v -1.000000 0.000000 -1.000000
|
||||||
|
v 1.000000 0.000000 -1.000000
|
||||||
|
v 1.000000 0.000000 1.000000
|
||||||
|
v 1.000000 0.000000 0.000000
|
||||||
|
v -1.000000 0.000000 0.000000
|
||||||
|
v 0.000000 -1.000000 -1.000000
|
||||||
|
v 0.000000 1.000000 -1.000000
|
||||||
|
v 0.000000 -1.000000 1.000000
|
||||||
|
v 0.000000 1.000000 1.000000
|
||||||
|
v 0.000000 1.000000 0.000000
|
||||||
|
v 0.000000 -1.000000 0.000000
|
||||||
|
v 0.000000 0.000000 1.000000
|
||||||
|
v 0.000000 0.000000 -1.000000
|
||||||
|
vn -1.0000 -0.0000 -0.0000
|
||||||
|
vn -0.0000 -0.0000 -1.0000
|
||||||
|
vn 1.0000 -0.0000 -0.0000
|
||||||
|
vn -0.0000 -0.0000 1.0000
|
||||||
|
vn -0.0000 -1.0000 -0.0000
|
||||||
|
vn -0.0000 1.0000 -0.0000
|
||||||
|
vt 0.375000 0.000000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.125000 0.750000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.375000 0.250000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 0.625000 0.250000
|
||||||
|
vt 0.375000 0.750000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.375000 0.500000
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.375000 0.125000
|
||||||
|
vt 0.125000 0.625000
|
||||||
|
vt 0.875000 0.625000
|
||||||
|
vt 0.625000 0.125000
|
||||||
|
vt 0.375000 0.625000
|
||||||
|
vt 0.625000 0.625000
|
||||||
|
vt 0.500000 0.000000
|
||||||
|
vt 0.500000 1.000000
|
||||||
|
vt 0.500000 0.250000
|
||||||
|
vt 0.500000 0.500000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.500000 0.625000
|
||||||
|
vt 0.500000 0.125000
|
||||||
|
vt 0.375000 0.375000
|
||||||
|
vt 0.250000 0.500000
|
||||||
|
vt 0.750000 0.500000
|
||||||
|
vt 0.625000 0.375000
|
||||||
|
vt 0.375000 0.875000
|
||||||
|
vt 0.250000 0.750000
|
||||||
|
vt 0.750000 0.750000
|
||||||
|
vt 0.625000 0.875000
|
||||||
|
vt 0.750000 0.625000
|
||||||
|
vt 0.250000 0.625000
|
||||||
|
vt 0.500000 0.875000
|
||||||
|
vt 0.500000 0.375000
|
||||||
|
s 0
|
||||||
|
usemtl blue
|
||||||
|
f 18/27/1 10/18/1 4/10/1 14/23/1
|
||||||
|
usemtl green
|
||||||
|
f 26/39/2 20/31/2 8/14/2 15/24/2
|
||||||
|
usemtl red
|
||||||
|
f 17/26/3 12/20/3 6/12/3 16/25/3
|
||||||
|
usemtl white
|
||||||
|
f 25/38/4 22/35/4 2/4/4 13/22/4
|
||||||
|
usemtl yellow
|
||||||
|
f 24/37/5 11/19/5 5/11/5 21/33/5
|
||||||
|
usemtl white
|
||||||
|
f 23/36/6 10/17/6 2/5/6 22/34/6
|
||||||
|
usemtl blue
|
||||||
|
f 20/30/6 4/9/6 10/17/6 23/36/6
|
||||||
|
usemtl cyan
|
||||||
|
f 19/29/5 7/13/5 11/19/5 24/37/5
|
||||||
|
usemtl green
|
||||||
|
f 15/24/3 8/14/3 12/20/3 17/26/3
|
||||||
|
usemtl white
|
||||||
|
f 13/21/1 2/6/1 10/18/1 18/27/1
|
||||||
|
usemtl black
|
||||||
|
f 1/1/1 13/21/1 18/27/1 9/15/1
|
||||||
|
usemtl cyan
|
||||||
|
f 7/13/3 15/24/3 17/26/3 11/19/3
|
||||||
|
usemtl black
|
||||||
|
f 21/32/4 25/38/4 13/22/4 1/2/4
|
||||||
|
usemtl yellow
|
||||||
|
f 11/19/3 17/26/3 16/25/3 5/11/3
|
||||||
|
usemtl cyan
|
||||||
|
f 19/28/2 26/39/2 15/24/2 7/13/2
|
||||||
|
usemtl magenta
|
||||||
|
f 9/15/1 18/27/1 14/23/1 3/7/1
|
||||||
|
f 3/7/2 14/23/2 26/39/2 19/28/2
|
||||||
|
usemtl yellow
|
||||||
|
f 5/11/4 16/25/4 25/38/4 21/32/4
|
||||||
|
usemtl magenta
|
||||||
|
f 3/8/5 19/29/5 24/37/5 9/16/5
|
||||||
|
usemtl green
|
||||||
|
f 8/14/6 20/30/6 23/36/6 12/20/6
|
||||||
|
usemtl red
|
||||||
|
f 12/20/6 23/36/6 22/34/6 6/12/6
|
||||||
|
usemtl black
|
||||||
|
f 9/16/5 24/37/5 21/33/5 1/3/5
|
||||||
|
usemtl red
|
||||||
|
f 16/25/4 6/12/4 22/35/4 25/38/4
|
||||||
|
usemtl blue
|
||||||
|
f 14/23/2 4/10/2 20/31/2 26/39/2
|
64
tests/normal-corrected-ray-voxeliser.test.ts
Normal file
64
tests/normal-corrected-ray-voxeliser.test.ts
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import { NormalCorrectedRayVoxeliser } from '../src/voxelisers/normal-corrected-ray-voxeliser';
|
||||||
|
import { ObjImporter } from '../src/importers/obj_importer';
|
||||||
|
import { TextureFiltering } from '../src/texture';
|
||||||
|
import { ASSERT, RGB } from '../src/util';
|
||||||
|
import { Vector3 } from '../src/vector';
|
||||||
|
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
test('Parse vertex #1', () => {
|
||||||
|
const importer = new ObjImporter();
|
||||||
|
importer.parseFile(path.join(__dirname, './data/cube.obj'));
|
||||||
|
const mesh = importer.toMesh();
|
||||||
|
mesh.processMesh();
|
||||||
|
|
||||||
|
const voxeliser = new NormalCorrectedRayVoxeliser();
|
||||||
|
const voxelMesh = voxeliser.voxelise(mesh, {
|
||||||
|
desiredHeight: 2,
|
||||||
|
useMultisampleColouring: false,
|
||||||
|
textureFiltering: TextureFiltering.Nearest,
|
||||||
|
ambientOcclusionEnabled: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const expectedVoxels = [
|
||||||
|
{
|
||||||
|
position: new Vector3(0, 1, 0),
|
||||||
|
colour: new RGB(0, 0, 1),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(1, 1, 0),
|
||||||
|
colour: new RGB(0, 1, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(1, 1, 1),
|
||||||
|
colour: new RGB(1, 0, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(0, 1, 1),
|
||||||
|
colour: new RGB(1, 1, 1),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(1, 0, 1),
|
||||||
|
colour: new RGB(1, 1, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(1, 0, 0),
|
||||||
|
colour: new RGB(0, 1, 1),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(0, 0, 1),
|
||||||
|
colour: new RGB(0, 0, 0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: new Vector3(0, 0, 0),
|
||||||
|
colour: new RGB(1, 0, 1),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const expected of expectedVoxels) {
|
||||||
|
expect(voxelMesh.isVoxelAt(expected.position)).toBe(true);
|
||||||
|
const voxel = voxelMesh.getVoxelAt(expected.position);
|
||||||
|
expect(voxel).toBeDefined(); ASSERT(voxel);
|
||||||
|
expect(voxel.colour.toVector3().equals(expected.colour.toVector3()));
|
||||||
|
}
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user