Refactor mesh material handler.
This commit is contained in:
parent
474d46968b
commit
97e7be4732
@ -63,7 +63,7 @@ import { TopologyVertex, TopologyEdge, TopologyTriangleEdge, TopologyTriangle, T
|
|||||||
import { Triangle } from './model/triangle.js';
|
import { Triangle } from './model/triangle.js';
|
||||||
import { Unit } from './model/unit.js';
|
import { Unit } from './model/unit.js';
|
||||||
import { ParameterListBuilder, ParameterListParser, CreateUrlBuilder, CreateUrlParser, CreateModelUrlParameters, ParameterConverter } from './parameters/parameterlist.js';
|
import { ParameterListBuilder, ParameterListParser, CreateUrlBuilder, CreateUrlParser, CreateModelUrlParameters, ParameterConverter } from './parameters/parameterlist.js';
|
||||||
import { ModelToThreeConversionParams, ModelToThreeConversionOutput, ThreeConversionStateHandler, ThreeNodeTree, ConvertModelToThreeObject } from './threejs/threeconverter.js';
|
import { ModelToThreeConversionParams, ModelToThreeConversionOutput, ThreeConversionStateHandler, ThreeNodeTree, ThreeMaterialHandler, ThreeMeshMaterialHandler, ConvertModelToThreeObject } from './threejs/threeconverter.js';
|
||||||
import { ThreeModelLoader } from './threejs/threemodelloader.js';
|
import { ThreeModelLoader } from './threejs/threemodelloader.js';
|
||||||
import { ThreeColorConverter, ThreeLinearToSRGBColorConverter, ThreeSRGBToLinearColorConverter, HasHighpDriverIssue, GetShadingType, ConvertThreeColorToColor, ConvertColorToThreeColor, ConvertThreeGeometryToMesh, DisposeThreeObjects, ShadingType } from './threejs/threeutils.js';
|
import { ThreeColorConverter, ThreeLinearToSRGBColorConverter, ThreeSRGBToLinearColorConverter, HasHighpDriverIssue, GetShadingType, ConvertThreeColorToColor, ConvertColorToThreeColor, ConvertThreeGeometryToMesh, DisposeThreeObjects, ShadingType } from './threejs/threeutils.js';
|
||||||
import { Camera, CameraIsEqual3D, NavigationMode, ProjectionMode } from './viewer/camera.js';
|
import { Camera, CameraIsEqual3D, NavigationMode, ProjectionMode } from './viewer/camera.js';
|
||||||
@ -283,6 +283,8 @@ export {
|
|||||||
ModelToThreeConversionOutput,
|
ModelToThreeConversionOutput,
|
||||||
ThreeConversionStateHandler,
|
ThreeConversionStateHandler,
|
||||||
ThreeNodeTree,
|
ThreeNodeTree,
|
||||||
|
ThreeMaterialHandler,
|
||||||
|
ThreeMeshMaterialHandler,
|
||||||
ConvertModelToThreeObject,
|
ConvertModelToThreeObject,
|
||||||
ThreeModelLoader,
|
ThreeModelLoader,
|
||||||
ThreeColorConverter,
|
ThreeColorConverter,
|
||||||
|
|||||||
@ -236,47 +236,43 @@ export class ThreeMaterialHandler
|
|||||||
|
|
||||||
export class ThreeMeshMaterialHandler
|
export class ThreeMeshMaterialHandler
|
||||||
{
|
{
|
||||||
constructor (materialHandler)
|
constructor (threeGeometry, materialHandler)
|
||||||
{
|
{
|
||||||
|
this.threeGeometry = threeGeometry;
|
||||||
this.materialHandler = materialHandler;
|
this.materialHandler = materialHandler;
|
||||||
|
|
||||||
this.meshThreeMaterials = [];
|
this.meshThreeMaterials = [];
|
||||||
this.meshOriginalMaterials = [];
|
this.meshOriginalMaterials = [];
|
||||||
|
|
||||||
this.groups = [];
|
this.groupStart = null;
|
||||||
this.previousMaterialIndex = null;
|
this.previousMaterialIndex = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessItem (itemIndex, materialIndex)
|
ProcessItem (itemIndex, materialIndex)
|
||||||
{
|
{
|
||||||
if (this.previousMaterialIndex !== materialIndex) {
|
if (this.previousMaterialIndex !== materialIndex) {
|
||||||
|
if (this.groupStart !== null) {
|
||||||
|
this.AddGroup (this.groupStart, itemIndex - 1);
|
||||||
|
}
|
||||||
|
this.groupStart = itemIndex;
|
||||||
|
|
||||||
let threeMaterial = this.materialHandler.GetThreeMaterial (materialIndex);
|
let threeMaterial = this.materialHandler.GetThreeMaterial (materialIndex);
|
||||||
this.meshThreeMaterials.push (threeMaterial);
|
this.meshThreeMaterials.push (threeMaterial);
|
||||||
this.meshOriginalMaterials.push (materialIndex);
|
this.meshOriginalMaterials.push (materialIndex);
|
||||||
|
|
||||||
if (this.groups.length > 0) {
|
|
||||||
this.groups[this.groups.length - 1].end = itemIndex - 1;
|
|
||||||
}
|
|
||||||
this.groups.push ({
|
|
||||||
start : itemIndex,
|
|
||||||
end : -1
|
|
||||||
});
|
|
||||||
|
|
||||||
this.previousMaterialIndex = materialIndex;
|
this.previousMaterialIndex = materialIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Finalize (triangleCount)
|
Finalize (triangleCount)
|
||||||
{
|
{
|
||||||
this.groups[this.groups.length - 1].end = triangleCount - 1;
|
this.AddGroup (this.groupStart, triangleCount - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
AddGroups (threeGeometry)
|
AddGroup (start, end)
|
||||||
{
|
{
|
||||||
for (let materialIndex = 0; materialIndex < this.groups.length; materialIndex++) {
|
let materialIndex = this.meshThreeMaterials.length - 1;
|
||||||
let group = this.groups[materialIndex];
|
this.threeGeometry.addGroup (start * 3, (end - start + 1) * 3, materialIndex);
|
||||||
threeGeometry.addGroup (group.start * 3, (group.end - group.start + 1) * 3, materialIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +296,8 @@ export function ConvertModelToThreeObject (model, conversionParams, conversionOu
|
|||||||
return aTriangle.mat - bTriangle.mat;
|
return aTriangle.mat - bTriangle.mat;
|
||||||
});
|
});
|
||||||
|
|
||||||
let meshMaterialHandler = new ThreeMeshMaterialHandler (materialHandler);
|
let threeGeometry = new THREE.BufferGeometry ();
|
||||||
|
let meshMaterialHandler = new ThreeMeshMaterialHandler (threeGeometry, materialHandler);
|
||||||
|
|
||||||
let vertices = [];
|
let vertices = [];
|
||||||
let vertexColors = [];
|
let vertexColors = [];
|
||||||
@ -353,7 +350,6 @@ export function ConvertModelToThreeObject (model, conversionParams, conversionOu
|
|||||||
}
|
}
|
||||||
meshMaterialHandler.Finalize (triangleCount);
|
meshMaterialHandler.Finalize (triangleCount);
|
||||||
|
|
||||||
let threeGeometry = new THREE.BufferGeometry ();
|
|
||||||
threeGeometry.setAttribute ('position', new THREE.Float32BufferAttribute (vertices, 3));
|
threeGeometry.setAttribute ('position', new THREE.Float32BufferAttribute (vertices, 3));
|
||||||
if (vertexColors.length !== 0) {
|
if (vertexColors.length !== 0) {
|
||||||
threeGeometry.setAttribute ('color', new THREE.Float32BufferAttribute (vertexColors, 3));
|
threeGeometry.setAttribute ('color', new THREE.Float32BufferAttribute (vertexColors, 3));
|
||||||
@ -362,7 +358,6 @@ export function ConvertModelToThreeObject (model, conversionParams, conversionOu
|
|||||||
if (uvs.length !== 0) {
|
if (uvs.length !== 0) {
|
||||||
threeGeometry.setAttribute ('uv', new THREE.Float32BufferAttribute (uvs, 2));
|
threeGeometry.setAttribute ('uv', new THREE.Float32BufferAttribute (uvs, 2));
|
||||||
}
|
}
|
||||||
meshMaterialHandler.AddGroups (threeGeometry);
|
|
||||||
|
|
||||||
let threeMesh = new THREE.Mesh (threeGeometry, meshMaterialHandler.meshThreeMaterials);
|
let threeMesh = new THREE.Mesh (threeGeometry, meshMaterialHandler.meshThreeMaterials);
|
||||||
threeMesh.name = mesh.GetName ();
|
threeMesh.name = mesh.GetName ();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user