-
Notifications
You must be signed in to change notification settings - Fork 27
Description
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:three_js/three_js.dart' as t3;
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@OverRide
Widget build(BuildContext context) {
return Three3D();
}
}
class Three3D extends StatefulWidget {
const Three3D({super.key});
@OverRide
State createState() => _Three3DState();
}
class _Three3DState extends State {
late final t3.ThreeJS threeJS;
@OverRide
void initState() {
threeJS = t3.ThreeJS(
onSetupComplete: () => setState(() {}),
setup: setup,
settings: t3.Settings(useOpenGL: true),
);
print('okok');
super.initState();
}
Future setup() async {
t3.Vector3 getVec3() {
final random = Random();
return t3.Vector3(
random.nextDouble() * 5 * (random.nextBool() ? 1.0 : -1.0),
random.nextDouble() * 5 * (random.nextBool() ? 1.0 : -1.0),
random.nextDouble() * 5 * (random.nextBool() ? 1.0 : -1.0),
);
}
threeJS.camera = t3.PerspectiveCamera(50, threeJS.width / threeJS.height);
threeJS.camera.position.setFrom(t3.Vector3(0, 2, 6));
threeJS.scene = t3.Scene();
final geometry = t3.BoxGeometry();
final random = Random();
for (var i = 0; i < 100; i++) {
final mesh = t3.Mesh(
geometry,
t3.MeshBasicMaterial({
t3.MaterialProperty.color: t3.Color(
random.nextDouble(),
random.nextDouble(),
random.nextDouble(),
),
}),
);
mesh.position.setFrom(getVec3());
threeJS.scene.add(mesh);
}
t3.OrbitControls(threeJS.camera, threeJS.globalKey);
}
@OverRide
Widget build(BuildContext context) {
return threeJS.build();
}
@OverRide
void dispose() {
threeJS.dispose();
super.dispose();
}
}