UNPKG

xl-pano

Version:

一个基于 Typescript 的,同时支持立方体和球体场景的轻量开源库。

88 lines (87 loc) 2.78 kB
import { TextureSource, WebGLRenderingContextWithProgram } from "../types/index"; import Pano from "./Pano"; import BaseScene from "./interface/BaseScene"; import { SceneAngle } from "./interface/Scene"; /** * 每个面的编号 0-f 1-r 2-u 3-l 4-d 5-b * */ declare type Unit = 0 | 1 | 2 | 3 | 4 | 5; /** * 场景类,提供全景画面 * 立方体 * v6----- v5 * /| /| * v1------v0| * | | | | * | |v7---|-|v4 * |/ |/ * v2------v3 * */ export default class CubeScene extends BaseScene { /** * @static {Float32Array} vertices 立方体顶点坐标 * */ static vertices: Float32Array; /** * @static {Float32Array} texs 顶点对应的纹理坐标 * */ static texs: Float32Array; /** * @static {Uint8Array[]} allFacesIndices 六个面的顶点索引数组 * */ static allFacesIndices: Uint8Array[]; /** * @static {WebGLUniformLocation} u_Face 的地址 * 第一次渲染的时候被赋值 * */ static u_Face?: WebGLUniformLocation; /** * 将每个面的纹理贴图赋值给每个面的 sampler * @param {WebGLRenderingContextWithProgram} gl WebGL 上下文 * @param {TexImageSource} image 图像资源 * @param {number} unit 每个面的编号 0-f 1-r 2-u 3-l 4-d 5-b * */ static initTexture(gl: WebGLRenderingContextWithProgram, image: TexImageSource, unit: Unit): void; /** * 获取 u_Face 缓存 * @param {WebGLRenderingContextWithProgram} gl WebGL 上下文 * @return {WebGLUniformLocation} u_Face 地址 * */ static getUFaceLocation(gl: WebGLRenderingContextWithProgram): WebGLUniformLocation; /** * @property {TextureSource[]} textures 六个面的纹理图片,按照 f r u l d b 的顺序 * */ textures: TextureSource[]; /** * @constructor 构造函数 * @param {string[]} textures 六个面的纹理图片,按照 f r u l d b 的顺序 * @param {SceneAngle} defaultAngle 默认展示角度 * */ constructor(textures: TextureSource[], defaultAngle?: SceneAngle); /** * 渲染立方体 * */ drawModel(): void; /** * 加载纹理贴图 * @return {Promise<TexImageSource[]>} 图像资源 * */ private loadTextures; /** * 渲染立方体的其中一面 * @param {Uint8Array} indices 该面的顶点索引 * @param {Unit} unit 每个面的编号 * */ private renderFace; /** * 更改纹理重新渲染 * @param {TextureSource[]} textures 纹理资源集合,按照 f r u l d b 的顺序 * */ replaceTextures(textures: TextureSource[]): void; /** * 渲染到 pano * @param {Pano} pano 父容器 * */ render(pano: Pano): void; } export {};