Wie erweitere ich die Visualisierung meines Konfigurators?
Grundsätzlich gilt:
- 3D Szenen Erweiterungen basieren immer auf
three
,@react-three/fiber
und@react-three/drei
. - Natürlich könnt ihr euch auch andere Bibliotheken des
three
-Ökosystems dazu installieren - Die Verknüpfung von Eurem Code und dem K3 passiert eigentlich immer über die unten genannten hooks und keys
- Ihr könnt entweder einzelne Komponenten erweitern/überschreiben oder die ganze Szene überschreiben (maximale Flexibilität, aber höherer Aufwand)
- Am Ende ist es aber meist "nur" 3D-Entwicklung mit
three
& Co mit nur wenig K3 spezifischen Elementen
Punktuell mithilfe des Szenen-Templates und app.k3d.sceneComponents
Im Konfigurator kann man sich unter "Passen Sie die 3D Szene an" selber einen Komponentenbaum als JSON zusammenbauen. Dabei kann man auf Komponenten zugreifen, die von (in dieser Hierarchie)
@react-three/fiber
@react-three/drei
- uns:
K3D
,K3BoundsFocus
,K3Model
react
stammen und ihnen beliebige, gültige Props übergeben.
Der Clue: Man kann auch selber im app.k3d.sceneComponents
Extension-Point beliebige Komponenten
definieren und diese dann hier benutzen. Dabei überschreiben sie Komponenten mit gleichem Namen aus
den obigen Quellen.
Wir empfehlen nach Möglichkeit diese Methode zu verwenden. Man kann damit relativ granular bestimmte Details der 3D Szene anpassen ohne sie komplett neu zu schreiben.
Vollständig mithilfe von app.k3d.root
Alternativ lässt sich die 3D-Szene über den ExtensionPoint app.k3d.root
erweitern.
Dort kann mithilfe von Three(-Fiber) eine komplett individuelle 3D Szene gebaut werden.
Dies ist insbesondere wichtig, wenn ein parametrisiertes 3D Modell gebaut werden soll. Auf die ausgewählten Werte sollte mithilfe von keys und insbesondere den hooks
useSelectedNumberByVariableKey
useSelectedValueByVariableKey
useSelectedValueAttributeByKey
zugegriffen werden.
Es empfiehlt sich insbesondere einen Blick auf
CanvasWithScreenshotting
(sollte anstatt des normalen fiber canvas genutzt werden)useMaterialReplacedGLTF
(stattuseGltf
, wenn auf dieses Modell Material-Ersetzen Aktionen ausgeführt werden sollen)K3D
rendered alle Modelle die über den Editor eingepflegt werden
zu werfen.
Beispiel
Ein Beispiel für ein parametrisiertes Modell habt ihr schon bei den keys gesehen.
Außerdem kann man beispielsweise mithilfe von keys und app.k3d.sceneComponents
die Umgebung dynamisch austauschen.
import { Environment } from '@react-three/drei';
import React from 'react';
import { K3Extensions, useSelectedValueByVariableKey } from '@k3/core';
const extensions: K3Extensions = {
app: {
k3d: {
sceneComponents: {
Environment: {
root: () => () => {
const environment = useSelectedValueByVariableKey('umgebung');
const getDreiPreset = () => {
switch (environment.key) {
case 'stadt':
return 'city';
case 'abend':
return 'sunset';
case 'wald':
return 'forest';
default:
return 'studio';
}
};
return <Environment preset={getDreiPreset()} />;
},
},
},
},
},
};
Noch mehr Beispiele findet ihr im Beispielprojekt.