修复一部分模型载入场景时,变黑bug。

This commit is contained in:
tengge1 2019-09-28 21:49:00 +08:00
parent 8068dcd904
commit 8dabf9e8fc
4 changed files with 190 additions and 76 deletions

View File

@ -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更新

View File

@ -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;

View File

@ -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;

View File

@ -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;