Skip to content

Commit 02c8a00

Browse files
authored
Click material (#2879)
* added material picking * fix quick switching
1 parent 38bf54b commit 02c8a00

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

packages/space-opera/src/components/materials_panel/materials_panel.ts

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import {CheckboxElement} from '../shared/checkbox/checkbox.js';
4343
import {ColorPicker} from '../shared/color_picker/color_picker.js';
4444
import {Dropdown} from '../shared/dropdown/dropdown.js';
4545
import {SliderWithInputElement} from '../shared/slider_with_input/slider_with_input.js';
46+
import {TabbedPanel} from '../shared/tabs/tabs.js';
4647
import {FileDetails, TexturePicker} from '../shared/texture_picker/texture_picker.js';
4748
import {ALPHA_BLEND_MODES} from '../utils/gltf_constants.js';
4849
import {checkFinite} from '../utils/reducer_utils.js';
@@ -172,6 +173,8 @@ export class MaterialPanel extends ConnectedLitElement {
172173
let start = -1;
173174
const DURATION = 1600; // in milliseconds
174175

176+
const material = this.getMaterial();
177+
175178
const interpolateStep = (timestamp: number) => {
176179
// New model is loaded mid interpolation
177180
if (start === -1) {
@@ -180,11 +183,10 @@ export class MaterialPanel extends ConnectedLitElement {
180183

181184
const baseColorFactor = this.getInterpolatedColor(
182185
originalBaseColor, timestamp - start, DURATION);
183-
this.getMaterial().pbrMetallicRoughness.setBaseColorFactor(
184-
baseColorFactor);
186+
material.pbrMetallicRoughness.setBaseColorFactor(baseColorFactor);
185187
const emissiveFactor = this.getInterpolatedEmissive(
186188
originalEmissiveFactor, timestamp - start, DURATION);
187-
this.getMaterial().setEmissiveFactor(emissiveFactor);
189+
material.setEmissiveFactor(emissiveFactor);
188190

189191
if (timestamp - start <= DURATION) {
190192
requestAnimationFrame(interpolateStep);
@@ -272,6 +274,28 @@ export class MaterialPanel extends ConnectedLitElement {
272274
this.onSelectMaterial();
273275
}
274276

277+
firstUpdated() {
278+
getModelViewer().addEventListener('click', this.onClick);
279+
}
280+
281+
onClick = (event) => {
282+
if (!(this.parentElement as TabbedPanel).selected) {
283+
return;
284+
}
285+
const modelviewer = getModelViewer();
286+
const pickedMaterial =
287+
modelviewer.materialFromPoint(event.layerX, event.layerY);
288+
if (pickedMaterial == null) {
289+
return;
290+
}
291+
for (const [index, material] of modelviewer.model!.materials!.entries()) {
292+
if (material === pickedMaterial) {
293+
this.selectedMaterialIndex = index;
294+
return;
295+
}
296+
}
297+
};
298+
275299
get selectedBaseColor(): RGBA {
276300
const alphaFactor =
277301
this.getMaterial().pbrMetallicRoughness.baseColorFactor[3];

0 commit comments

Comments
 (0)