xl-pano
Version:
一个基于 Typescript 的,同时支持立方体和球体场景的轻量开源库。
88 lines (87 loc) • 2.78 kB
TypeScript
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 {};