update materials_and_textures sample

This commit is contained in:
Nick Fisher
2025-05-16 10:18:04 +08:00
parent fdd3853121
commit 04b8b333d4

View File

@@ -1,12 +1,15 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:thermion_flutter/thermion_flutter.dart'; import 'package:thermion_flutter/thermion_flutter.dart';
import 'package:thermion_flutter/thermion_flutter.dart' as t; import 'package:thermion_flutter/thermion_flutter.dart' as t;
import 'package:vector_math/vector_math_64.dart' hide Colors; import 'package:vector_math/vector_math_64.dart' hide Colors;
import 'package:logging/logging.dart';
import 'package:flutter/foundation.dart';
void main() { void main() {
Logger.root.onRecord.listen((record) {
print(record);
});
runApp(const MyApp()); runApp(const MyApp());
} }
@@ -17,6 +20,7 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(
title: 'Flutter Demo', title: 'Flutter Demo',
color: Colors.transparent,
theme: ThemeData( theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true, useMaterial3: true,
@@ -47,11 +51,25 @@ class _MyHomePageState extends State<MyHomePage> {
late MaterialInstance _unlitMaterial; late MaterialInstance _unlitMaterial;
late MaterialInstance _litMaterial; late MaterialInstance _litMaterial;
late InputHandler _inputHandler;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
ThermionFlutterOptions? options;
if (kIsWeb) {
// ThermionFlutterPlatform.instance.setOptions(ThermionFlutterWebOptions(createCanvas:true, importCanvasAsWidget:false));
}
ThermionFlutterPlugin.createViewer().then((viewer) async { ThermionFlutterPlugin.createViewer().then((viewer) async {
_viewer = viewer; _viewer = viewer;
_inputHandler = DelegateInputHandler.fixedOrbit(
_viewer!,
sensitivity: InputSensitivityOptions(mouseSensitivity: 0.01),
);
await _viewer!.setPostProcessing(true); await _viewer!.setPostProcessing(true);
_unlitMaterial = _unlitMaterial =
@@ -97,13 +115,18 @@ class _MyHomePageState extends State<MyHomePage> {
await _image?.destroy(); await _image?.destroy();
await materialInstance.setParameterInt("baseColorIndex", 0); await materialInstance.setParameterInt("baseColorIndex", 0);
var imageBuffer = await rootBundle.load("assets/background.png"); var imageBuffer = await rootBundle.load("assets/background.png");
var imageData = imageBuffer.buffer.asUint8List(imageBuffer.offsetInBytes); var imageData = imageBuffer.buffer.asUint8List(imageBuffer.offsetInBytes);
_image = await FilamentApp.instance!.decodeImage(imageData); _image = await FilamentApp.instance!.decodeImage(imageData);
var width = await _image!.getWidth(); var width = await _image!.getWidth();
var height = await _image!.getHeight(); var height = await _image!.getHeight();
_texture = await FilamentApp.instance!.createTexture(width, height); _texture = await FilamentApp.instance!.createTexture(width, height);
await _texture!.setLinearImage( await _texture!.setLinearImage(
_image!, _image!,
PixelDataFormat.RGBA, PixelDataFormat.RGBA,
@@ -111,6 +134,7 @@ class _MyHomePageState extends State<MyHomePage> {
); );
final textureSampler = await FilamentApp.instance!.createTextureSampler(); final textureSampler = await FilamentApp.instance!.createTextureSampler();
await materialInstance.setParameterTexture( await materialInstance.setParameterTexture(
"baseColorMap", "baseColorMap",
_texture!, _texture!,
@@ -120,6 +144,7 @@ class _MyHomePageState extends State<MyHomePage> {
Future _setActiveMaterialColor() async { Future _setActiveMaterialColor() async {
var active = unlit ? _unlitMaterial : _litMaterial; var active = unlit ? _unlitMaterial : _litMaterial;
await active.setParameterFloat4( await active.setParameterFloat4(
"baseColorFactor", "baseColorFactor",
green ? 0.0 : 1.0, green ? 0.0 : 1.0,
@@ -132,13 +157,14 @@ class _MyHomePageState extends State<MyHomePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: Colors.transparent,
body: Stack( body: Stack(
children: [ children: [
if (_viewer == null) CircularProgressIndicator(), if (_viewer == null) CircularProgressIndicator(),
if (_viewer != null) ...[ if (_viewer != null) ...[
Positioned.fill( Positioned.fill(
child: ThermionListenerWidget( child: ThermionListenerWidget(
inputHandler: DelegateInputHandler.fixedOrbit(_viewer!, sensitivity: InputSensitivityOptions(mouseSensitivity: 0.01)), inputHandler: _inputHandler,
child: ThermionWidget(viewer: _viewer!), child: ThermionWidget(viewer: _viewer!),
), ),
), ),
@@ -151,10 +177,11 @@ class _MyHomePageState extends State<MyHomePage> {
ElevatedButton( ElevatedButton(
onPressed: () async { onPressed: () async {
green = !green; green = !green;
setState(() {});
_setActiveMaterialColor(); _setActiveMaterialColor();
}, },
child: Text( child: Text(
"Set baseColorFactor to ${green ? "red" : "green"}", "Toggle baseColorFactor (currently ${green ? "green" : "red"}",
), ),
), ),
ElevatedButton( ElevatedButton(