Skip to content

Commit 430ea0c

Browse files
committed
chore(example): fix change materials
1 parent 8cd6330 commit 430ea0c

File tree

2 files changed

+18
-48
lines changed

2 files changed

+18
-48
lines changed

package/example/Shared/src/App.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { CameraPan } from './CameraPan'
99
import { AnimationTransitionsRecording } from './AnimationTransitionsRecording'
1010
import { ImageExample } from './ImageExample'
1111
import { LoadFromFile } from './LoadFromFile'
12+
import { ChangeMaterials } from './ChangeMaterials'
1213
// import { PhysicsCoin } from './PhysicsCoin'
1314
// import { FadeOut } from './FadeOut'
1415
// import { CastShadow } from './CastShadow'
@@ -52,6 +53,7 @@ function HomeScreen() {
5253
<NavigationItem name="📹 Offscreen recording" route="AnimationTransitionsRecording" />
5354
<NavigationItem name="🏞️ Image" route="ImageExample" />
5455
<NavigationItem name="📦 Load from file" route="LoadFromFile" />
56+
<NavigationItem name="🎨 Change Materials" route="ChangeMaterials" />
5557
{/* <NavigationItem name="💰 Physics Coin" route="PhysicsCoin" />
5658
<NavigationItem name="😶‍🌫️ Fade Out" route="FadeOut" />
5759
<NavigationItem name="🎨 Change Materials" route="ChangeMaterials" />
@@ -91,6 +93,7 @@ function App() {
9193
<Stack.Screen name="AnimationTransitionsRecording" component={AnimationTransitionsRecording} />
9294
<Stack.Screen name="ImageExample" component={ImageExample} />
9395
<Stack.Screen name="LoadFromFile" component={LoadFromFile} />
96+
<Stack.Screen name="ChangeMaterials" component={ChangeMaterials} />
9497
{/* TODO: Migrate */}
9598
{/* <Stack.Screen name="PhysicsCoin" component={PhysicsCoin} />
9699
<Stack.Screen name="FadeOut" component={FadeOut} />

package/example/Shared/src/ChangeMaterials.tsx

Lines changed: 15 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,19 @@
11
import * as React from 'react'
2-
import { useCallback, useRef } from 'react'
32

43
import { Button, StyleSheet, View } from 'react-native'
5-
import {
6-
FilamentView,
7-
Float3,
8-
useRenderCallback,
9-
useBuffer,
10-
useModel,
11-
FilamentProvider,
12-
useFilamentContext,
13-
useWorkletCallback,
14-
} from 'react-native-filament'
15-
import { getAssetPath } from './utils/getAssetPasth'
16-
import { useDefaultLight } from './hooks/useDefaultLight'
4+
import { FilamentView, useBuffer, useModel, useFilamentContext, useWorkletCallback, Camera, FilamentContext } from 'react-native-filament'
175

18-
const penguModelPath = getAssetPath('pengu.glb')
19-
const leftEyeTexturePath = getAssetPath('eye_full_texture_left_blue.jpg')
20-
const rightEyeTexturePath = getAssetPath('eye_full_texture_right_blue.jpg')
21-
22-
// Camera config:
23-
const cameraPosition: Float3 = [0, 0, 8]
24-
const cameraTarget: Float3 = [0, 0, 0]
25-
const cameraUp: Float3 = [0, 1, 0]
26-
const focalLengthInMillimeters = 28
27-
const near = 0.1
28-
const far = 1000
6+
import PenguModel from '~/assets/pengu.glb'
7+
import LeftEyeTexture from '~/assets/eye_full_texture_left_blue.jpg'
8+
import RightEyeTexture from '~/assets/eye_full_texture_right_blue.jpg'
9+
import { DefaultLight } from './components/DefaultLight'
2910

3011
function Renderer() {
31-
const { camera, view, renderableManager } = useFilamentContext()
32-
33-
useDefaultLight()
12+
const { renderableManager } = useFilamentContext()
3413

35-
const pengu = useModel({ source: penguModelPath })
36-
const blueLeftEyeBuffer = useBuffer({ source: leftEyeTexturePath })
37-
const blueRightEyeBuffer = useBuffer({ source: rightEyeTexturePath })
14+
const pengu = useModel(PenguModel)
15+
const blueLeftEyeBuffer = useBuffer({ source: LeftEyeTexture })
16+
const blueRightEyeBuffer = useBuffer({ source: RightEyeTexture })
3817

3918
const penguAsset = pengu.state === 'loaded' ? pengu.asset : undefined
4019
const changeEyes = useWorkletCallback(() => {
@@ -59,24 +38,12 @@ function Renderer() {
5938
renderableManager.changeMaterialTextureMap(rightEye, 'Eye_Right.002', blueRightEyeBuffer, 'sRGB')
6039
})
6140

62-
const prevAspectRatio = useRef(0)
63-
useRenderCallback(
64-
useCallback(() => {
65-
'worklet'
66-
const aspectRatio = view.getAspectRatio()
67-
if (prevAspectRatio.current !== aspectRatio) {
68-
prevAspectRatio.current = aspectRatio
69-
// Setup camera lens:
70-
camera.setLensProjection(focalLengthInMillimeters, aspectRatio, near, far)
71-
}
72-
73-
camera.lookAt(cameraPosition, cameraTarget, cameraUp)
74-
}, [view, camera, prevAspectRatio])
75-
)
76-
7741
return (
7842
<View style={styles.container}>
79-
<FilamentView style={styles.filamentView} />
43+
<FilamentView style={styles.filamentView}>
44+
<Camera />
45+
<DefaultLight />
46+
</FilamentView>
8047
<Button
8148
title="Change Eyes"
8249
onPress={() => {
@@ -89,9 +56,9 @@ function Renderer() {
8956

9057
export function ChangeMaterials() {
9158
return (
92-
<FilamentProvider>
59+
<FilamentContext>
9360
<Renderer />
94-
</FilamentProvider>
61+
</FilamentContext>
9562
)
9663
}
9764

0 commit comments

Comments
 (0)