Commit 80b6cd02 authored by 邱旭's avatar 邱旭

更新,3D模型骨骼使用纹理贴图的形式传数据,提升骨骼数量上限

parent 7650b0a2
......@@ -16308,7 +16308,8 @@ var TextureManager = /** @class */ (function () {
glTexture = new glCore_1.GLTexture(this.gl, null, null, null, null);
//之前已经active过了,upload里也有bind,这里也许不用执行
// glTexture.bind(location);
glTexture.premultiplyAlpha = true;
// glTexture.premultiplyAlpha = true;
glTexture.premultiplyAlpha = texture.premultipliedAlpha;
if (texture.source.data) { //是data形式
glTexture.uploadData(texture.source.data, texture.width, texture.height);
}
......@@ -26409,21 +26410,22 @@ var __extends = (this && this.__extends) || (function () {
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.D3Renderer = void 0;
var const_1 = __webpack_require__(/*! ../2d/const */ "./src/2d/const.ts");
var BatchBuffer_1 = __webpack_require__(/*! ../2d/renderers/webgl/BatchBuffer */ "./src/2d/renderers/webgl/BatchBuffer.ts");
var ObjectRenderer_1 = __webpack_require__(/*! ../2d/renderers/webgl/ObjectRenderer */ "./src/2d/renderers/webgl/ObjectRenderer.ts");
var WebglRenderer_1 = __webpack_require__(/*! ../2d/renderers/WebglRenderer */ "./src/2d/renderers/WebglRenderer.ts");
var glCore_1 = __webpack_require__(/*! ../glCore */ "./src/glCore/index.ts");
var utils_1 = __webpack_require__(/*! ../2d/utils */ "./src/2d/utils/index.ts");
var Matrix4_1 = __webpack_require__(/*! ./math/Matrix4 */ "./src/3d/math/Matrix4.ts");
var BatchBuffer_1 = __webpack_require__(/*! ../2d/renderers/webgl/BatchBuffer */ "./src/2d/renderers/webgl/BatchBuffer.ts");
var BaseMaterial_1 = __webpack_require__(/*! ./materials/BaseMaterial */ "./src/3d/materials/BaseMaterial.ts");
var getCusShader_1 = __webpack_require__(/*! ./shaders/getCusShader */ "./src/3d/shaders/getCusShader.ts");
var texture_1 = __webpack_require__(/*! ../2d/texture */ "./src/2d/texture/index.ts");
var Vector3_1 = __webpack_require__(/*! ./math/Vector3 */ "./src/3d/math/Vector3.ts");
var ShaderMaterial_1 = __webpack_require__(/*! ./materials/ShaderMaterial */ "./src/3d/materials/ShaderMaterial.ts");
var ShadowShader_1 = __webpack_require__(/*! ./shaders/ShadowShader */ "./src/3d/shaders/ShadowShader.ts");
var BaseRenderTexture_1 = __webpack_require__(/*! ../2d/texture/BaseRenderTexture */ "./src/2d/texture/BaseRenderTexture.ts");
var RenderTexture_1 = __webpack_require__(/*! ../2d/texture/RenderTexture */ "./src/2d/texture/RenderTexture.ts");
var TextureMatrix_1 = __webpack_require__(/*! ../2d/texture/TextureMatrix */ "./src/2d/texture/TextureMatrix.ts");
var utils_1 = __webpack_require__(/*! ../2d/utils */ "./src/2d/utils/index.ts");
var glCore_1 = __webpack_require__(/*! ../glCore */ "./src/glCore/index.ts");
var BaseMaterial_1 = __webpack_require__(/*! ./materials/BaseMaterial */ "./src/3d/materials/BaseMaterial.ts");
var ShaderMaterial_1 = __webpack_require__(/*! ./materials/ShaderMaterial */ "./src/3d/materials/ShaderMaterial.ts");
var Matrix4_1 = __webpack_require__(/*! ./math/Matrix4 */ "./src/3d/math/Matrix4.ts");
var Vector3_1 = __webpack_require__(/*! ./math/Vector3 */ "./src/3d/math/Vector3.ts");
var getCusShader_1 = __webpack_require__(/*! ./shaders/getCusShader */ "./src/3d/shaders/getCusShader.ts");
var ShadowShader_1 = __webpack_require__(/*! ./shaders/ShadowShader */ "./src/3d/shaders/ShadowShader.ts");
var tempVec3 = new Vector3_1.Vector3();
var tempMatrix4 = new Matrix4_1.Matrix4();
//需要管理渲染的状态 resetToDefault resetTo3D
......@@ -26441,7 +26443,8 @@ var D3Renderer = /** @class */ (function (_super) {
var vertexTextures = maxVertexTextures > 0;
var floatFragmentTextures = !!gl.getExtension("OES_texture_float");
//传入的数据纹理暂时有问题,是UNPACK_ALIGNMENT还是UNPACK_FLIP_Y_WEBGL的问题未知,所以不管先
this.floatVertexTextures = false; //vertexTextures && floatFragmentTextures;
// this.floatVertexTextures = false//vertexTextures && floatFragmentTextures;
this.floatVertexTextures = vertexTextures && floatFragmentTextures;
};
D3Renderer.prototype.start = function () {
//设置3d状态机属性
......@@ -26657,6 +26660,8 @@ var D3Renderer = /** @class */ (function (_super) {
boneMatrices.set(skeleton.boneMatrices); // copy current values
var boneTexture = new texture_1.BaseTexture({ data: boneMatrices, width: size, height: size });
boneTexture.mipmap = false;
boneTexture.scaleMode = const_1.SCALE_MODES.NEAREST;
boneTexture.premultipliedAlpha = false;
skeleton.boneMatrices = boneMatrices;
skeleton.boneTexture = boneTexture;
skeleton.boneTextureSize = size;
This diff is collapsed.
{
"name": "fyge",
"version": "2.0.43",
"version": "2.0.44",
"description": "canvas渲染引擎",
"main": "./build/fyge.min.js",
"types": "./build/types.d.ts",
......
......@@ -196,7 +196,8 @@ export default class TextureManager {
glTexture = new GLTexture(this.gl, null, null, null, null);
//之前已经active过了,upload里也有bind,这里也许不用执行
// glTexture.bind(location);
glTexture.premultiplyAlpha = true;
// glTexture.premultiplyAlpha = true;
glTexture.premultiplyAlpha = (texture as BaseTexture).premultipliedAlpha;
if (texture.source.data) {//是data形式
glTexture.uploadData(texture.source.data, texture.width, texture.height)
} else {
......
import { Geometry, VaoBufferInt } from ".";
import { SCALE_MODES } from "../2d/const";
import { BatchBuffer } from "../2d/renderers/webgl/BatchBuffer";
import ObjectRenderer from "../2d/renderers/webgl/ObjectRenderer";
import { WebglRenderer } from "../2d/renderers/WebglRenderer";
import { Camera } from "./cameras/Camera";
import { LightsConfig, ShadowType } from "./Scene3D";
import { GLShader, GLBuffer, VertexArrayObject } from "../glCore";
import { Mesh3D } from "./Mesh3D";
import { BaseShader } from "./shaders/BaseShader";
import { LightShader } from "./shaders/LightShader";
import { hex2rgb, rgb2hex } from "../2d/utils";
import { Matrix4 } from "./math/Matrix4";
import { BLEND_MODES } from "../2d/const";
import { BatchBuffer } from "../2d/renderers/webgl/BatchBuffer";
import { BaseMaterial, RenderSideType } from "./materials/BaseMaterial";
import { getCusShader } from "./shaders/getCusShader";
import { Geometry, VaoBufferInt } from ".";
import { SkinnedMesh3D } from "./bones/SkinnedMesh3D";
import { nextPow2 } from "../2d/utils"
import { BaseTexture, Texture } from "../2d/texture";
import { Vector3 } from "./math/Vector3";
import { UniformType } from "./materials/ShaderMaterial";
import RenderTarget from "../2d/renderers/renderTarget/RenderTarget";
import { ShadowShader } from "./shaders/ShadowShader";
import BaseRenderTexture from "../2d/texture/BaseRenderTexture";
import RenderTexture from "../2d/texture/RenderTexture";
import { OrthographicCamera } from "./cameras/OrthographicCamera";
import TextureMatrix from "../2d/texture/TextureMatrix";
import { hex2rgb } from "../2d/utils";
import { GLBuffer, GLShader, VertexArrayObject } from "../glCore";
import { SkinnedMesh3D } from "./bones/SkinnedMesh3D";
import { Camera } from "./cameras/Camera";
import { BaseMaterial, RenderSideType } from "./materials/BaseMaterial";
import { UniformType } from "./materials/ShaderMaterial";
import { Matrix4 } from "./math/Matrix4";
import { Vector3 } from "./math/Vector3";
import { Mesh3D } from "./Mesh3D";
import { LightsConfig, ShadowType } from "./Scene3D";
import { getCusShader } from "./shaders/getCusShader";
import { ShadowShader } from "./shaders/ShadowShader";
let tempVec3 = new Vector3()
let tempMatrix4 = new Matrix4();
......@@ -65,7 +60,8 @@ export class D3Renderer extends ObjectRenderer {
var vertexTextures = maxVertexTextures > 0;
var floatFragmentTextures = !!gl.getExtension("OES_texture_float");
//传入的数据纹理暂时有问题,是UNPACK_ALIGNMENT还是UNPACK_FLIP_Y_WEBGL的问题未知,所以不管先
this.floatVertexTextures = false//vertexTextures && floatFragmentTextures;
// this.floatVertexTextures = false//vertexTextures && floatFragmentTextures;
this.floatVertexTextures = vertexTextures && floatFragmentTextures;
}
start() {
//设置3d状态机属性
......@@ -283,6 +279,8 @@ export class D3Renderer extends ObjectRenderer {
boneMatrices.set(skeleton.boneMatrices); // copy current values
var boneTexture = new BaseTexture({ data: boneMatrices, width: size, height: size });
boneTexture.mipmap = false;
boneTexture.scaleMode = SCALE_MODES.NEAREST;
boneTexture.premultipliedAlpha = false;
skeleton.boneMatrices = boneMatrices;
skeleton.boneTexture = boneTexture;
skeleton.boneTextureSize = size;
......@@ -413,7 +411,7 @@ export class D3Renderer extends ObjectRenderer {
/**
* 组转集合的所有属性到一个_attrBuffer
* @param geo
* @param geo
* @returns {boolean} 返回是否需要upload数据,一般是vao已有的情况下需要判断,新建vao时是必要upload的
*/
function packGeometry(geo: Geometry): boolean {
......@@ -482,7 +480,7 @@ var morphInfluences = new Float32Array(8);
* 返回要upload的数据
* @param objectInfluences mesh上的权重数组
* @param geo 几何
* @param vao
* @param vao
*/
function addMorphtargetsAttr(
objectInfluences: number[],
......@@ -634,9 +632,9 @@ let shadowShaders: { [key: string]: ShadowShader } = {};
// let shadowMatrix: Matrix4;
/**
* 生成影子深度图
* @param lights
* @param meshes
* @param renderer
* @param lights
* @param meshes
* @param renderer
*/
function getShadowMap(
lights: LightsConfig,
......@@ -840,4 +838,4 @@ function isArrayEqual(arr1: any[] | Float32Array, arr2: any[] | Float32Array) {
// }
}
return true;
}
\ No newline at end of file
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment