一,原理:
先上图:如下1
我的免费Flutter和Dart教学视频希望你一起学习,对你有所帮助:
https://space.bilibili.com/265453330?spm_id_from=333.788.b_765f7570696e666f.1
之所以区别于二维空间,三维(3d)具有向量,位置,体积,在Flutter里面我们可以发现提供了Vector3这个三维向量类:表示它具有位置,方向,欧拉角信息,和某些向量函数等,大学学过3dmax这些建模,比较了解。我们知道一个三维物体,可以让人视觉产生不同于二维物体,是因为它具有体积(体积是由我们人的视觉所看到的),光线。而在手机这个二维界面里面我们能看出它的体积和三维这个就借助于Vector3可以创建一个摄像机提供给我们不同的视角。
二,在Flutter提供的Vector3上面我们自定义我们自己的3d视角小部件。
准备实现的需求:
1.Vector3给我们提供了具有方向性的照相机和灯光.,用来不同的视角看3d。
2.CustomPaint提供了可以进行在Canvas画布上面进行绘制我们的显示。
3.GestureDetector提供我们在屏幕上的手势拖缀来给变和刷新我们3d图像。
library flutter_3d_obj;
import 'dart:io';
import 'dart:math' as Math;
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:flutter/widgets.dart';
import 'package:meta/meta.dart';
import 'package:vector_math/vector_math.dart' show Vector3;
import 'package:vector_math/vector_math.dart' as V;
//1.0开始创建小部件
class Widght_3D extends StatefulWidget {
Widght_3D(
{@required this.size,
@required this.path,
@required this.asset,
this.angleX,
this.angleY,
this.angleZ,
this.zoom = 100.0}) {
if (angleX != null || angleY != null || angleZ != null) {
angleValue = false;
}
}
Size size;
bool asset;
String path;
double zoom;
double angleX;
double angleY;
double angleZ;
bool angleValue = true;
@override
_Widght_3DState createState() => new _Widght_3DState(path, angleValue, asset);
}
class _Widght_3DState extends State<Widght_3D&