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
18 changes: 17 additions & 1 deletion ogl-engine/engine/Camera.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { FolderApi } from "tweakpane";
import { Camera as BaseCamera, Vec3 } from "ogl";
import { Camera as BaseCamera, Mat4, Vec3 } from "ogl";
import { getPane } from "@ui/context/Pane";
import type { Engine } from "./engine";

Expand All @@ -9,6 +9,10 @@ export class Camera extends BaseCamera {
name = "Camera";
engine: Engine;

invProjectionMatrix = new Mat4();
invViewMatrix = new Mat4();
invViewProjectionMatrix = new Mat4();

private paneFolder: FolderApi;

constructor(engine: Engine, initPane = true) {
Expand Down Expand Up @@ -56,4 +60,16 @@ export class Camera extends BaseCamera {
cameraPos.z + t * cameraDir.z
);
}

updateMatrixWorld() {
super.updateMatrixWorld();

this.invProjectionMatrix.inverse(this.projectionMatrix);
this.invViewMatrix.inverse(this.viewMatrix);
this.invViewProjectionMatrix
.copy(this.invProjectionMatrix)
.multiply(this.invViewMatrix);

return this;
}
}
16 changes: 9 additions & 7 deletions ogl-engine/materials/AsteroidNew/AsteroidNew.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Vec3, type Texture } from "ogl";
import { assetLoader } from "@ogl-engine/AssetLoader";
import fragment from "./shader.frag.glsl";
import vertex from "../pbr/shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

