Minor changes to grid rendering

This commit is contained in:
Lucas Dower 2022-05-14 17:25:21 +01:00
parent 8b23996c93
commit eea08adf16
3 changed files with 47 additions and 56 deletions

View File

@ -2,7 +2,7 @@ import * as twgl from 'twgl.js';
import { Triangle, UVTriangle } from './triangle';
import { Vector3 } from './vector';
import { AttributeData, MergeAttributeData, RenderBuffer } from './buffer';
import { Bounds, RGB } from './util';
import { ASSERT, Bounds, RGB } from './util';
import { Mesh } from './mesh';
import { VoxelMesh } from './voxel_mesh';
@ -219,69 +219,53 @@ export class DebugGeometryTemplates {
return MergeAttributeData(line, cone);
}
public static grid(axes: boolean, bounds: boolean, gridLines: boolean, gridSize: number, xOffset: boolean = true, zOffset: boolean = true): RenderBuffer {
public static grid(dimensions: Vector3, spacing?: number): RenderBuffer {
const buffer = new RenderBuffer([
{ name: 'position', numComponents: 3 },
{ name: 'colour', numComponents: 3 },
]);
const COLOUR_MINOR = new RGB(0.15, 0.15, 0.15);
const COLOUR_MAJOR = new RGB(0.3, 0.3, 0.3);
const gridRadius = 9.5;
const gridColourMinor = new RGB(0.15, 0.15, 0.15);
const gridColourMajor = new RGB(0.3, 0.3, 0.3);
buffer.add(DebugGeometryTemplates.line(
new Vector3(-dimensions.x / 2, 0, -dimensions.z / 2),
new Vector3(-dimensions.x / 2, 0, dimensions.z / 2),
COLOUR_MAJOR,
));
if (bounds) {
buffer.add(DebugGeometryTemplates.line(
new Vector3(-gridRadius, 0, -gridRadius),
new Vector3(gridRadius, 0, -gridRadius),
gridColourMajor,
));
buffer.add(DebugGeometryTemplates.line(
new Vector3(gridRadius, 0, -gridRadius),
new Vector3(gridRadius, 0, gridRadius),
gridColourMajor,
));
buffer.add(DebugGeometryTemplates.line(
new Vector3(gridRadius, 0, gridRadius),
new Vector3(-gridRadius, 0, gridRadius),
gridColourMajor,
));
buffer.add(DebugGeometryTemplates.line(
new Vector3(-gridRadius, 0, gridRadius),
new Vector3(-gridRadius, 0, -gridRadius),
gridColourMajor,
));
}
buffer.add(DebugGeometryTemplates.line(
new Vector3(dimensions.x / 2, 0, -dimensions.z / 2),
new Vector3(dimensions.x / 2, 0, dimensions.z / 2),
COLOUR_MAJOR,
));
if (gridLines) {
// X
for (let i = (xOffset ? gridSize/2 : 0.0); i < gridRadius; i += gridSize) {
buffer.add(DebugGeometryTemplates.line(
new Vector3(-dimensions.x / 2, 0, -dimensions.z / 2),
new Vector3(dimensions.x / 2, 0, -dimensions.z / 2),
COLOUR_MAJOR,
));
buffer.add(DebugGeometryTemplates.line(
new Vector3(-dimensions.x / 2, 0, dimensions.z / 2),
new Vector3(dimensions.x / 2, 0, dimensions.z / 2),
COLOUR_MAJOR,
));
if (spacing) {
ASSERT(spacing > 0.0);
for (let x = -dimensions.x / 2; x < dimensions.x / 2; x += spacing) {
buffer.add(DebugGeometryTemplates.line(
new Vector3(i, 0, gridRadius),
new Vector3(i, 0, -gridRadius),
gridColourMinor,
));
}
for (let i = (xOffset ? gridSize/2 : 0.0); i > -gridRadius; i -= gridSize) {
buffer.add(DebugGeometryTemplates.line(
new Vector3(i, 0, gridRadius),
new Vector3(i, 0, -gridRadius),
gridColourMinor,
new Vector3(x, 0, -dimensions.z / 2),
new Vector3(x, 0, dimensions.z / 2),
COLOUR_MINOR,
));
}
// Z
for (let i = (zOffset ? gridSize/2 : 0.0); i < gridRadius; i += gridSize) {
for (let z = -dimensions.z / 2; z < dimensions.z / 2; z += spacing) {
buffer.add(DebugGeometryTemplates.line(
new Vector3(gridRadius, 0, i),
new Vector3(-gridRadius, 0, i),
gridColourMinor,
));
}
for (let i = (zOffset ? gridSize/2 : 0.0); i > -gridRadius; i -= gridSize) {
buffer.add(DebugGeometryTemplates.line(
new Vector3(gridRadius, 0, i),
new Vector3(-gridRadius, 0, i),
gridColourMinor,
new Vector3(-dimensions.x / 2, 0, z),
new Vector3(dimensions.x / 2, 0, z),
COLOUR_MINOR,
));
}
}

View File

@ -75,7 +75,6 @@ export class Renderer {
this._debugBuffers[MeshType.TriangleMesh] = {};
this._debugBuffers[MeshType.VoxelMesh] = {};
this._debugBuffers[MeshType.BlockMesh] = {};
this._debugBuffers[MeshType.None][EDebugBufferComponents.Grid] = DebugGeometryTemplates.grid(true, true, false, 0.25);
this._isGridComponentEnabled = {};
this._isGridComponentEnabled[EDebugBufferComponents.Grid] = false;
@ -188,7 +187,8 @@ export class Renderer {
}
}
this._debugBuffers[MeshType.TriangleMesh][EDebugBufferComponents.Grid] = DebugGeometryTemplates.grid(true, true, false, 0.25);
const dimensions = mesh.getBounds().getDimensions();
this._debugBuffers[MeshType.TriangleMesh][EDebugBufferComponents.Grid] = DebugGeometryTemplates.grid(dimensions);
this._debugBuffers[MeshType.TriangleMesh][EDebugBufferComponents.Wireframe] = DebugGeometryTemplates.meshWireframe(mesh, new RGB(0.18, 0.52, 0.89));
this._debugBuffers[MeshType.TriangleMesh][EDebugBufferComponents.Normals] = DebugGeometryTemplates.meshNormals(mesh, new RGB(0.89, 0.52, 0.18));
delete this._debugBuffers[MeshType.TriangleMesh][EDebugBufferComponents.Dev];
@ -216,8 +216,9 @@ export class Renderer {
dimensions.y % 2 === 0 ? 0 : -0.5,
dimensions.z % 2 === 0 ? 0 : -0.5,
);
dimensions.add(1);
this._debugBuffers[MeshType.VoxelMesh][EDebugBufferComponents.Grid] = DebugGeometryTemplates.grid(true, true, true, this._voxelSize, this._gridOffset.x === 0, this._gridOffset.z === 0);
this._debugBuffers[MeshType.VoxelMesh][EDebugBufferComponents.Grid] = DebugGeometryTemplates.grid(Vector3.mulScalar(dimensions, voxelSize), voxelSize);
this._debugBuffers[MeshType.VoxelMesh][EDebugBufferComponents.Wireframe] = DebugGeometryTemplates.voxelMeshWireframe(voxelMesh, new RGB(0.18, 0.52, 0.89), this._voxelSize);
this._modelsAvailable = 2;
@ -238,7 +239,7 @@ export class Renderer {
mag: this._gl.NEAREST,
});
this._debugBuffers[MeshType.BlockMesh][EDebugBufferComponents.Grid] = DebugGeometryTemplates.grid(true, true, true, this._voxelSize, this._gridOffset.x === 0, this._gridOffset.z === 0);
this._debugBuffers[MeshType.BlockMesh][EDebugBufferComponents.Grid] = this._debugBuffers[MeshType.VoxelMesh][EDebugBufferComponents.Grid];
this._modelsAvailable = 3;
this.setModelToUse(MeshType.BlockMesh);
@ -363,4 +364,8 @@ export class Renderer {
public getModelsAvailable() {
return this._modelsAvailable;
}
public getActiveMeshType() {
return this._meshToUse;
}
}

View File

@ -179,6 +179,8 @@ export class UI {
}, EAppEvent.onGridEnabledChanged, (...args: any[]) => {
const isEnabled = args[0][0][0] as boolean;
return isEnabled;
}, EAppEvent.onModelActiveChanged, (...args: any[]) => {
return Renderer.Get.getActiveMeshType() !== MeshType.None;
}),
'axes': new ToolbarItemElement('axes', () => {
Renderer.Get.toggleIsAxesEnabled();