颤振显示 3D 对象flutter_3d_obj



我已经设法使用/flutter_3d_obj 在颤振上显示 3d 对象。我现在正在尝试在颤振中获取点击点的坐标。我该怎么做。或者在颤振中显示 3D 对象的最佳方法是什么?并能够获取点的坐标。

您可以使用GestureDectector Widget 包装 3Dmodel 控件,并使用onTapDownDetail属性侦听触摸位置

import 'package:flutter/material.dart';
import 'package:flutter_3d_obj/flutter_3d_obj.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
MyHomePageState createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('3D Touchable Model'),
),
body: Touch3DModel());
}
}
class Touch3DModel extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return Touch3DModelState();
}
}
class Touch3DModelState extends State<Touch3DModel> {
double obj_width = 100;
double obj_height = 100; 
double x_coord = 100.0;
double y_coord = 100.0;
void onTapDown(BuildContext context, TapDownDetails details) {
print('${details.globalPosition}');
final RenderBox box = context.findRenderObject();
final Offset localOffset = box.globalToLocal(details.globalPosition);
setState(() {
x_coord = localOffset.dx;
y_coord = localOffset.dy;
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: (TapDownDetails details) => onTapDown(context, details),
child: Stack(fit: StackFit.expand, children: <Widget>[
Container(color: Colors.grey),
Positioned(
child: Object3D(
size: const Size(obj_width, obj_height),
path: "assets/file.obj",
asset: true,
),
left: x_coord - obj_width / 2,  // To offset the object possitioning from top left of the object to the center. 
top: y_coord - obj_height / 2,
)
]),
);
}
}

注意:使用flutter_3d_obj需要您有一个使用Blender或类似工具构建的3d obj。

信用到aptik

最新更新