import GLEnv from "./GLEnv"; import MeshBuffer from "./MeshBuffer"; import type Material from "./Material"; /** * モデルメッシュ */ declare class Mesh { /** * @param glenv - WebGL 環境 * @param data - メッシュデータ */ constructor(glenv: GLEnv, data: Mesh.Initializer | MeshData); /** * Initializer による初期化 * * @param init - 初期化データ */ private _initByInitializer; /** * DrawMode 型から GL 描画モードへ変換 * * @param mode - 描画モード * * @return GL 描画モード */ private _convertDrawMode; /** * ComponentType 型から GL 要素型へ変換 * * @param ctype - 要素型 * * @return GL 要素型 */ private _convertComponentType; /** * リソースを破棄 */ dispose(): void; /** * メッシュを描画 * * 事前に `material.bindProgram()`, `material.setFloat()` 等のパラ * メータ設定、`material.bindTexture2D()` によるテクスチャのバイン * ドを実行すること。 * * @param material マテリアル */ draw(material: Material): void; /** * WebGL の描画モードを取得 * * @deprecated * 既存のコードの変更を最小限にするために追加したメソッド */ get gl_draw_mode(): GLenum; private readonly _glenv; private readonly _draw_mode; private readonly _num_vertices; private readonly _attrib_data; private readonly _index_data; } /** * [[Mesh.Initializer.addIndex]] のオプション型 */ export interface IndexOption { /** * バッファ先頭からのバイトオフセット * * @defaultValue 0 */ byte_offset?: number; } /** * [[Mesh.Initializer.addAttribute]] のオプション型 */ export interface AttributeOption { /** * 正規化整数座標か? * * @defaultValue `false` */ normalized?: boolean; /** * 頂点間のバイトストライド * * @defaultValue 0 */ byte_stride?: number; /** * バッファ先頭からのバイトオフセット * * @defaultValue 0 */ byte_offset?: number; } interface IndexInitData { buffer: MeshBuffer; num_indices: number; type: Mesh.ComponentType; byte_offset: number; } interface AttribInitEntry { id: string; buffer: MeshBuffer; num_components: number; component_type: Mesh.ComponentType; normalized: boolean; byte_stride: number; byte_offset: number; } declare namespace Mesh { /** * メッシュの初期化オブジェクト */ class Initializer { readonly draw_mode: Mesh.DrawMode; readonly num_vertices: number; readonly attribute_data: AttribInitEntry[]; get index_data(): IndexInitData | null; /** * @param draw_mode - 描画モード * @param num_vertices - 頂点数 */ constructor(draw_mode: Mesh.DrawMode, num_vertices: number); /** * インデックスデータを追加 * * @param buffer - バッファ * @param num_indices - インデックス数 * @param type - インデックス型 (UNSIGNED_BYTE | UNSIGNED_SHORT | UNSIGNED_INT) * @param options - オプション */ addIndex(buffer: MeshBuffer, num_indices: number, type: Mesh.ComponentType, options?: IndexOption): void; /** * 頂点属性データを追加 * * @param id - 属性名 * @param buffer - バッファ * @param num_components - 要素数 * @param component_type - 要素型 * @param options - オプション */ addAttribute(id: string, buffer: MeshBuffer, num_components: number, component_type: Mesh.ComponentType, options?: AttributeOption): void; private _index_data; } /** * 描画モードの列挙型 */ const enum DrawMode { /** * 点リスト */ POINTS = "@@_POINTS", /** * 線分リスト */ LINES = "@@_LINES", /** * 三角形リスト */ TRIANGLES = "@@_TRIANGLES", /** * 線分ループ */ LINE_LOOP = "@@_LINE_LOOP", /** * 線分ストリップ */ LINE_STRIP = "@@_LINE_STRIP", /** * 三角形ストリップ */ TRIANGLE_STRIP = "@@_TRIANGLE_STRIP", /** * 三角形ファン */ TRIANGLE_FAN = "@@_TRIANGLE_FAN" } /** * 要素型の列挙型 */ const enum ComponentType { /** * 符号付き 8 ビット整数型 */ BYTE = "@@_BYTE", /** * 符号なし 8 ビット整数型 */ UNSIGNED_BYTE = "@@_UNSIGNED_BYTE", /** * 符号付き 16 ビット整数型 */ SHORT = "@@_SHORT", /** * 符号なし 16 ビット整数型 */ UNSIGNED_SHORT = "@@_UNSIGNED_SHORT", /** * 符号なし 32 ビット整数型 */ UNSIGNED_INT = "@@_UNSIGNED_INT", /** * 32 ビット浮動小数点数型 */ FLOAT = "@@_FLOAT" } } /** * メッシュの頂点情報の型 */ export interface VertexInfo { /** * 頂点属性名 */ name: string; /** * 要素数 */ size: number; } /** * 簡易的なメッシュ生成のためのデータ型 * * より細かい指定をするためには [[Mesh.Initializer]] を使用する。 */ export interface MeshData { /** * 頂点情報 */ vtype: VertexInfo[] | "P" | "PN" | "PT" | "PNT" | number; /** * プリミティブ型 * * @defaultValue "triangles" */ ptype?: "triangles" | "lines" | "points"; /** * 頂点データ */ vertices: ArrayLike; /** * インデックスデータ */ indices?: ArrayLike; } export default Mesh; //# sourceMappingURL=Mesh.d.ts.map