Skip to content

Commit

Permalink
Merge PR #3811 by @pollend - initial JOML conversion!
Browse files Browse the repository at this point in the history
  • Loading branch information
Cervator committed Feb 16, 2020
2 parents 76c2a58 + 22b41d4 commit 3f50a70
Show file tree
Hide file tree
Showing 36 changed files with 551 additions and 199 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@
*/
package org.terasology.rendering.cameras;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.junit.Before;
import org.junit.Test;
import org.terasology.config.Config;
import org.terasology.config.RenderingConfig;
import org.terasology.context.internal.ContextImpl;
import org.terasology.context.internal.MockContext;
import org.terasology.engine.subsystem.DisplayDevice;
import org.terasology.math.geom.Matrix4f;
import org.terasology.math.geom.Quat4f;
import org.terasology.registry.CoreRegistry;
import org.terasology.world.WorldProvider;
Expand All @@ -33,7 +34,7 @@
public class PerspectiveCameraTest {


@BeforeEach
@Before
public void setUp() {
Config config = new Config(new MockContext());
config.loadDefaults();
Expand Down Expand Up @@ -62,16 +63,16 @@ public void testPerspectiveCamera() {
, 0.0f, 8.937492f, 0.0f, 0.0f
, 0.0f, 0.0f, -1.00004f, -0.20000401f
, 0.0f, 0.0f, -1.0f, 0.0f);
Matrix4f normViewMatrix = new Matrix4f(0.27303523f, 0.0f, -0.962004f, -0.0f
, -0.96200305f, 0.0014514439f, -0.27303496f, -0.0f,
0.0013962948f, 0.99999887f, 3.962953f, -0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
Matrix4f normViewMatrix = new Matrix4f(0.27303523f,0.0f,-0.962004f,-0.0f
,-0.96200305f,0.0014514439f,-0.27303496f,-0.0f,
0.0013962948f,0.99999887f,3.962953f,-0.0f,
0.0f,0.0f,0.0f,1.0f);


camera.getViewMatrix().epsilonEquals(viewMatrix, 0.5f);
camera.getProjectionMatrix().epsilonEquals(projectionMatrix, 0.5f);
camera.getNormViewMatrix().epsilonEquals(normViewMatrix, 0.5f);
camera.getViewMatrix().equals(viewMatrix, 0.5f);
camera.getProjectionMatrix().equals(projectionMatrix, 0.5f);
camera.getNormViewMatrix().equals(normViewMatrix,0.5f);
camera.setReflected(true);
camera.getNormViewMatrix().epsilonEquals(normViewMatrix, 0.5f);
camera.getNormViewMatrix().equals(normViewMatrix,0.5f);
}
}
2 changes: 1 addition & 1 deletion engine/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ dependencies {
compile group: 'org.lwjgl.lwjgl', name: 'lwjgl', version: LwjglVersion
compile group: 'org.lwjgl.lwjgl', name: 'lwjgl_util', version: LwjglVersion
compile group: 'java3d', name: 'vecmath', version: '1.3.1' // Note: Downgraded to this release until TeraMath ready
compile "org.joml:joml:1.8.1"
compile group: 'org.abego.treelayout', name: 'org.abego.treelayout.core', version: '1.0.3'
compile group: 'com.miglayout', name: 'miglayout-core', version: '5.0'
compile group: 'de.matthiasmann.twl', name: 'PNGDecoder', version: '1111'
Expand Down Expand Up @@ -136,6 +135,7 @@ dependencies {
compile group: 'org.terasology', name: 'gestalt-module', version: '5.1.5'
compile group: 'org.terasology', name: 'gestalt-asset-core', version: '5.1.5'
compile group: 'org.terasology', name: 'TeraMath', version: '1.4.0'
compile group: 'org.joml', name: 'joml', version: '1.9.19'
compile group: 'org.terasology.bullet', name: 'tera-bullet', version: '1.3.1'
compile group: 'org.terasology', name: 'splash-screen', version: '1.0.2'
compile group: 'org.terasology.jnlua', name: 'JNLua', version: '0.1.0-SNAPSHOT'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package org.terasology.engine.subsystem.headless.assets;

import org.joml.Matrix3fc;
import org.joml.Matrix4fc;
import org.terasology.assets.AssetType;
import org.terasology.assets.ResourceUrn;
import org.terasology.math.geom.Matrix3f;
Expand Down Expand Up @@ -110,6 +112,11 @@ public void setMatrix3(String name, Matrix3f matrix, boolean currentOnly) {
// Do nothing
}

@Override
public void setMatrix3(String name, Matrix3fc matrix, boolean currentOnly) {

}

@Override
public void setMatrix3(String name, FloatBuffer buffer, boolean currentOnly) {
// Do nothing
Expand All @@ -120,6 +127,11 @@ public void setMatrix4(String name, Matrix4f matrix, boolean currentOnly) {
// Do nothing
}

@Override
public void setMatrix4(String name, Matrix4fc matrix, boolean currentOnly) {

}

@Override
public void setMatrix4(String name, FloatBuffer buffer, boolean currentOnly) {
// Do nothing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ private Vector3i calcCamChunkOffset() {
private float distanceToCamera(RenderableChunk chunk) {
Vector3f result = new Vector3f((chunk.getPosition().x + 0.5f) * ChunkConstants.SIZE_X, 0, (chunk.getPosition().z + 0.5f) * ChunkConstants.SIZE_Z);

Vector3f cameraPos = getActiveCamera().getPosition();
org.joml.Vector3f cameraPos = getActiveCamera().getPosition();
result.x -= cameraPos.x;
result.z -= cameraPos.z;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package org.terasology.logic.players;

import org.joml.Quaternionf;
import org.terasology.assets.ResourceUrn;
import org.terasology.config.Config;
import org.terasology.engine.SimpleUri;
Expand Down Expand Up @@ -61,6 +62,7 @@
import org.terasology.logic.players.event.OnPlayerSpawnedEvent;
import org.terasology.math.AABB;
import org.terasology.math.Direction;
import org.terasology.math.JomlUtil;
import org.terasology.math.TeraMath;
import org.terasology.math.geom.Quat4f;
import org.terasology.math.geom.Vector3f;
Expand Down Expand Up @@ -148,7 +150,7 @@ public void update(float delta) {
CharacterMovementComponent characterMovementComponent = entity.getComponent(CharacterMovementComponent.class);

processInput(entity, characterMovementComponent);
updateCamera(characterMovementComponent, localPlayer.getViewPosition(), localPlayer.getViewRotation());
updateCamera(characterMovementComponent, localPlayer.getViewPosition(), JomlUtil.from(localPlayer.getViewRotation()));
}

private void processInput(EntityRef entity, CharacterMovementComponent characterMovementComponent) {
Expand Down Expand Up @@ -412,10 +414,10 @@ public void setAABBRenderer(BlockOverlayRenderer newAABBRender) {
aabbRenderer = newAABBRender;
}

private void updateCamera(CharacterMovementComponent charMovementComp, Vector3f position, Quat4f rotation) {
playerCamera.getPosition().set(position);
private void updateCamera(CharacterMovementComponent charMovementComp, Vector3f position, Quaternionf rotation) {
playerCamera.getPosition().set(JomlUtil.from(position));
Vector3f viewDir = Direction.FORWARD.getVector3f();
rotation.rotate(viewDir, playerCamera.getViewingDirection());
rotation.transform(JomlUtil.from(viewDir), playerCamera.getViewingDirection());

float stepDelta = charMovementComp.footstepDelta - lastStepDelta;
if (stepDelta < 0) {
Expand Down
1 change: 1 addition & 0 deletions engine/src/main/java/org/terasology/math/Direction.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.terasology.math;

import com.google.common.collect.Maps;
import org.joml.Vector3fc;
import org.terasology.math.geom.Vector3f;
import org.terasology.math.geom.Vector3i;

Expand Down
112 changes: 112 additions & 0 deletions engine/src/main/java/org/terasology/math/JomlUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/*
* Copyright 2017 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.terasology.math;

import org.joml.Matrix3f;
import org.joml.Matrix3fc;
import org.joml.Matrix4f;
import org.joml.Matrix4fc;
import org.joml.Quaternionf;
import org.joml.Vector2f;
import org.joml.Vector2fc;
import org.joml.Vector2ic;
import org.joml.Vector3fc;
import org.joml.Vector3ic;
import org.joml.Vector4f;
import org.joml.Vector4fc;
import org.terasology.math.geom.BaseMatrix3f;
import org.terasology.math.geom.BaseMatrix4f;
import org.terasology.math.geom.BaseQuat4f;
import org.terasology.math.geom.BaseVector2f;
import org.terasology.math.geom.BaseVector3f;
import org.terasology.math.geom.BaseVector3i;
import org.terasology.math.geom.BaseVector4f;
import org.terasology.math.geom.Quat4f;

public class JomlUtil {


public static org.terasology.math.geom.Matrix4f from(Matrix4fc mat) {
return new org.terasology.math.geom.Matrix4f(mat.m00(), mat.m01(), mat.m02(), mat.m03(),
mat.m10(), mat.m11(), mat.m12(), mat.m13(),
mat.m20(), mat.m21(), mat.m22(), mat.m23(),
mat.m30(), mat.m31(), mat.m32(), mat.m33());
}

public static org.terasology.math.geom.Matrix3f from(Matrix3fc mat) {
return new org.terasology.math.geom.Matrix3f(mat.m00(), mat.m01(), mat.m02(),
mat.m10(), mat.m11(), mat.m12(),
mat.m20(), mat.m21(), mat.m22());
}

public static org.joml.Matrix4f from(BaseMatrix4f mat) {
return new org.joml.Matrix4f(mat.getM00(), mat.getM01(), mat.getM02(), mat.getM03(),
mat.getM10(), mat.getM11(), mat.getM12(), mat.getM13(),
mat.getM20(), mat.getM21(), mat.getM22(), mat.getM23(),
mat.getM30(), mat.getM31(), mat.getM32(), mat.getM33());
}


public static Matrix3f from(BaseMatrix3f mat) {
return new Matrix3f(mat.getM00(), mat.getM01(), mat.getM02(),
mat.getM10(), mat.getM11(), mat.getM12(),
mat.getM20(), mat.getM21(), mat.getM22());
}

public static org.terasology.math.geom.Vector4f from(Vector4fc vec) {
return new org.terasology.math.geom.Vector4f(vec.x(), vec.y(), vec.z(), vec.w());
}

public static org.terasology.math.geom.Vector3f from(Vector3fc vec) {
return new org.terasology.math.geom.Vector3f(vec.x(), vec.y(), vec.z());
}

public static org.terasology.math.geom.Vector2f from(Vector2fc vec) {
return new org.terasology.math.geom.Vector2f(vec.x(), vec.y());
}

public static org.terasology.math.geom.Vector3i from(Vector3ic vec) {
return new org.terasology.math.geom.Vector3i(vec.x(), vec.y(), vec.z());
}

public static org.terasology.math.geom.Vector2i from(Vector2ic vec) {
return new org.terasology.math.geom.Vector2i(vec.x(), vec.y());
}

public static org.joml.Vector4f from(BaseVector4f vec) {
return new Vector4f(vec.x(), vec.y(), vec.z(), vec.w());
}

public static org.joml.Vector3f from(BaseVector3f vec) {
return new org.joml.Vector3f(vec.x(), vec.y(), vec.z());
}

public static org.joml.Vector2f from(BaseVector2f vec) {
return new org.joml.Vector2f(vec.x(), vec.y());
}

public static org.joml.Vector3i from(BaseVector3i vec) {
return new org.joml.Vector3i(vec.x(), vec.y(), vec.z());
}

public static Quat4f from(Quaternionf quat) {
return new Quat4f(quat.x(), quat.y(), quat.z(), quat.w());
}

public static Quaternionf from(BaseQuat4f quat) {
return new Quaternionf(quat.getX(), quat.getY(), quat.getZ(), quat.getW());
}
}
Loading

0 comments on commit 3f50a70

Please sign in to comment.