mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
修复一部分模型载入场景时,变黑bug。
This commit is contained in:
parent
8068dcd904
commit
8dabf9e8fc
@ -14,9 +14,8 @@ Supported Languages: 中文 / [繁體中文](README-tw.md) / [English](README-en
|
||||
3. 角色管理:添加角色、编辑角色、删除角色、查找角色。
|
||||
4. 用户管理:添加用户、编辑用户、删除用户、查找用户。
|
||||
5. `DataGrid`控件大幅度优化:每页显示条数设置;跳转第一页、前一页、后一页、最后一页;当前页和总页数;刷新按钮;每页条数和总记录数展示,加载数据显示LoadMask。
|
||||
6. 修复非高光材质切换高光材质报错的bug。
|
||||
7. 修复反序列化场景时,把`specular`误当作数值的bug。
|
||||
8. 修复材质组件修改高光颜色bug。
|
||||
6. 修复高光颜色编辑、序列化和反序列化中的一系列bug。
|
||||
7. 修复一部分模型载入场景时,变黑bug。
|
||||
|
||||
## v0.3.3更新
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import BaseSerializer from '../BaseSerializer';
|
||||
import MaterialSerializer from './MaterialSerializer';
|
||||
import UniformsSerializer from './UniformsSerializer';
|
||||
|
||||
/**
|
||||
* RawShaderMaterialSerializer
|
||||
@ -16,24 +17,7 @@ RawShaderMaterialSerializer.prototype.toJSON = function (obj) {
|
||||
var json = MaterialSerializer.prototype.toJSON.call(this, obj);
|
||||
|
||||
json.defines = obj.defines;
|
||||
|
||||
json.uniforms = {};
|
||||
|
||||
// TODO: 着色器材质uniforms序列化有很多bug。
|
||||
for (var i in obj.uniforms) {
|
||||
var uniform = obj.uniforms[i];
|
||||
if (uniform.value instanceof THREE.Color) {
|
||||
json.uniforms[i] = {
|
||||
type: 'color',
|
||||
value: uniform.value
|
||||
};
|
||||
} else {
|
||||
json.uniforms[i] = {
|
||||
value: uniform.value
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
json.uniforms = (new UniformsSerializer()).toJSON(obj.uniforms);
|
||||
json.vertexShader = obj.vertexShader;
|
||||
json.fragmentShader = obj.fragmentShader;
|
||||
|
||||
@ -46,23 +30,7 @@ RawShaderMaterialSerializer.prototype.fromJSON = function (json, parent, server)
|
||||
MaterialSerializer.prototype.fromJSON.call(this, json, obj, server);
|
||||
|
||||
obj.defines = json.defines;
|
||||
|
||||
obj.uniforms = {};
|
||||
|
||||
// TODO: 着色器材质uniforms反序列化有很多bug。
|
||||
for (var i in json.uniforms) {
|
||||
var uniform = json.uniforms[i];
|
||||
if (uniform.type === 'color') {
|
||||
obj.uniforms[i] = {
|
||||
value: new THREE.Color(uniform.value)
|
||||
};
|
||||
} else {
|
||||
obj.uniforms[i] = {
|
||||
value: uniform.value
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
obj.uniforms = (new UniformsSerializer()).fromJSON(json.uniforms, undefined, server);
|
||||
obj.vertexShader = json.vertexShader;
|
||||
obj.fragmentShader = json.fragmentShader;
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import BaseSerializer from '../BaseSerializer';
|
||||
import MaterialSerializer from './MaterialSerializer';
|
||||
import UniformsSerializer from './UniformsSerializer';
|
||||
|
||||
/**
|
||||
* ShaderMaterialSerializer
|
||||
@ -16,24 +17,7 @@ ShaderMaterialSerializer.prototype.toJSON = function (obj) {
|
||||
var json = MaterialSerializer.prototype.toJSON.call(this, obj);
|
||||
|
||||
json.defines = obj.defines;
|
||||
|
||||
json.uniforms = {};
|
||||
|
||||
// TODO: 着色器材质uniforms序列化有很多bug。
|
||||
for (var i in obj.uniforms) {
|
||||
var uniform = obj.uniforms[i];
|
||||
if (uniform.value instanceof THREE.Color) {
|
||||
json.uniforms[i] = {
|
||||
type: 'color',
|
||||
value: uniform.value
|
||||
};
|
||||
} else {
|
||||
json.uniforms[i] = {
|
||||
value: uniform.value
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
json.uniforms = (new UniformsSerializer()).toJSON(obj.uniforms);
|
||||
json.vertexShader = obj.vertexShader;
|
||||
json.fragmentShader = obj.fragmentShader;
|
||||
|
||||
@ -48,24 +32,7 @@ ShaderMaterialSerializer.prototype.fromJSON = function (json, parent, server) {
|
||||
MaterialSerializer.prototype.fromJSON.call(this, json, obj, server);
|
||||
|
||||
obj.defines = json.defines;
|
||||
|
||||
obj.uniforms = {};
|
||||
|
||||
// TODO: 着色器材质uniforms反序列化有很多bug。
|
||||
for (var i in json.uniforms) {
|
||||
var uniform = json.uniforms[i];
|
||||
|
||||
if (uniform.type === 'color') {
|
||||
obj.uniforms[i] = {
|
||||
value: new THREE.Color(uniform.value)
|
||||
};
|
||||
} else {
|
||||
obj.uniforms[i] = {
|
||||
value: uniform.value
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
obj.uniforms = (new UniformsSerializer()).fromJSON(json.uniforms, undefined, server);
|
||||
obj.vertexShader = json.vertexShader;
|
||||
obj.fragmentShader = json.fragmentShader;
|
||||
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import BaseSerializer from '../BaseSerializer';
|
||||
|
||||
import TexturesSerializer from '../texture/TexturesSerializer';
|
||||
|
||||
/**
|
||||
@ -14,11 +13,192 @@ UniformsSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
UniformsSerializer.prototype.constructor = UniformsSerializer;
|
||||
|
||||
UniformsSerializer.prototype.toJSON = function (obj) {
|
||||
let json = {};
|
||||
|
||||
Object.keys(obj).forEach(n => {
|
||||
const item = obj[n];
|
||||
|
||||
if (item.value === null) {
|
||||
json[n] = {
|
||||
type: 'null',
|
||||
value: null,
|
||||
};
|
||||
} else if (item.value instanceof THREE.Texture) { // 纹理
|
||||
json[n] = {
|
||||
type: 't',
|
||||
value: (new TexturesSerializer()).toJSON(item.value),
|
||||
};
|
||||
} else if (item.value instanceof THREE.Color) { // 颜色
|
||||
json[n] = {
|
||||
type: 'c',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Number.isInteger(item.value)) { // 整数
|
||||
json[n] = {
|
||||
type: 'i',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (typeof item.value === 'number') { // 浮点数
|
||||
json[n] = {
|
||||
type: 'f',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (item.value instanceof THREE.Vector2) { // Vector2
|
||||
json[n] = {
|
||||
type: 'v2',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (item.value instanceof THREE.Vector3) { // Vector3
|
||||
json[n] = {
|
||||
type: 'v3',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (item.value instanceof THREE.Vector4) { // Vector4
|
||||
json[n] = {
|
||||
type: 'v4',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (item.value instanceof THREE.Matrix3) { // Matrix3
|
||||
json[n] = {
|
||||
type: 'm3',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (item.value instanceof THREE.Matrix4) { // Matrix4
|
||||
json[n] = {
|
||||
type: 'm4',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => typeof n === 'number')) { // 浮点数数组
|
||||
json[n] = {
|
||||
type: 'af',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => n instanceof THREE.Vector2)) { // Vector2数组
|
||||
json[n] = {
|
||||
type: 'av2',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => n instanceof THREE.Vector3)) { // Vector3数组
|
||||
json[n] = {
|
||||
type: 'av3',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => n instanceof THREE.Vector4)) { // Vector4数组
|
||||
json[n] = {
|
||||
type: 'av4',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => n instanceof THREE.Matrix3)) { // Matrix3数组
|
||||
json[n] = {
|
||||
type: 'am3',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => n instanceof THREE.Matrix4)) { // Matrix4数组
|
||||
json[n] = {
|
||||
type: 'am4',
|
||||
value: item.value,
|
||||
};
|
||||
} else if (Array.isArray(item.value) && item.value.every(n => n instanceof THREE.Texture)) { // Texture数组
|
||||
json[n] = {
|
||||
type: 'at',
|
||||
value: item.value.map(m => (new TexturesSerializer()).toJSON(m)),
|
||||
};
|
||||
} else {
|
||||
console.warn(`UniformsSerializer: unknown uniform type: `, item.value);
|
||||
json[n] = {
|
||||
type: 'unknow',
|
||||
value: item.value,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return json;
|
||||
};
|
||||
|
||||
UniformsSerializer.prototype.fromJSON = function (json) {
|
||||
UniformsSerializer.prototype.fromJSON = function (json, parent, server) {
|
||||
let obj = {};
|
||||
|
||||
Object.keys(json).forEach(n => {
|
||||
const type = json[n].type;
|
||||
const value = json[n].value;
|
||||
|
||||
if (type === 'null') {
|
||||
obj[n] = {
|
||||
value: null,
|
||||
};
|
||||
} else if (type === 't') {
|
||||
obj[n] = {
|
||||
value: (new TexturesSerializer()).fromJSON(value, undefined, server),
|
||||
};
|
||||
} else if (type === 'c') {
|
||||
obj[n] = {
|
||||
value: new THREE.Color(value),
|
||||
};
|
||||
} else if (type === 'i') {
|
||||
obj[n] = {
|
||||
value,
|
||||
};
|
||||
} else if (type === 'f') {
|
||||
obj[n] = {
|
||||
value,
|
||||
};
|
||||
} else if (type === 'v2') {
|
||||
obj[n] = {
|
||||
value: new THREE.Vector2().copy(value),
|
||||
};
|
||||
} else if (type === 'v3') {
|
||||
obj[n] = {
|
||||
value: new THREE.Vector3().copy(value),
|
||||
};
|
||||
} else if (type === 'v4') {
|
||||
obj[n] = {
|
||||
value: new THREE.Vector4().copy(value),
|
||||
};
|
||||
} else if (type === 'm3') {
|
||||
obj[n] = {
|
||||
value: new THREE.Matrix3().copy(value),
|
||||
};
|
||||
} else if (type === 'm4') {
|
||||
obj[n] = {
|
||||
value: new THREE.Matrix4().copy(value),
|
||||
};
|
||||
} else if (type === 'af') {
|
||||
obj[n] = {
|
||||
value: value,
|
||||
};
|
||||
} else if (type === 'av2') {
|
||||
obj[n] = {
|
||||
value: value.map(m => new THREE.Vector2().copy(m)),
|
||||
};
|
||||
} else if (type === 'av3') {
|
||||
obj[n] = {
|
||||
value: value.map(m => new THREE.Vector3().copy(m)),
|
||||
};
|
||||
} else if (type === 'av4') {
|
||||
obj[n] = {
|
||||
value: value.map(m => new THREE.Vector4().copy(m)),
|
||||
};
|
||||
} else if (type === 'am3') {
|
||||
obj[n] = {
|
||||
value: value.map(m => new THREE.Matrix3().copy(m)),
|
||||
};
|
||||
} else if (type === 'am4') {
|
||||
obj[n] = {
|
||||
value: value.map(m => new THREE.Matrix4().copy(m)),
|
||||
};
|
||||
} else if (type === 'at') {
|
||||
obj[n] = {
|
||||
value: value.map(m => new TexturesSerializer().fromJSON(m, undefined, server)),
|
||||
};
|
||||
} else {
|
||||
console.warn(`UniformsSerializer: unknown uniform type: `, value);
|
||||
obj[n] = {
|
||||
value: value,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export default UniformsSerializer;
|
||||
Loading…
x
Reference in New Issue
Block a user