smooth shading + fix pause focus shit

This commit is contained in:
RandomityGuy 2021-07-13 22:33:08 +05:30
parent c622e59b6d
commit 9cac52a5e4
3 changed files with 60 additions and 1 deletions

Binary file not shown.

View file

@ -40,6 +40,12 @@ class DifBuilderTriangle {
public function new() {}
}
typedef VertexBucket = {
var referenceNormal:Point3F;
var triangleIndices:Array<Int>;
var normals:Array<Point3F>;
}
class DifBuilder {
static var materialDict = [
"friction_none" => {
@ -96,6 +102,8 @@ class DifBuilder {
return tex.substring(slashpos, dotpos);
}
var vertexBuckets = new Map<Point3F, Array<VertexBucket>>();
for (i in 0...hulls.length) {
var hullTris = [];
var hull = hulls[i];
@ -196,6 +204,33 @@ class DifBuilder {
colliderSurface.indices.push(colliderSurface.indices.length);
colliderSurface.indices.push(colliderSurface.indices.length);
colliderSurface.indices.push(colliderSurface.indices.length);
for (v in [p1, p2, p3]) {
var buckets = vertexBuckets.get(v);
if (buckets == null) {
buckets = [];
vertexBuckets.set(v, buckets);
}
var bucket:VertexBucket = null;
for (j in 0...buckets.length) {
bucket = buckets[j];
if (normal.dot(bucket.referenceNormal) > Math.cos(Math.PI / 12))
break;
bucket = null;
}
if (bucket == null) {
bucket = {
referenceNormal: normal,
triangleIndices: [],
normals: []
};
buckets.push(bucket);
}
bucket.triangleIndices.push(triangles.length - 1);
bucket.normals.push(normal);
}
}
colliderSurface.generateBoundingBox();
@ -203,6 +238,28 @@ class DifBuilder {
}
}
for (vtex => buckets in vertexBuckets) {
for (i in 0...buckets.length) {
var bucket = buckets[i];
var avgNormal = new Point3F();
for (normal in bucket.normals)
avgNormal = avgNormal.add(normal);
avgNormal = avgNormal.scalarDiv(bucket.normals.length);
for (j in 0...bucket.triangleIndices.length) {
var index = bucket.triangleIndices[j];
var tri = triangles[index];
if (tri.p1 == vtex)
tri.normal1 = avgNormal;
if (tri.p2 == vtex)
tri.normal2 = avgNormal;
if (tri.p3 == vtex)
tri.normal3 = avgNormal;
}
}
}
var mats = new Map<String, Array<DifBuilderTriangle>>();
for (index => value in triangles) {

View file

@ -38,6 +38,8 @@ class MarbleGame {
js.Browser.document.addEventListener('pointerlockchange', () -> {
if (!paused && world != null) {
if (world.finishTime == null && world._ready) {
trace(js.Browser.document.pointerLockElement);
trace(@:privateAccess Window.getInstance().canvas);
if (js.Browser.document.pointerLockElement != @:privateAccess Window.getInstance().canvas) {
paused = true;
handlePauseGame();
@ -102,7 +104,7 @@ class MarbleGame {
}, (sender) -> {
canvas.popDialog(exitGameDlg);
world.restart();
world.setCursorLock(true);
// world.setCursorLock(true);
paused = !paused;
});
canvas.pushDialog(exitGameDlg);