Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/main/java/mesh/util/MeshBoundsCalculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package mesh.util;

import java.util.List;

import math.Bounds;
import math.Vector3f;
import mesh.Mesh3D;

public class MeshBoundsCalculator {

/**
* Calculates the axis-aligned bounding box (AABB) for the given 3D mesh.
*
* @param mesh The mesh object whose bounding box needs to be calculated.
* @return A {@link Bounds} object representing the calculated bounding box.
*/
public static Bounds calculateBounds(Mesh3D mesh) {
List<Vector3f> vertices = mesh.getVertices();
if (vertices.isEmpty()) {
return new Bounds(Vector3f.ZERO, Vector3f.ZERO);
}

Vector3f min = new Vector3f(vertices.get(0));
Vector3f max = new Vector3f(vertices.get(0));

for (Vector3f vertex : vertices) {
min.set(
Math.min(min.getX(), vertex.getX()),
Math.min(min.getY(), vertex.getY()),
Math.min(min.getZ(), vertex.getZ()));
max.set(
Math.max(max.getX(), vertex.getX()),
Math.max(max.getY(), vertex.getY()),
Math.max(max.getZ(), vertex.getZ()));
}

return new Bounds(min, max);
}
}
297 changes: 148 additions & 149 deletions src/main/java/workspace/Editor.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,153 +23,152 @@

