flutter 显示 3d 对象 flutter_3d_obj

标签 flutter canvas 3d blender

我设法使用 /flutter_3d_obj 在 flutter 上显示 3d 对象.我现在正在尝试获取 flutter 中点击点的坐标。我该怎么做。或者在 flutter 中显示 3d 对象的最佳方式是什么?并有能力获得一个点的坐标。

最佳答案

你可以用 GestureDectector 包裹你的 3Dmodel Widget小部件并使用 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 需要你有一个 3d obj,你用 blender 或类似的工具构建。

归功于 aptik

关于flutter 显示 3d 对象 flutter_3d_obj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496386/

相关文章:

android-studio - 我可以让 Android Studio 生成带有命名参数的 Dart 构造函数代码并添加 key 吗?

c++ - 视差映射 - GLSL- OpenGL

c++ - GLMmodel 顶点中的 -431602080.000000 值是什么意思?

ios - Firebase 电话身份验证verificationId 从未被设置。 ( flutter iOS)

flutter - 有没有办法在 dart 中不使用循环的情况下找到两个列表之间的唯一值

html - 如何CSS样式灵活的元素来匹配他们的 parent

javascript - 沿 HTML5 Canvas 路径的连续渐变

javascript - 基本动画效果——我应该使用 jQuery 还是 HTML5 Canvas?

algorithm - 将 3D 点云与 CAD 模型相匹配

ios - 启动应用程序时出错 - Flutter - iOS