interface AsteroidNewMaterialArgs {
Expand All @@ -11,13 +12,14 @@ interface AsteroidNewMaterialArgs {
}

export class AsteroidNewMaterial extends Material {
uniforms: Material["uniforms"] & {
tGrunge: { value: Texture };
tNormal: { value: Texture };
uMask: { value: number };
uColor: { value: Vec3 };
uEmissive: { value: number };
};
uniforms: Material["uniforms"] &
Uniforms<{
tGrunge: Texture;
tNormal: Texture;
uMask: number;
uColor: Vec3;
uEmissive: number;
}>;

constructor(engine: Engine3D, args: AsteroidNewMaterialArgs = {}) {
super(engine);
Expand Down
10 changes: 6 additions & 4 deletions ogl-engine/materials/AsteroidRock/AsteroidRock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,19 @@ import { type Texture } from "ogl";
import { assetLoader } from "@ogl-engine/AssetLoader";
import fragment from "./shader.frag.glsl";
import vertex from "../pbr/shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

interface AsteroidRockMaterialArgs {
instanced?: boolean;
}

export class AsteroidRockMaterial extends Material {
uniforms: Material["uniforms"] & {
tGrunge: { value: Texture };
tNormal: { value: Texture };
};
uniforms: Material["uniforms"] &
Uniforms<{
tGrunge: Texture;
tNormal: Texture;
}>;

constructor(engine: Engine3D, args: AsteroidRockMaterialArgs = {}) {
super(engine);
Expand Down
14 changes: 8 additions & 6 deletions ogl-engine/materials/asteroidDust/asteroidDust.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@ import { assetLoader } from "@ogl-engine/AssetLoader";
import { colorToVec3 } from "@core/utils/maps";
import fragment from "./shader.frag.glsl";
import vertex from "./shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

export class AsteroidDustMaterial extends Material {
uniforms: Material["uniforms"] & {
tMap: { value: Texture };
uColor: { value: Vec3 };
uEmissive: { value: number };
uAlpha: { value: number };
};
uniforms: Material["uniforms"] &
Uniforms<{
tMap: Texture;
uColor: Vec3;
uEmissive: number;
uAlpha: number;
}>;

constructor(
engine: Engine3D,
Expand Down
12 changes: 7 additions & 5 deletions ogl-engine/materials/atmosphere/atmosphere.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { Engine3D } from "@ogl-engine/engine/engine3d";
import { Vec3 } from "ogl";
import fragment from "./shader.frag.glsl";
import vertex from "./shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

interface AtmosphereMaterialArgs {
Expand All @@ -11,11 +12,12 @@ interface AtmosphereMaterialArgs {
}

export class AtmosphereMaterial extends Material {
uniforms: Material["uniforms"] & {
uColor: { value: Vec3 };
uX: { value: number };
uY: { value: number };
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec3;
uX: number;
uY: number;
}>;

constructor(engine: Engine3D, args: AtmosphereMaterialArgs) {
super(engine);
Expand Down
19 changes: 11 additions & 8 deletions ogl-engine/materials/color/color.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@ import fragment from "./shader.frag.glsl";
import fragment2d from "./shader2d.frag.glsl";
import vertex from "./shader.vert.glsl";
import vertex2d from "./shader2d.vert.glsl";
import type { Uniforms } from "../material";
import { Material, Material2D } from "../material";

export class ColorMaterial extends Material {
uniforms: Material["uniforms"] & {
uColor: { value: Vec3 };
fEmissive: { value: number };
bShaded: { value: boolean };
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec3;
fEmissive: number;
bShaded: boolean;
}>;

constructor(
engine: Engine3D,
Expand Down Expand Up @@ -52,9 +54,10 @@ export class ColorMaterial extends Material {
}

export class ColorMaterial2D extends Material2D {
uniforms: Material["uniforms"] & {
uColor: { value: Vec3 };
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec3;
}>;

constructor(engine: Engine2D, color: string) {
super(engine);
Expand Down
8 changes: 5 additions & 3 deletions ogl-engine/materials/engineTrail/engineTrail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ import type { Engine3D } from "@ogl-engine/engine/engine3d";
import Color from "color";
import fragment from "./shader.frag.glsl";
import vertex from "./shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

export class EngineTrailMaterial extends Material {
uniforms: Material["uniforms"] & {
uColor: { value: Vec3 };
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec3;
}>;

constructor(engine: Engine3D, color: string) {
super(engine);
Expand Down
18 changes: 10 additions & 8 deletions ogl-engine/materials/entityIndicator/entityIndicator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,19 @@ import type { DockSize } from "@core/components/dockable";
import type { Engine3D } from "@ogl-engine/engine/engine3d";
import fragment from "./shader.frag.glsl";
import vertex from "./shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

export class EntityIndicatorMaterial extends Material {
uniforms: Material["uniforms"] & {
uSize: { value: number };
uColor: { value: Vec4 };
uHp: { value: number };
uShield: { value: number };
uHovered: { value: number };
uSelected: { value: number };
};
uniforms: Material["uniforms"] &
Uniforms<{
uSize: number;
uColor: Vec4;
uHp: number;
uShield: number;
uHovered: number;
uSelected: number;
}>;

constructor(engine: Engine3D) {
super(engine);
Expand Down
12 changes: 7 additions & 5 deletions ogl-engine/materials/entityName/entityName.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@ import type { Engine3D } from "@ogl-engine/engine/engine3d";
import type { DockSize } from "@core/components/dockable";
import fragment from "./shader.frag.glsl";
import vertex from "./shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

export class EntityNameMaterial extends Material {
uniforms: Material["uniforms"] & {
tMap: { value: Texture };
uOffset: { value: number };
uColor: { value: Vec3 };
};
uniforms: Material["uniforms"] &
Uniforms<{
tMap: Texture;
uOffset: number;
uColor: Vec3;
}>;

constructor(engine: Engine3D, texture: Texture) {
super(engine);
Expand Down
8 changes: 5 additions & 3 deletions ogl-engine/materials/kineticGun/kineticGun.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ import type { Engine3D } from "@ogl-engine/engine/engine3d";
import { Vec4 } from "ogl";
import fragment from "./shader.frag.glsl";
import vertex from "../orb/shader.vert.glsl";
import type { Uniforms } from "../material";
import { Material } from "../material";

interface KineticGunMaterialArgs {
color: string;
}

export class KineticGunMaterial extends Material {
uniforms: Material["uniforms"] & {
uColor: { value: Vec4 };
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec4;
}>;

constructor(engine: Engine3D, args: KineticGunMaterialArgs) {
super(engine);
Expand Down
13 changes: 7 additions & 6 deletions ogl-engine/materials/laser/laser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@ import type { Engine3D } from "@ogl-engine/engine/engine3d";
import { Vec3 } from "ogl";
import fragment from "./shader.frag.glsl";
import vertex from "../base.vert.glsl";
import type { Uniform } from "../material";
import type { Uniforms } from "../material";
import { Material } from "../material";

interface LaserMaterialArgs {
color: string;
}

export class LaserMaterial extends Material {
uniforms: Material["uniforms"] & {
uColor: Uniform<Vec3>;
uIntensity: Uniform<number>;
uAspectRatio: Uniform<number>;
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec3;
uIntensity: number;
uAspectRatio: number;
}>;

constructor(engine: Engine3D, { color }: LaserMaterialArgs) {
super(engine);
Expand Down
11 changes: 6 additions & 5 deletions ogl-engine/materials/laserImpact/laserImpact.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,19 @@ import type { Engine3D } from "@ogl-engine/engine/engine3d";
import { Vec3 } from "ogl";
import fragment from "./shader.frag.glsl";
import vertex from "../base.vert.glsl";
import type { Uniform } from "../material";
import type { Uniforms } from "../material";
import { Material } from "../material";

interface LaserImpactMaterialArgs {
color: string;
}

export class LaserImpactMaterial extends Material {
uniforms: Material["uniforms"] & {
uColor: Uniform<Vec3>;
uIntensity: Uniform<number>;
};
uniforms: Material["uniforms"] &
Uniforms<{
uColor: Vec3;
uIntensity: number;
}>;

constructor(engine: Engine3D, { color }: LaserImpactMaterialArgs) {
super(engine);
Expand Down
29 changes: 20 additions & 9 deletions ogl-engine/materials/material.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,35 @@ import { entries, join, map, pipe } from "@fxts/core";
import type { Engine3D } from "@ogl-engine/engine/engine3d";
import type { Light } from "@ogl-engine/engine/Light";
import Color from "color";
import type { ProgramOptions, Mesh, Vec3, Vec4, Vec2 } from "ogl";
import type { ProgramOptions, Mesh, Vec3, Vec4, Mat4 } from "ogl";
import { Texture, Program } from "ogl";
import type { BindingParams, FolderApi } from "tweakpane";
import { getPane } from "@ui/context/Pane";

export interface Uniform<T extends Vec2 | Vec3 | Vec4 | Texture | number> {
export interface Uniform<T> {
value: T;
meta?: {
pane?: BindingParams;
};
}

export type Uniforms<T extends Record<string, any>> = {
[K in keyof T]: Uniform<T[K]>;
};

export abstract class Material {
engine: Engine3D;
protected program: Program;
protected uniforms: {
ambient: { value: Vec3 };
protected uniforms: Uniforms<{
ambient: Vec3;
uTime: number;
tEnvMap: Texture;
uCameraScale: number;
invProjectionMatrix: Mat4;
invViewMatrix: Mat4;
invViewProjectionMatrix: Mat4;
}> & {
lights: Light["uniforms"][];
uTime: { value: number };
tEnvMap: { value: Texture };
uCameraScale: { value: number };
};

constructor(engine: Engine3D) {
Expand All @@ -35,6 +43,9 @@ export abstract class Material {
uTime: engine.uniforms.uTime,
tEnvMap: engine.uniforms.env.tEnvMap,
uCameraScale: { value: Math.log2(engine.camera.far) },
invProjectionMatrix: { value: engine.camera.invProjectionMatrix },
invViewMatrix: { value: engine.camera.invViewMatrix },
invViewProjectionMatrix: { value: engine.camera.invViewProjectionMatrix },
};
}

Expand Down Expand Up @@ -116,12 +127,12 @@ export abstract class Material {
});
}

static colorToVec3(color: string, uniform: { value: Vec3 }) {
static colorToVec3(color: string, uniform: Uniform<Vec3>) {
const c = Color(color).rgb().array();
uniform.value.set(c[0], c[1], c[2]).divide(255);
}

static colorToVec4(color: string, uniform: { value: Vec4 }) {
static colorToVec4(color: string, uniform: Uniform<Vec4>) {
const c = Color(color).rgb();
uniform.value.set(
c.red() / 255,
Expand Down
Loading
Loading