Skip to content

Commit

Permalink
chore: texture3d types (#237)
Browse files Browse the repository at this point in the history
* fix: export texture3d

* feat: add texture3d types

* chore: prettier
  • Loading branch information
pschroen authored Oct 16, 2024
1 parent 99e9b6e commit 31abd49
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/core/Texture.js
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,4 @@ export class Texture {
}
this.store.image = this.image;
}
}
}
36 changes: 17 additions & 19 deletions src/extras/Texture3D.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { Texture } from "../core/Texture.js";
import { Texture } from '../core/Texture.js';

export class Texture3D extends Texture {
constructor(gl, args) {

super(gl, {
...args,
target: gl.TEXTURE_3D,
Expand All @@ -11,11 +10,10 @@ export class Texture3D extends Texture {
});

const image = new Image();
image.crossOrigin = "*";
image.crossOrigin = '*';
image.src = args.src;

image.onload = () => {

let canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
Expand All @@ -31,14 +29,18 @@ export class Texture3D extends Texture {
let elementCount;

switch (this.format) {
case gl.RED: elementCount = 1
break
case gl.RG: elementCount = 2
break
case gl.RGB: elementCount = 3
break
default: elementCount = 4
break
case gl.RED:
elementCount = 1;
break;
case gl.RG:
elementCount = 2;
break;
case gl.RGB:
elementCount = 3;
break;
default:
elementCount = 4;
break;
}

const dataCount = this.width * this.height * this.length * elementCount;
Expand All @@ -49,10 +51,9 @@ export class Texture3D extends Texture {
for (let z = 0; z < this.length; z++) {
for (let y = 0; y < this.height; y++) {
for (let x = 0; x < this.width; x++) {

let zOffsetX = (z % args.tileCountX) * this.width;
let zOffsetY = Math.floor(z / args.tileCountX) * (this.width * this.height * args.tileCountX);
let index = (x + zOffsetX) + ((y * image.width) + zOffsetY);
let index = x + zOffsetX + (y * image.width + zOffsetY);

const r = imageData[index * 4];
const g = imageData[index * 4 + 1];
Expand All @@ -67,16 +68,13 @@ export class Texture3D extends Texture {
} else {
data[dataIterator++] = texel[i] / 255;
}

}

}
}
}

this.image = data;
this.needsUpdate = true;

}
};
}
}
}
1 change: 1 addition & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,4 @@ export { GridHelper } from './extras/helpers/GridHelper.js';
export { VertexNormalsHelper } from './extras/helpers/VertexNormalsHelper.js';
export { FaceNormalsHelper } from './extras/helpers/FaceNormalsHelper.js';
export { InstancedMesh } from './extras/InstancedMesh.js';
export { Texture3D } from './extras/Texture3D.js';
5 changes: 4 additions & 1 deletion types/core/Texture.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export interface TextureOptions {
internalFormat: number;
wrapS: number;
wrapT: number;
wrapR: number;
generateMipmaps: boolean;
minFilter: number;
magFilter: number;
Expand Down Expand Up @@ -54,6 +55,7 @@ export class Texture {
magFilter: number;
wrapS: number;
wrapT: number;
wrapR: number;
generateMipmaps: boolean;
premultiplyAlpha: boolean;
unpackAlignment: number;
Expand All @@ -62,6 +64,7 @@ export class Texture {
level: number;
width: number;
height: number;
length: number;
texture: WebGLTexture;

store: {
Expand All @@ -79,9 +82,9 @@ export class Texture {
};

needsUpdate: boolean;
onUpdate?: () => void;

// Set from texture loader
onUpdate?: () => void | null;
ext?: string;
name?: string;
loaded?: Promise<Texture>;
Expand Down
17 changes: 17 additions & 0 deletions types/extras/Texture3D.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Texture } from '../core/Texture.js';

import type { OGLRenderingContext } from '../core/Renderer.js';
import type { TextureOptions } from '../core/Texture.js';

export interface Texture3DOptions extends TextureOptions {
src: string;
tileCountX: number;
}

/**
* A class for rearranging a flat 3D texture from software like Houdini.
* @see {@link https://github.com/oframe/ogl/blob/master/src/extras/Texture3D.js | Source}
*/
export class Texture3D extends Texture {
constructor(gl: OGLRenderingContext, options?: Partial<Texture3DOptions>);
}
1 change: 1 addition & 0 deletions types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,4 @@ export * from './extras/helpers/GridHelper';
export * from './extras/helpers/VertexNormalsHelper';
export * from './extras/helpers/FaceNormalsHelper';
export * from './extras/InstancedMesh';
export * from './extras/Texture3D.js';

0 comments on commit 31abd49

Please sign in to comment.