mirror of
https://github.com/CesiumGS/obj2gltf.git
synced 2024-11-27 02:24:04 -05:00
Merge pull request #108 from AnalyticalGraphicsInc/constant-lighting
Constant lighting added back to materialsCommon
This commit is contained in:
commit
8f3f0d3862
@ -3,6 +3,7 @@ Change Log
|
|||||||
|
|
||||||
### 2.1.0 ???
|
### 2.1.0 ???
|
||||||
|
|
||||||
|
* Added back support for the `CONSTANT` technique when a model uses the `KHR_materials_common` extension and has no normals. [#108](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/108)
|
||||||
* Improved handling of materials with alpha. If the alpha value is 0.0 it is now treated as 1.0. [#107](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/107)
|
* Improved handling of materials with alpha. If the alpha value is 0.0 it is now treated as 1.0. [#107](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/107)
|
||||||
|
|
||||||
### 2.0.0 2017-08-11
|
### 2.0.0 2017-08-11
|
||||||
|
@ -25,6 +25,7 @@ module.exports = loadMtl;
|
|||||||
*
|
*
|
||||||
* @param {String} mtlPath Path to the .mtl file.
|
* @param {String} mtlPath Path to the .mtl file.
|
||||||
* @param {Object} options The options object passed along from lib/obj2gltf.js
|
* @param {Object} options The options object passed along from lib/obj2gltf.js
|
||||||
|
* @param {Boolean} options.hasNormals Whether the model has normals.
|
||||||
* @returns {Promise} A promise resolving to an array of glTF materials with Texture objects stored in the texture slots.
|
* @returns {Promise} A promise resolving to an array of glTF materials with Texture objects stored in the texture slots.
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
@ -224,7 +225,7 @@ function convertMaterial(material, options) {
|
|||||||
} else if (options.metallicRoughness) {
|
} else if (options.metallicRoughness) {
|
||||||
return createMetallicRoughnessMaterial(material, options);
|
return createMetallicRoughnessMaterial(material, options);
|
||||||
} else if (options.materialsCommon) {
|
} else if (options.materialsCommon) {
|
||||||
return createMaterialsCommonMaterial(material);
|
return createMaterialsCommonMaterial(material, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// No material type specified, convert the material to metallic roughness
|
// No material type specified, convert the material to metallic roughness
|
||||||
@ -609,7 +610,7 @@ function convertTraditionalToMetallicRoughness(material) {
|
|||||||
material.specularShininess = roughnessFactor;
|
material.specularShininess = roughnessFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createMaterialsCommonMaterial(material) {
|
function createMaterialsCommonMaterial(material, options) {
|
||||||
var ambient = defaultValue(material.ambientTexture, material.ambientColor);
|
var ambient = defaultValue(material.ambientTexture, material.ambientColor);
|
||||||
var diffuse = defaultValue(material.diffuseTexture, material.diffuseColor);
|
var diffuse = defaultValue(material.diffuseTexture, material.diffuseColor);
|
||||||
var emission = defaultValue(material.emissiveTexture, material.emissiveColor);
|
var emission = defaultValue(material.emissiveTexture, material.emissiveColor);
|
||||||
@ -637,9 +638,14 @@ function createMaterialsCommonMaterial(material) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var doubleSided = transparent;
|
var doubleSided = transparent;
|
||||||
|
|
||||||
var technique = hasSpecular ? 'PHONG' : 'LAMBERT';
|
var technique = hasSpecular ? 'PHONG' : 'LAMBERT';
|
||||||
|
|
||||||
|
if (!options.hasNormals) {
|
||||||
|
// Constant technique only factors in ambient and emission sources - set emission to diffuse
|
||||||
|
emission = diffuse;
|
||||||
|
technique = 'CONSTANT';
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name : material.name,
|
name : material.name,
|
||||||
extensions : {
|
extensions : {
|
||||||
|
@ -482,6 +482,9 @@ function loadObj(objPath, options) {
|
|||||||
// Parse the obj file
|
// Parse the obj file
|
||||||
return readLines(objPath, parseLine)
|
return readLines(objPath, parseLine)
|
||||||
.then(function() {
|
.then(function() {
|
||||||
|
// Add hasNormals to options object for loadMtl
|
||||||
|
options.hasNormals = normals.length > 0;
|
||||||
|
|
||||||
// Unload resources
|
// Unload resources
|
||||||
positions = undefined;
|
positions = undefined;
|
||||||
normals = undefined;
|
normals = undefined;
|
||||||
|
@ -84,6 +84,7 @@ describe('loadMtl', function() {
|
|||||||
options = clone(obj2gltf.defaults);
|
options = clone(obj2gltf.defaults);
|
||||||
options.overridingTextures = {};
|
options.overridingTextures = {};
|
||||||
options.logger = function() {};
|
options.logger = function() {};
|
||||||
|
options.hasNormals = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('loads mtl', function(done) {
|
it('loads mtl', function(done) {
|
||||||
@ -460,6 +461,21 @@ describe('loadMtl', function() {
|
|||||||
expect(values.shininess).toEqual(0.1);
|
expect(values.shininess).toEqual(0.1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('sets CONSTANT technique when there are no normals', function() {
|
||||||
|
options.materialsCommon = true;
|
||||||
|
options.hasNormals = false;
|
||||||
|
|
||||||
|
var material = loadMtl._createMaterial({
|
||||||
|
diffuseColor : [1.0, 1.0, 1.0, 1.0]
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
var extension = material.extensions.KHR_materials_common;
|
||||||
|
var values = extension.values;
|
||||||
|
|
||||||
|
expect(extension.technique).toBe('CONSTANT');
|
||||||
|
expect(values.emission).toEqual(values.diffuse);
|
||||||
|
});
|
||||||
|
|
||||||
it('ambient of [1, 1, 1] is treated as [0, 0, 0]', function() {
|
it('ambient of [1, 1, 1] is treated as [0, 0, 0]', function() {
|
||||||
options.materialsCommon = true;
|
options.materialsCommon = true;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user