/*! * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. */ import { vec3, vec4 } from "gl-matrix"; import { Texture } from "./texture.js"; export declare const MaterialType: { readonly lambertian: 0; readonly metal: 1; readonly dielectric: 2; readonly glossy: 3; readonly diffuseLight: 4; readonly isotropic: 5; readonly varnish: 6; }; export type MaterialType = (typeof MaterialType)[keyof typeof MaterialType]; export declare class MaterialBufferData extends Float32Array { static readonly SIZE: number; readonly TYPE_OFFSET: number; readonly FUZZ_OFFSET: number; readonly REFRACTIVE_INDEX_OFFSET: number; readonly TEXTURE_ID_OFFSET: number; readonly COLOR_OFFSET: number; readonly GLOSSINESS_OFFSET: number; readonly ID_COLOR_OFFSET: number; readonly DENSITY_OFFSET: number; constructor(count: number); getType(index: number): number; setType(index: number, value: MaterialType): void; getFuzz(index: number): number; setFuzz(index: number, value: number): void; getRefractiveIndex(index: number): number; setRefractiveIndex(index: number, value: number): void; getTextureId(index: number): number; setTextureId(index: number, value: number): void; getColor(index: number, value: vec3): void; setColor(index: number, value: vec3): void; getGlossiness(index: number): number; setGlossiness(index: number, value: number): void; getDensity(index: number): number; setDensity(index: number, value: number): void; getIdColor(index: number, value: vec4): void; setIdColor(index: number, value: vec4): void; } export interface IMaterialOptions { idColor?: vec4; } export declare abstract class Material { protected _idColor: vec4; protected _texture: Texture; get texture(): Texture; get idColor(): vec4; constructor(options: IMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface ILambertianMaterialOptions extends IMaterialOptions { texture: Texture; } export declare class LambertianMaterial extends Material { constructor(options: ILambertianMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface IMetalMaterialOptions extends IMaterialOptions { fuzz?: number; texture: Texture; } export declare class MetalMaterial extends Material { fuzz: number; constructor(options: IMetalMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface IDielectricMaterialOptions extends IMaterialOptions { refractiveIndex?: number; fuzz?: number; glossiness?: number; color?: vec3; density?: number; } export declare class DielectricMaterial extends Material { refractiveIndex: number; color: vec3; fuzz: number; glossiness: number; density: number; constructor(options?: IDielectricMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface IDiffuseLightMaterialOptions extends IMaterialOptions { color?: vec3; } export declare class DiffuseLightMaterial extends Material { color: vec3; constructor(options?: IDiffuseLightMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface IGlossyMaterialOptions extends IMaterialOptions { texture: Texture; fuzz?: number; glossiness?: number; refractiveIndex?: number; } export declare class GlossyMaterial extends Material { fuzz: number; glossiness: number; refractiveIndex: number; constructor(options: IGlossyMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface IIsotropicMaterialOptions extends IMaterialOptions { density: number; color: vec3; } export declare class IsotropicMaterial extends Material { density: number; color: vec3; constructor(options: IIsotropicMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; } export interface IVarnishMaterialOptions extends IMaterialOptions { fuzz?: number; glossiness?: number; refractiveIndex?: number; } export declare class VarnishMaterial extends Material { fuzz: number; glossiness: number; refractiveIndex: number; constructor(options?: IVarnishMaterialOptions); toBuffer(buffer: MaterialBufferData, index: number, textureId: number): void; }