public class Editor implements ModelListener {

protected List<SceneObject> sceneObjects;

protected UiComponent rootUi;

protected KeyCommandMap commands;

protected WorkspaceModel model;

protected ViewportCompass gizmo;

protected WorkspaceSideBarUi sideBar;

protected UiEditorMenu menu;

public Editor() {
setup();
}

private void setup() {
setupLookAndFeel();
initializeModel();
initializeSceneObjects();
initializeRootUi();
createUi();
initializeCommandMap();
registerKeyCommands();
}

@Override
public void onModelChanged() {
rootUi.setVisible(model.isUiVisible());
}

private void initializeSceneObjects() {
sceneObjects = new ArrayList<SceneObject>();
}

private void createUi() {
rootUi.add(getSideBar());
rootUi.add(getGizmo());
rootUi.add(getMenu());
}

private WorkspaceSideBarUi getSideBar() {
if (sideBar == null) {
sideBar = new WorkspaceSideBarUi(model);
}
return sideBar;
}

private ViewportCompass getGizmo() {
if (gizmo == null) {
gizmo = new ViewportCompass();
}
return gizmo;
}

private UiEditorMenu getMenu() {
if (menu == null) {
menu = new UiEditorMenu();
}
return menu;
}

private void initializeRootUi() {
rootUi = new UiComponent();
}

private void setupLookAndFeel() {
LookAndFeel.setup();
}

private void initializeCommandMap() {
commands = new KeyCommandMap();
}

private void initializeModel() {
model = new WorkspaceModel();
}

private void registerKeyCommands() {
commands.register(new ShowHideGridCommand(model));
commands.register(new ShowHideXAxisCommand(model));
commands.register(new ShowHideYAxisCommand(model));
commands.register(new ShowHideZAxisCommand(model));
commands.register(new ShowHideSideBarCommand(model));
commands.register(new ShowHideFaceNormalsCommand(model));
commands.register(new ResetPanningCommand(model));
commands.register(new ShowHideVertexNormalsCommand(model));
commands.register(new ShowHideEdgesCommand(model));
commands.register(new WireframeCommand(model));
commands.register(new ShadeSmoothFlatCommand(model));
}

private void resizeRootUi(int x, int y, int width, int height) {
rootUi.setX(x);
rootUi.setY(y);
rootUi.setWidth(width);
rootUi.setHeight(height);
}

public void resize(int x, int y, int width, int height) {
resizeRootUi(x, y, width, height);
updateGizmo(width, height);
}

public void handleMouseClicked(int x, int y) {
rootUi.onMouseClicked(x, y);
}

public void handleMousePressed(int x, int y) {
rootUi.onMousePressed(x, y);
}

public void handleMouseDragged(int x, int y) {
rootUi.onMouseDragged(x, y);
}

public void handleMouseReleased(int x, int y) {
rootUi.onMouseReleased(x, y);
}

public void handleMouseWheel(float amount) {
float scale = model.getScale();
scale -= amount * scale * 0.2f;
model.setScale(scale);
}

private void updateGizmo(int width, int height) {
gizmo.setX(width - 80);
gizmo.setY(130);
}

public void add(UiComponent component) {
rootUi.add(component);
}

public void addSceneObject(SceneObject sceneObject) {
sceneObjects.add(sceneObject);
}

public void addAll(Collection<SceneObject> sceneObjects) {
this.sceneObjects.addAll(sceneObjects);
}

public void clearSceneObjects() {
sceneObjects.clear();
}

protected List<SceneObject> sceneObjects;

protected UiComponent rootUi;

protected KeyCommandMap commands;

protected WorkspaceModel model;

protected ViewportCompass gizmo;

protected WorkspaceSideBarUi sideBar;

protected UiEditorMenu menu;

public Editor() {
setup();
}

private void setup() {
setupLookAndFeel();
initializeModel();
initializeSceneObjects();
initializeRootUi();
createUi();
initializeCommandMap();
registerKeyCommands();
}

@Override
public void onModelChanged() {
rootUi.setVisible(model.isUiVisible());
}

private void initializeSceneObjects() {
sceneObjects = new ArrayList<SceneObject>();
}

private void createUi() {
rootUi.add(getSideBar());
rootUi.add(getGizmo());
rootUi.add(getMenu());
}

private WorkspaceSideBarUi getSideBar() {
if (sideBar == null) {
sideBar = new WorkspaceSideBarUi(model);
}
return sideBar;
}

private ViewportCompass getGizmo() {
if (gizmo == null) {
gizmo = new ViewportCompass();
}
return gizmo;
}

private UiEditorMenu getMenu() {
if (menu == null) {
menu = new UiEditorMenu();
}
return menu;
}

private void initializeRootUi() {
rootUi = new UiComponent();
}

private void setupLookAndFeel() {
LookAndFeel.setup();
}

private void initializeCommandMap() {
commands = new KeyCommandMap();
}

private void initializeModel() {
model = new WorkspaceModel();
}

private void registerKeyCommands() {
commands.register(new ShowHideGridCommand(model));
commands.register(new ShowHideXAxisCommand(model));
commands.register(new ShowHideYAxisCommand(model));
commands.register(new ShowHideZAxisCommand(model));
commands.register(new ShowHideSideBarCommand(model));
commands.register(new ShowHideFaceNormalsCommand(model));
commands.register(new ResetPanningCommand(model));
commands.register(new ShowHideVertexNormalsCommand(model));
commands.register(new ShowHideEdgesCommand(model));
commands.register(new WireframeCommand(model));
commands.register(new ShadeSmoothFlatCommand(model));
}

private void resizeRootUi(int x, int y, int width, int height) {
rootUi.setX(x);
rootUi.setY(y);
rootUi.setWidth(width);
rootUi.setHeight(height);
}

public void resize(int x, int y, int width, int height) {
resizeRootUi(x, y, width, height);
updateGizmo(width, height);
}

public void handleMouseClicked(int x, int y) {
rootUi.onMouseClicked(x, y);
}

public void handleMousePressed(int x, int y) {
rootUi.onMousePressed(x, y);
}

public void handleMouseDragged(int x, int y) {
rootUi.onMouseDragged(x, y);
}

public void handleMouseReleased(int x, int y) {
rootUi.onMouseReleased(x, y);
}

public void handleMouseWheel(float amount) {
float scale = model.getScale();
scale -= amount * scale * 0.2f;
model.setScale(scale);
}

private void updateGizmo(int width, int height) {
gizmo.setX(width - 80);
gizmo.setY(130);
}

public void add(UiComponent component) {
rootUi.add(component);
}

public void addSceneObject(SceneObject sceneObject) {
sceneObjects.add(sceneObject);
}

public void addAll(Collection<SceneObject> sceneObjects) {
this.sceneObjects.addAll(sceneObjects);
}

public void clearSceneObjects() {
sceneObjects.clear();
}
}
3 changes: 0 additions & 3 deletions src/main/java/workspace/FirstPersonView.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package workspace;

import engine.world.PlayerMock;
import math.Mathf;
import math.Matrix3f;
import math.Matrix4f;
Expand Down Expand Up @@ -79,8 +78,6 @@ public void pre() {

eye.addLocal(velocity.mult(speed));
eye.setY(-300);

PlayerMock.playerPosition.addLocal(velocity.mult(0.1f));
}

public void apply() {
Expand Down
Loading
Loading