Commit 916af005 authored by wjf's avatar wjf

2.0.20

parent 8459ab26
...@@ -597,11 +597,11 @@ export class Transform extends HashObject { ...@@ -597,11 +597,11 @@ export class Transform extends HashObject {
*/ */
localMatrix: Matrix; localMatrix: Matrix;
/** /**
* 记录是否更新worldMatrix * 记录子级是否更新worldMatrix,需要保证子级修改设置_worldID++
*/ */
_worldID: number; _worldID: number;
/** /**
* 记录是否和父级更新的_worldID一致 * 记录是否和父级更新的_worldID一致,需要保证跟随父级修改设置_parentID=-1
*/ */
_parentID: number; _parentID: number;
/** /**
...@@ -630,7 +630,7 @@ export class Transform extends HashObject { ...@@ -630,7 +630,7 @@ export class Transform extends HashObject {
_cy: number; _cy: number;
_sy: number; _sy: number;
/** /**
* 记录的本地坐标id * 记录的本地坐标id;需要保证本地矩阵修改设置_localID++
*/ */
_localID: number; _localID: number;
/** /**
...@@ -9302,7 +9302,11 @@ export interface IntersectData { ...@@ -9302,7 +9302,11 @@ export interface IntersectData {
} }
export class Scene3D extends Object3D { export class Scene3D extends Object3D {
private _localID; private _viewId;
/**
* gl的视窗数据记录,是左下角开始,以防混淆不用Rectangle
*/
private _viewport;
private _viewX; private _viewX;
get viewX(): number; get viewX(): number;
set viewX(value: number); set viewX(value: number);
......
This diff is collapsed.
This diff is collapsed.
...@@ -597,11 +597,11 @@ export class Transform extends HashObject { ...@@ -597,11 +597,11 @@ export class Transform extends HashObject {
*/ */
localMatrix: Matrix; localMatrix: Matrix;
/** /**
* 记录是否更新worldMatrix * 记录子级是否更新worldMatrix,需要保证子级修改设置_worldID++
*/ */
_worldID: number; _worldID: number;
/** /**
* 记录是否和父级更新的_worldID一致 * 记录是否和父级更新的_worldID一致,需要保证跟随父级修改设置_parentID=-1
*/ */
_parentID: number; _parentID: number;
/** /**
...@@ -630,7 +630,7 @@ export class Transform extends HashObject { ...@@ -630,7 +630,7 @@ export class Transform extends HashObject {
_cy: number; _cy: number;
_sy: number; _sy: number;
/** /**
* 记录的本地坐标id * 记录的本地坐标id;需要保证本地矩阵修改设置_localID++
*/ */
_localID: number; _localID: number;
/** /**
...@@ -9302,7 +9302,11 @@ export interface IntersectData { ...@@ -9302,7 +9302,11 @@ export interface IntersectData {
} }
export class Scene3D extends Object3D { export class Scene3D extends Object3D {
private _localID; private _viewId;
/**
* gl的视窗数据记录,是左下角开始,以防混淆不用Rectangle
*/
private _viewport;
private _viewX; private _viewX;
get viewX(): number; get viewX(): number;
set viewX(value: number); set viewX(value: number);
......
...@@ -248,7 +248,7 @@ ...@@ -248,7 +248,7 @@
s.lineTo(10, 10); s.lineTo(10, 10);
s.endStroke() s.endStroke()
console.log( FYGE.toDisplayDataURL(stage,null,{type: "jpeg"})) // console.log( FYGE.toDisplayDataURL(stage,null,{type: "jpeg"}))
}, this); }, this);
//循环 //循环
......
{ {
"name": "fyge", "name": "fyge",
"version": "2.0.19", "version": "2.0.20",
"description": "canvas渲染引擎", "description": "canvas渲染引擎",
"main": "./build/fyge.min.js", "main": "./build/fyge.min.js",
"types": "./build/types.d.ts", "types": "./build/types.d.ts",
......
...@@ -240,7 +240,6 @@ ...@@ -240,7 +240,6 @@
2.0.18 loadAtlas里的 createTexturesByAtlas trim的y轴偏移修改 2.0.18 loadAtlas里的 createTexturesByAtlas trim的y轴偏移修改
//还未pub
2.0.19 loadSpine修改,返回对象格式修改,包括动画数据,纹理数据,spine实例对象 2.0.19 loadSpine修改,返回对象格式修改,包括动画数据,纹理数据,spine实例对象
删除determineCrossOrigin文件 删除determineCrossOrigin文件
Bone计算时 noRotationOrReflection,scaleY乘上sy。负号 Bone计算时 noRotationOrReflection,scaleY乘上sy。负号
...@@ -250,6 +249,12 @@ ...@@ -250,6 +249,12 @@
MovieClip里的init方法里添加移除所有子级,移除startAniRangeFun事件, MovieClip里的init方法里添加移除所有子级,移除startAniRangeFun事件,
MovieClip添加静态方法deepCopyFrames MovieClip添加静态方法deepCopyFrames
2.0.20 Graphics的_renderCanvas方法里去掉了this.parent判断,去掉执行updateTransform
Transform的updateWorldMatrix方法里去掉了==-1相关判断
CanvasRenderer的render方法两个事件名修改,还有带transform时_worldID=-1改为_worldID++;
toDisplayDataURL绘制完设置_parentID = -1;
Scene3D修改_localId为_viewId,记录_viewport
现在不改,索引数据过大时得用Uint32Array,同时开扩展gl.getExtension( "OES_element_index_uint" )和drawElements改参数类型为gl.UNSIGNED_INT 现在不改,索引数据过大时得用Uint32Array,同时开扩展gl.getExtension( "OES_element_index_uint" )和drawElements改参数类型为gl.UNSIGNED_INT
//现在不改,DisplayObject的getLocalBounds最后是否考虑计算一次updateTransform(不用计算自己的,为了计算子级的) //现在不改,DisplayObject的getLocalBounds最后是否考虑计算一次updateTransform(不用计算自己的,为了计算子级的)
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* @name VERSION * @name VERSION
* @type {string} * @type {string}
*/ */
export const VERSION = "2.0.19"; export const VERSION = "2.0.20";
/** /**
......
...@@ -1131,11 +1131,11 @@ export default class Graphics extends Container { ...@@ -1131,11 +1131,11 @@ export default class Graphics extends Container {
this.alpha = tempAlpha; this.alpha = tempAlpha;
this.cacheAsBitmap = true; this.cacheAsBitmap = true;
this.children = tempChildren;//待测试,还原原先子级 this.children = tempChildren;//待测试,还原原先子级
if (this.parent) { // if (this.parent) {
//generateCanvasTexture里用canvasRenderer渲染会修改世界矩阵,保证自己能根据父级矩阵更新回来 //generateCanvasTexture里用canvasRenderer渲染会修改世界矩阵,保证自己能根据父级矩阵更新回来
this.transform._parentID = -1; this.transform._parentID = -1;
this.updateTransform(); // this.updateTransform();
} // }
} }
//普通画图的渲染,提供图片和图形的插件,先判断_anchorTexture,offsetX,0 //普通画图的渲染,提供图片和图形的插件,先判断_anchorTexture,offsetX,0
renderer.plugins.sprite.render(this); renderer.plugins.sprite.render(this);
......
...@@ -18,11 +18,11 @@ export default class Transform extends HashObject { ...@@ -18,11 +18,11 @@ export default class Transform extends HashObject {
//约定,要更新时。父级的_worldID 和子级的_parentID不能同时设为-1;或者,只要都是-1就要更新 //约定,要更新时。父级的_worldID 和子级的_parentID不能同时设为-1;或者,只要都是-1就要更新
/** /**
* 记录是否更新worldMatrix * 记录子级是否更新worldMatrix,需要保证子级修改设置_worldID++
*/ */
_worldID: number; _worldID: number;
/** /**
* 记录是否和父级更新的_worldID一致 * 记录是否和父级更新的_worldID一致,需要保证跟随父级修改设置_parentID=-1
*/ */
_parentID: number; _parentID: number;
/** /**
...@@ -52,7 +52,7 @@ export default class Transform extends HashObject { ...@@ -52,7 +52,7 @@ export default class Transform extends HashObject {
_sy: number; _sy: number;
/** /**
* 记录的本地坐标id * 记录的本地坐标id;需要保证本地矩阵修改设置_localID++
*/ */
_localID: number; _localID: number;
/** /**
...@@ -161,8 +161,8 @@ export default class Transform extends HashObject { ...@@ -161,8 +161,8 @@ export default class Transform extends HashObject {
this._parentID = -1; this._parentID = -1;
} }
//判断是否和父级更新的_worldID一致,或者都为-1(防止都设为-1的情况) //判断是否和父级更新的_worldID一致,或者都为-1(防止都设为-1的情况)去掉-1判断后TODO待测试
if (this._parentID !== parentTransform._worldID || parentTransform._worldID == -1) { if (this._parentID !== parentTransform._worldID /*|| parentTransform._worldID == -1*/) {
// concat the parent matrix with the objects transform. // concat the parent matrix with the objects transform.
const pt = parentTransform.worldMatrix; const pt = parentTransform.worldMatrix;
const wt = this.worldMatrix; const wt = this.worldMatrix;
...@@ -174,11 +174,11 @@ export default class Transform extends HashObject { ...@@ -174,11 +174,11 @@ export default class Transform extends HashObject {
wt.tx = (lt.tx * pt.a) + (lt.ty * pt.c) + pt.tx; wt.tx = (lt.tx * pt.a) + (lt.ty * pt.c) + pt.tx;
wt.ty = (lt.tx * pt.b) + (lt.ty * pt.d) + pt.ty; wt.ty = (lt.tx * pt.b) + (lt.ty * pt.d) + pt.ty;
if (parentTransform._worldID == -1) { // if (parentTransform._worldID == -1) {
this._parentID = parentTransform._worldID = 0; // this._parentID = parentTransform._worldID = 0;
} else { // } else {
this._parentID = parentTransform._worldID // this._parentID = parentTransform._worldID
} // }
//修改自身worldId,保证子级会更新 //修改自身worldId,保证子级会更新
this._worldID++; this._worldID++;
......
...@@ -81,7 +81,7 @@ export class CanvasRenderer extends SystemRenderer { ...@@ -81,7 +81,7 @@ export class CanvasRenderer extends SystemRenderer {
render(displayObject: DisplayObject, renderTexture?: any/*RenderTexture*/, transform?: Matrix) { render(displayObject: DisplayObject, renderTexture?: any/*RenderTexture*/, transform?: Matrix) {
//渲染开始前触发 //渲染开始前触发
this.dispatchEvent('prerender'); this.dispatchEvent('onPreRender');
//是否渲染到主屏幕 //是否渲染到主屏幕
let renderingToScreen = !renderTexture; let renderingToScreen = !renderTexture;
...@@ -122,8 +122,8 @@ export class CanvasRenderer extends SystemRenderer { ...@@ -122,8 +122,8 @@ export class CanvasRenderer extends SystemRenderer {
if (transform) { if (transform) {
//有transform则复制 //有transform则复制
tempWt.copy(transform); tempWt.copy(transform);
//标记要更新transform //标记要更新transform,确保子级会更新全局矩阵,(改成++)TODO待测试,Graphics和截图两个地方用到了transform
this._tempDisplayObjectParent.transform._worldID = -1; this._tempDisplayObjectParent.transform._worldID++;
} }
else { else {
//没有就初始化 //没有就初始化
...@@ -165,7 +165,7 @@ export class CanvasRenderer extends SystemRenderer { ...@@ -165,7 +165,7 @@ export class CanvasRenderer extends SystemRenderer {
context.restore(); context.restore();
//渲染后触发 //渲染后触发
this.dispatchEvent('postrender'); this.dispatchEvent('onPostRender');
} }
/** /**
......
...@@ -65,6 +65,8 @@ export default function toDisplayDataURL( ...@@ -65,6 +65,8 @@ export default function toDisplayDataURL(
tempMatrix.tx -= x; tempMatrix.tx -= x;
tempMatrix.ty -= y; tempMatrix.ty -= y;
_dRender.render(obj, null, tempMatrix); _dRender.render(obj, null, tempMatrix);
//因为上面render会修改obj的全局矩阵,保证会被修改回去
obj.transform._parentID = -1;
// document.body.appendChild(_canvasBuffer.baseTexture.source) // document.body.appendChild(_canvasBuffer.baseTexture.source)
return _dCanvas.toDataURL("image/" + typeInfo.type, typeInfo.quality); return _dCanvas.toDataURL("image/" + typeInfo.type, typeInfo.quality);
}; };
......
...@@ -18,7 +18,11 @@ import { Raycaster } from "./Raycaster"; ...@@ -18,7 +18,11 @@ import { Raycaster } from "./Raycaster";
* 带透明度的融合有问题,尽量自行调整渲染顺序 * 带透明度的融合有问题,尽量自行调整渲染顺序
*/ */
export class Scene3D extends Object3D { export class Scene3D extends Object3D {
private _localID: number = 0; private _viewId: number = 0;
/**
* gl的视窗数据记录,是左下角开始,以防混淆不用Rectangle
*/
private _viewport: { x: number, y: number, width: number, height: number };
private _viewX: number = 0; private _viewX: number = 0;
get viewX() { get viewX() {
return this._viewX; return this._viewX;
...@@ -27,7 +31,7 @@ export class Scene3D extends Object3D { ...@@ -27,7 +31,7 @@ export class Scene3D extends Object3D {
value = value || 0; value = value || 0;
if (this._viewX === value) return; if (this._viewX === value) return;
this._viewX = value; this._viewX = value;
this._localID = -1; this._viewId = -1;
} }
private _viewY: number = 0; private _viewY: number = 0;
get viewY() { get viewY() {
...@@ -37,7 +41,7 @@ export class Scene3D extends Object3D { ...@@ -37,7 +41,7 @@ export class Scene3D extends Object3D {
value = value || 0; value = value || 0;
if (this._viewY === value) return; if (this._viewY === value) return;
this._viewY = value; this._viewY = value;
this._localID = -1; this._viewId = -1;
} }
private _viewWidth: number = 300; private _viewWidth: number = 300;
...@@ -48,7 +52,7 @@ export class Scene3D extends Object3D { ...@@ -48,7 +52,7 @@ export class Scene3D extends Object3D {
value = value || 0; value = value || 0;
if (this._viewWidth === value) return; if (this._viewWidth === value) return;
this._viewWidth = value; this._viewWidth = value;
this._localID = -1; this._viewId = -1;
} }
private _viewHeight: number = 300; private _viewHeight: number = 300;
get viewHeight() { get viewHeight() {
...@@ -58,7 +62,7 @@ export class Scene3D extends Object3D { ...@@ -58,7 +62,7 @@ export class Scene3D extends Object3D {
value = value || 0; value = value || 0;
if (this._viewHeight === value) return; if (this._viewHeight === value) return;
this._viewHeight = value; this._viewHeight = value;
this._localID = -1; this._viewId = -1;
} }
/** /**
...@@ -105,23 +109,31 @@ export class Scene3D extends Object3D { ...@@ -105,23 +109,31 @@ export class Scene3D extends Object3D {
//自己的位置 //自己的位置
if (this._localID !== this.parent.transform._worldID) { if (this._viewId !== this.parent.transform._worldID) {
this._viewId = this.parent.transform._worldID;
var pt = this.parent.transform.worldMatrix; var pt = this.parent.transform.worldMatrix;
var x = (this.viewX * pt.a) + (this.viewY * pt.c) + pt.tx; var x = (this.viewX * pt.a) + (this.viewY * pt.c) + pt.tx;
var y = (this.viewX * pt.b) + (this.viewY * pt.d) + pt.ty; var y = (this.viewX * pt.b) + (this.viewY * pt.d) + pt.ty;
//计算实际的viewWidth和viewHeight,简单点直接是父级的缩放,还是要全局的缩放,如果只在舞台 //计算实际的viewWidth和viewHeight,简单点直接是父级的缩放,还是要全局的缩放,如果只在舞台
var scaleX = Math.sqrt((pt.a * pt.a) + (pt.b * pt.b)); var scaleX = Math.sqrt((pt.a * pt.a) + (pt.b * pt.b));
var scaleY = Math.sqrt((pt.c * pt.c) + (pt.d * pt.d)); var scaleY = Math.sqrt((pt.c * pt.c) + (pt.d * pt.d));
//每个场景 //记录
renderer.gl.viewport( this._viewport = {
x, x,
renderer.height - y - this.viewHeight * scaleY, y: renderer.height - y - this.viewHeight * scaleY,
this.viewWidth * scaleX, width: this.viewWidth * scaleX,
this.viewHeight * scaleY height: this.viewHeight * scaleY
) }
} }
//修改视窗,每次都要执行
this._viewport && renderer.gl.viewport(
this._viewport.x,
this._viewport.y,
this._viewport.width,
this._viewport.height
);
//处理子级东西 //处理子级东西
this.render(renderer) this.render(renderer);
} }
getLightConfig( getLightConfig(
......
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