Home Manual Reference Source

src/gl/S3GLVertex.js

import S3Vertex from "../basic/S3Vertex.js";
import S3Vector from "../math/S3Vector.js";
import S3GLArray from "./S3GLArray.js";

/**
 * WebGL描画用の頂点(バーテックス)クラス。
 * S3Vertexを拡張し、GL用データ生成やハッシュ化などを提供します。
 * 頂点情報(位置)をGL向け形式に変換し、バーテックスシェーダのattributeと連携できます。
 *
 * @class
 * @extends S3Vertex
 * @module S3
 */
export default class S3GLVertex extends S3Vertex {
	/**
	 * S3GLVertexのインスタンスを生成します。
	 * @param {S3Vector} position 頂点の3次元位置ベクトル
	 */
	constructor(position) {
		super(position);
	}

	/**
	 * この頂点のクローン(複製)を作成します。
	 * @returns {S3GLVertex} 複製されたS3GLVertexインスタンス
	 */
	clone() {
		// @ts-ignore
		return super.clone(S3GLVertex);
	}

	/**
	 * WebGL用の一意なハッシュ値を返します。
	 * 頂点座標情報から3進数文字列で算出されます。
	 * 頂点共有やVBO再利用の判定等で用います。
	 * @returns {string} 頂点を識別するハッシュ文字列
	 */
	getGLHash() {
		return this.position.toString(3);
	}

	/**
	 * 頂点情報をWebGL用データ形式(attribute変数用)で返します。
	 * GLSLバーテックスシェーダの「vertexPosition」属性と対応します。
	 *
	 * - vertexPosition: 頂点の位置情報(vec3/Float32ArrayとしてGLに渡す)
	 * @returns {{[key: string]: S3GLArray}}
	 */
	getGLData() {
		return {
			vertexPosition: new S3GLArray(this.position, 3, S3GLArray.datatype.Float32Array)
		};
	}
}