three#BufferGeometry TypeScript Examples
The following examples show how to use
three#BufferGeometry.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: NGraphics.ts From FairyGUI-threejs with MIT License | 6 votes |
private writeAttribute(gm: BufferGeometry, name: string, arr: Array<number>, itemSize: number): void {
let attr: BufferAttribute = <BufferAttribute>gm.attributes[name];
if (!attr || !attr.isBufferAttribute || attr.array.length < arr.length) {
attr = new BufferAttribute(new Float32Array(arr.length), itemSize);
gm.setAttribute(name, attr);
}
attr.copyArray(arr);
attr.needsUpdate = true;
}
Example #2
Source File: NGraphics.ts From FairyGUI-threejs with MIT License | 6 votes |
private writeIndexAttribute(gm: BufferGeometry, arr: Array<number>): void {
let attr: BufferAttribute = <BufferAttribute>gm.index;
if (!attr || !attr.isBufferAttribute || attr.array.length < arr.length) {
attr = new BufferAttribute(new Uint16Array(arr.length), 1);
gm.index = attr;
}
attr.copyArray(arr);
attr.needsUpdate = true;
}
Example #3
Source File: NGraphics.ts From FairyGUI-threejs with MIT License | 6 votes |
public constructor(owner: Object3D) {
this._color = 0xFFFFFF;
this._contentRect = new Rect();
this._material = new NMaterial();
this._geometry = new BufferGeometry();
let o = <any>owner;
o.geometry = this._geometry;
o.material = this._material;
o.isMesh = true;
o.drawMode = TrianglesDrawMode;
delete o.isGroup;
}
Example #4
Source File: NeighborDebugSystem.tsx From react-ecs with MIT License | 6 votes |
fetch(parent: Object3D, v1: Vector3, v2: Vector3) {
if (this.pool.length) {
const line = this.pool.pop();
line.geometry.setFromPoints([v1, v2]);
parent.attach(line)
return line;
} else {
const points = [v1, v2];
const geometry = new BufferGeometry();
const line = new Line( geometry, material );
line.geometry.setFromPoints(points)
parent.attach(line)
return line;
}
}
Example #5
Source File: Mesh.ts From trois with MIT License | 6 votes |
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export function meshComponent<P extends Readonly<ComponentPropsOptions>>(
name: string,
props: P,
createGeometry: {(c: any): BufferGeometry}
) {
return defineComponent({
name,
extends: Mesh,
props,
created() {
this.createGeometry()
this.addGeometryWatchers(props)
},
methods: {
createGeometry() {
this.geometry = createGeometry(this)
},
},
})
}
Example #6
Source File: Geometry.ts From trois with MIT License | 6 votes |
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export function geometryComponent<P extends Readonly<ComponentPropsOptions>>(
name: string,
props: P,
createGeometry: {(c: any): BufferGeometry}
) {
return defineComponent({
name,
extends: Geometry,
props,
methods: {
createGeometry() {
this.geometry = createGeometry(this)
this.geometry.userData.component = this
this.$emit('created', this.geometry)
},
},
})
}
Example #7
Source File: collision.ts From spacesvr with MIT License | 6 votes |
useTrimeshCollision = (geometry: BufferGeometry) => {
const indices = (geometry.index as BufferAttribute).array as number[];
const isInterleaved =
// @ts-ignore
geometry.attributes.position.isInterleavedBufferAttribute;
let vertices: number[] = [];
if (isInterleaved) {
const attr = geometry.attributes.position as InterleavedBufferAttribute;
const data = attr.data;
for (let i = attr.offset; i < data.array.length; i += data.stride) {
for (let x = 0; x < attr.itemSize; x++) {
vertices.push(data.array[i + x]);
}
}
} else {
vertices = (geometry.attributes.position as BufferAttribute)
.array as number[];
}
const [hitbox] = useTrimesh(() => ({
type: "Static",
args: [vertices, indices],
}));
return hitbox;
}
Example #8
Source File: MapView.ts From geo-three with MIT License | 6 votes |
/**
* Ajust node configuration depending on the camera distance.
*
* Called everytime before render.
*/
public onBeforeRender: (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group)=> void = (renderer, scene, camera, geometry, material, group) =>
{
this.lod.updateLOD(this, camera, renderer, scene);
};
Example #9
Source File: MapHeightNode.ts From geo-three with MIT License | 6 votes |
/**
* Map height node constructor.
*
* @param parentNode - The parent node of this node.
* @param mapView - Map view object where this node is placed.
* @param location - Position in the node tree relative to the parent.
* @param level - Zoom level in the tile tree of the node.
* @param x - X position of the node in the tile tree.
* @param y - Y position of the node in the tile tree.
* @param material - Material used to render this height node.
* @param geometry - Geometry used to render this height node.
*/
public constructor(parentNode: MapHeightNode = null, mapView: MapView = null, location: number = MapNode.root, level: number = 0, x: number = 0, y: number = 0, geometry: BufferGeometry = MapHeightNode.geometry, material: Material = new MeshPhongMaterial({wireframe: false, color: 0xffffff}))
{
super(parentNode, mapView, location, level, x, y, geometry, material);
this.isMesh = true;
this.visible = false;
this.matrixAutoUpdate = false;
}
Example #10
Source File: MapNode.ts From geo-three with MIT License | 6 votes |
public constructor(parentNode: MapNode = null, mapView: MapView = null, location: number = MapNode.root, level: number = 0, x: number = 0, y: number = 0, geometry: BufferGeometry = null, material: Material = null)
{
super(geometry, material);
this.mapView = mapView;
this.parentNode = parentNode;
this.location = location;
this.level = level;
this.x = x;
this.y = y;
this.initialize();
}
Example #11
Source File: MapSphereNode.d.ts From geo-three with MIT License | 5 votes |
static baseGeometry: BufferGeometry;
Example #12
Source File: Mesh.ts From trois with MIT License | 5 votes |
Mesh = defineComponent({
name: 'Mesh',
extends: Object3D,
props: {
castShadow: Boolean,
receiveShadow: Boolean,
},
setup(): MeshSetupInterface {
return {}
},
provide() {
return {
[MeshInjectionKey as symbol]: this,
}
},
mounted() {
// TODO : proper ?
if (!this.mesh && !this.loading) this.initMesh()
},
methods: {
initMesh() {
const mesh = new TMesh(this.geometry, this.material)
bindProp(this, 'castShadow', mesh)
bindProp(this, 'receiveShadow', mesh)
this.mesh = mesh
this.initObject3D(mesh)
},
createGeometry() {},
addGeometryWatchers(props: Readonly<ComponentPropsOptions>) {
Object.keys(props).forEach(prop => {
// @ts-ignore
watch(() => this[prop], () => {
this.refreshGeometry()
})
})
},
setGeometry(geometry: BufferGeometry) {
this.geometry = geometry
if (this.mesh) this.mesh.geometry = geometry
},
setMaterial(material: Material) {
this.material = material
if (this.mesh) this.mesh.material = material
},
refreshGeometry() {
const oldGeo = this.geometry
this.createGeometry()
if (this.mesh && this.geometry) this.mesh.geometry = this.geometry
oldGeo?.dispose()
},
},
unmounted() {
// for predefined mesh (geometry/material are not unmounted)
if (this.geometry) this.geometry.dispose()
if (this.material) this.material.dispose()
},
__hmrId: 'Mesh',
})
Example #13
Source File: MapHeightNode.ts From geo-three with MIT License | 5 votes |
/**
* Map node plane geometry.
*/
public static geometry: BufferGeometry = new MapNodeGeometry(1, 1, 1, 1);
Example #14
Source File: MapHeightNode.ts From geo-three with MIT License | 5 votes |
public static baseGeometry: BufferGeometry = MapPlaneNode.geometry;
Example #15
Source File: MapHeightNodeShader.ts From geo-three with MIT License | 5 votes |
/**
* Map node plane geometry.
*/
public static geometry: BufferGeometry = new MapNodeGeometry(1.0, 1.0, MapHeightNodeShader.geometrySize, MapHeightNodeShader.geometrySize, true);
Example #16
Source File: MapHeightNodeShader.ts From geo-three with MIT License | 5 votes |
public static baseGeometry: BufferGeometry = MapPlaneNode.geometry;
Example #17
Source File: MapMartiniHeightNode.ts From geo-three with MIT License | 5 votes |
/**
* Process the height texture received from the tile data provider.
*
* @param image - Image element received by the tile provider.
*/
public async onHeightImage(image: HTMLImageElement): Promise<void>
{
const tileSize = image.width;
const gridSize = tileSize + 1;
var canvas = CanvasUtils.createOffscreenCanvas(tileSize, tileSize);
var context = canvas.getContext('2d');
context.imageSmoothingEnabled = false;
context.drawImage(image, 0, 0, tileSize, tileSize, 0, 0, canvas.width, canvas.height);
var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
var data = imageData.data;
const terrain = MapMartiniHeightNode.getTerrain(data, tileSize, this.elevationDecoder);
const martini = new Martini(gridSize);
const tile = martini.createTile(terrain);
const {vertices, triangles} = tile.getMesh(typeof this.meshMaxError === 'function' ? this.meshMaxError(this.level) : this.meshMaxError);
const attributes = MapMartiniHeightNode.getMeshAttributes(vertices, terrain, tileSize, [-0.5, -0.5, 0.5, 0.5], this.exageration);
this.geometry = new BufferGeometry();
this.geometry.setIndex(new Uint32BufferAttribute(triangles, 1));
this.geometry.setAttribute('position', new Float32BufferAttribute( attributes.position.value, attributes.position.size));
this.geometry.setAttribute('uv', new Float32BufferAttribute( attributes.uv.value, attributes.uv.size));
this.geometry.rotateX(Math.PI);
var texture = new Texture(image);
texture.generateMipmaps = false;
texture.format = RGBAFormat;
texture.magFilter = NearestFilter;
texture.minFilter = NearestFilter;
texture.needsUpdate = true;
this.material.userData.heightMap.value = texture;
// @ts-ignore
this.material.map = texture;
// @ts-ignore
this.material.needsUpdate = true;
}
Example #18
Source File: MapNode.ts From geo-three with MIT License | 5 votes |
/**
* Base geometry is attached to the map viewer object.
*
* It should have the full size of the world so that operations over the MapView bounding box/sphere work correctly.
*/
public static baseGeometry: BufferGeometry = null;
Example #19
Source File: MapPlaneNode.ts From geo-three with MIT License | 5 votes |
/**
* Map node plane geometry.
*/
public static geometry: BufferGeometry = new MapNodeGeometry(1, 1, 1, 1, false);
Example #20
Source File: MapPlaneNode.ts From geo-three with MIT License | 5 votes |
public static baseGeometry: BufferGeometry = MapPlaneNode.geometry;
Example #21
Source File: MapSphereNode.ts From geo-three with MIT License | 5 votes |
public static baseGeometry: BufferGeometry = new MapSphereNodeGeometry(UnitsUtils.EARTH_RADIUS, 64, 64, 0, 2 * Math.PI, 0, Math.PI);
Example #22
Source File: Geometry.ts From trois with MIT License | 5 votes |
Geometry = defineComponent({
emits: ['created'],
props: {
rotateX: Number,
rotateY: Number,
rotateZ: Number,
attributes: { type: Array as PropType<Array<GeometryAttributeInterface>>, default: () => ([]) },
},
// inject for sub components
inject: {
mesh: MeshInjectionKey as symbol,
},
setup(): GeometrySetupInterface {
return {}
},
created() {
if (!this.mesh) {
console.error('Missing parent Mesh')
return
}
this.createGeometry()
this.rotateGeometry()
if (this.geometry) this.mesh.setGeometry(this.geometry)
Object.keys(this.$props).forEach(prop => {
// @ts-ignore
watch(() => this[prop], this.refreshGeometry)
})
},
unmounted() {
this.geometry?.dispose()
},
methods: {
createGeometry() {
const bufferAttributes: Record<string, unknown> = {}
const geometry = new BufferGeometry()
this.attributes.forEach(attribute => {
if (attribute.name && attribute.itemSize && attribute.array) {
const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized)
geometry.setAttribute(attribute.name, bufferAttribute)
}
})
geometry.computeBoundingBox()
geometry.userData.component = this
this.geometry = geometry
this.$emit('created', geometry)
},
rotateGeometry() {
if (!this.geometry) return
if (this.rotateX) this.geometry.rotateX(this.rotateX)
if (this.rotateY) this.geometry.rotateY(this.rotateY)
if (this.rotateZ) this.geometry.rotateZ(this.rotateZ)
},
refreshGeometry() {
const oldGeo = this.geometry
this.createGeometry()
this.rotateGeometry()
if (this.geometry && this.mesh) this.mesh.setGeometry(this.geometry)
oldGeo?.dispose()
},
},
render() { return [] },
})
Example #23
Source File: MapHeightNode.d.ts From geo-three with MIT License | 5 votes |
static geometry: BufferGeometry;
Example #24
Source File: NGraphics.ts From FairyGUI-threejs with MIT License | 5 votes |
private _geometry: BufferGeometry;
Example #25
Source File: MapView.d.ts From geo-three with MIT License | 5 votes |
onBeforeRender: (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group) => void;
Example #26
Source File: MapNodeGeometry.d.ts From geo-three with MIT License | 5 votes |
export declare class MapNodeGeometry extends BufferGeometry {
constructor(width?: number, height?: number, widthSegments?: number, heightSegments?: number, skirt?: boolean, skirtDepth?: number);
static buildPlane(width: number, height: number, widthSegments: number, heightSegments: number, indices: number[], vertices: number[], normals: number[], uvs: number[]): void;
static buildSkirt(width: number, height: number, widthSegments: number, heightSegments: number, skirtDepth: number, indices: number[], vertices: number[], normals: number[], uvs: number[]): void;
}
Example #27
Source File: MapNodeHeightGeometry.d.ts From geo-three with MIT License | 5 votes |
export declare class MapNodeHeightGeometry extends BufferGeometry {
constructor(width?: number, height?: number, widthSegments?: number, heightSegments?: number, skirt?: boolean, skirtDepth?: number, imageData?: ImageData, calculateNormals?: boolean);
computeNormals(widthSegments: number, heightSegments: number): void;
}
Example #28
Source File: MapSphereNodeGeometry.d.ts From geo-three with MIT License | 5 votes |
export declare class MapSphereNodeGeometry extends BufferGeometry {
constructor(radius: number, widthSegments: number, heightSegments: number, phiStart: number, phiLength: number, thetaStart: number, thetaLength: number);
}
Example #29
Source File: MapHeightNode.d.ts From geo-three with MIT License | 5 votes |
constructor(parentNode?: MapHeightNode, mapView?: MapView, location?: number, level?: number, x?: number, y?: number, geometry?: BufferGeometry, material?: Material);