Compare commits
7 Commits
thermion_f
...
429b8eb93b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
429b8eb93b | ||
|
|
413faec849 | ||
|
|
433b6373a9 | ||
|
|
ad2c5afb7f | ||
|
|
a561c847a7 | ||
|
|
ef7ba24ecc | ||
|
|
ee176d2684 |
@@ -79,4 +79,4 @@ Thank you to the following people:
|
|||||||
- @LukasPoque for CI/refactoring work
|
- @LukasPoque for CI/refactoring work
|
||||||
- @alexmercerind for his work on integrating ANGLE textures on Flutter Windows
|
- @alexmercerind for his work on integrating ANGLE textures on Flutter Windows
|
||||||
- @BrutalCoding for documentation fixes
|
- @BrutalCoding for documentation fixes
|
||||||
|
- @chenriji for testing and bug fixes
|
||||||
|
|||||||
@@ -108,10 +108,13 @@ fragment {
|
|||||||
1.0
|
1.0
|
||||||
);
|
);
|
||||||
|
|
||||||
color.rgb = (axes.x < 1e-8) ? color.rgb : AXIS_COLOR_X;
|
if(axes.x > 1e-8) {
|
||||||
color.rgb = (axes.z < 1e-8) ? color.rgb : AXIS_COLOR_Z;
|
material.baseColor = vec4(AXIS_COLOR_X, 1.0);
|
||||||
|
} else if(axes.z > 1e-8) {
|
||||||
material.baseColor = color * gridAlpha;
|
material.baseColor = vec4(AXIS_COLOR_Z, 1.0);
|
||||||
|
} else {
|
||||||
|
material.baseColor = color * gridAlpha;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
name: thermion_workspace
|
name: thermion_workspace
|
||||||
packages:
|
packages:
|
||||||
- thermion_dart
|
- thermion_dart
|
||||||
- thermion_flutter/**
|
- thermion_flutter/thermion_flutter_platform_interface
|
||||||
|
- thermion_flutter/thermion_flutter_method_channel
|
||||||
|
- thermion_flutter/thermion_flutter_web
|
||||||
|
- thermion_flutter/thermion_flutter
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ class FFICamera extends Camera<Pointer<TCamera>> {
|
|||||||
@override
|
@override
|
||||||
Pointer<TCamera> getNativeHandle() {
|
Pointer<TCamera> getNativeHandle() {
|
||||||
return camera;
|
return camera;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final FFIFilamentApp app;
|
final FFIFilamentApp app;
|
||||||
@@ -92,6 +91,16 @@ class FFICamera extends Camera<Pointer<TCamera>> {
|
|||||||
double far = kFar,
|
double far = kFar,
|
||||||
double aspect = 1.0,
|
double aspect = 1.0,
|
||||||
double focalLength = kFocalLength}) async {
|
double focalLength = kFocalLength}) async {
|
||||||
|
if (near.isNaN ||
|
||||||
|
far.isNaN ||
|
||||||
|
aspect.isNaN ||
|
||||||
|
focalLength.isNaN ||
|
||||||
|
near.isNegative ||
|
||||||
|
far.isNegative ||
|
||||||
|
aspect.isNegative ||
|
||||||
|
focalLength.isNegative) {
|
||||||
|
throw FormatException();
|
||||||
|
}
|
||||||
Camera_setLensProjection(camera, near, far, aspect, focalLength);
|
Camera_setLensProjection(camera, near, far, aspect, focalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -344,13 +344,14 @@ abstract class ThermionViewer {
|
|||||||
int getCameraCount();
|
int getCameraCount();
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Adds the asset to the scene, meaning the asset will be rendered/visible.
|
/// Adds the asset to the scene. All renderable entities attached to
|
||||||
|
/// the asset will be visible.
|
||||||
///
|
///
|
||||||
Future addToScene(covariant ThermionAsset asset);
|
Future addToScene(covariant ThermionAsset asset);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Removes the asset from the scene, meaning the asset will not be rendered/visible.
|
/// Removes the asset from the scene. None of the renderable entities
|
||||||
/// The asset itself will remain valid.
|
/// attached to the asset will be visible, but the asset itself remains valid.
|
||||||
///
|
///
|
||||||
Future removeFromScene(covariant ThermionAsset asset);
|
Future removeFromScene(covariant ThermionAsset asset);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ GRID_PACKAGE:
|
|||||||
GRID_GRID_OFFSET:
|
GRID_GRID_OFFSET:
|
||||||
.int 0
|
.int 0
|
||||||
GRID_GRID_SIZE:
|
GRID_GRID_SIZE:
|
||||||
.int 50913
|
.int 49793
|
||||||
|
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ _GRID_PACKAGE:
|
|||||||
_GRID_GRID_OFFSET:
|
_GRID_GRID_OFFSET:
|
||||||
.int 0
|
.int 0
|
||||||
_GRID_GRID_SIZE:
|
_GRID_GRID_SIZE:
|
||||||
.int 50913
|
.int 49793
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -82,10 +82,6 @@ class TestHelper {
|
|||||||
testDir = Directory("${packageUri}test").path;
|
testDir = Directory("${packageUri}test").path;
|
||||||
outDir = Directory("$testDir/output/${dir}");
|
outDir = Directory("$testDir/output/${dir}");
|
||||||
outDir.createSync(recursive: true);
|
outDir.createSync(recursive: true);
|
||||||
if (Platform.isMacOS) {
|
|
||||||
DynamicLibrary.open('${testDir}/generated/objective_c.dylib');
|
|
||||||
DynamicLibrary.open('${testDir}/generated/libThermionTextureSwift.dylib');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -226,6 +222,10 @@ class TestHelper {
|
|||||||
|
|
||||||
FFIRenderTarget? renderTarget;
|
FFIRenderTarget? renderTarget;
|
||||||
if (createRenderTarget) {
|
if (createRenderTarget) {
|
||||||
|
// if (Platform.isMacOS) {
|
||||||
|
// DynamicLibrary.open('${testDir}/generated/objective_c.dylib');
|
||||||
|
// DynamicLibrary.open('${testDir}/generated/libThermionTextureSwift.dylib');
|
||||||
|
// }
|
||||||
// var metalColorTexture = await createTexture(
|
// var metalColorTexture = await createTexture(
|
||||||
// viewportDimensions.width, viewportDimensions.height);
|
// viewportDimensions.width, viewportDimensions.height);
|
||||||
// var metalDepthTexture = await createTexture(
|
// var metalDepthTexture = await createTexture(
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||

|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://thermion.dev/quickstart">Quickstart (Flutter)</a> •
|
|
||||||
<a href="https://thermion.dev/quickstart">Documentation</a> •
|
|
||||||
<a href="https://thermion.dev/showcase">Showcase</a> •
|
|
||||||
<a href="https://dartpad.thermion.dev/">Playground</a> •
|
|
||||||
<a href="https://discord.gg/h2VdDK3EAQ">Discord</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## Cross-platform 3D engine for Dart and Flutter.
|
|
||||||
|
|
||||||
<a href="https://pub.dev/packages/thermion_dart"><img src="https://img.shields.io/pub/v/thermion_dart?label=pub.dev&labelColor=333940&logo=dart&color=00589B" alt="pub"></a>
|
|
||||||
<a href="https://github.com/nmfisher/thermion"><img src="https://img.shields.io/github/stars/nmfisher/flutter_filament?style=flat&label=stars&labelColor=333940&color=8957e5&logo=github" alt="github"></a>
|
|
||||||
<a href="https://discord.gg/h2VdDK3EAQ"><img src="https://img.shields.io/discord/993167615587520602?logo=discord&logoColor=fff&labelColor=333940" alt="discord"></a>
|
|
||||||
<a href="https://github.com/nmfisher/thermion"><img src="https://img.shields.io/github/contributors/nmfisher/flutter_filament?logo=github&labelColor=333940" alt="contributors"></a>
|
|
||||||
|
|
||||||
### Quickstart (Flutter)
|
|
||||||
|
|
||||||
```
|
|
||||||
_thermionViewer = await ThermionFlutterPlugin.createViewer();
|
|
||||||
|
|
||||||
// Geometry and models are represented as "entities". Here, we load a glTF
|
|
||||||
// file containing a plain cube.
|
|
||||||
// By default, all paths are treated as asset paths. To load from a file
|
|
||||||
// instead, use file:// URIs.
|
|
||||||
var entity =
|
|
||||||
await _thermionViewer!.loadGlb("assets/cube.glb", keepData: true);
|
|
||||||
|
|
||||||
// Thermion uses a right-handed coordinate system where +Y is up and -Z is
|
|
||||||
// "into" the screen.
|
|
||||||
// By default, the camera is located at (0,0,0) looking at (0,0,-1); this
|
|
||||||
// would place it directly inside the cube we just loaded.
|
|
||||||
//
|
|
||||||
// Let's move the camera to (0,0,10) to ensure the cube is visible in the
|
|
||||||
// viewport.
|
|
||||||
await _thermionViewer!.setCameraPosition(0, 0, 10);
|
|
||||||
|
|
||||||
// Without a light source, your scene will be totally black. Let's load a skybox
|
|
||||||
// (a cubemap image that is rendered behind everything else in the scene)
|
|
||||||
// and an image-based indirect light that has been precomputed from the same
|
|
||||||
// skybox.
|
|
||||||
await _thermionViewer!.loadSkybox("assets/default_env_skybox.ktx");
|
|
||||||
await _thermionViewer!.loadIbl("assets/default_env_ibl.ktx");
|
|
||||||
|
|
||||||
// Finally, you need to explicitly enable rendering. Setting rendering to
|
|
||||||
// false is designed to allow you to pause rendering to conserve battery life
|
|
||||||
await _thermionViewer!.setRendering(true);
|
|
||||||
```
|
|
||||||
|
|
||||||
and then in your Flutter application:
|
|
||||||
```
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Stack(children: [
|
|
||||||
if (_thermionViewer != null)
|
|
||||||
Positioned.fill(
|
|
||||||
child: ThermionWidget(
|
|
||||||
viewer: _thermionViewer!,
|
|
||||||
)),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
1
thermion_flutter/thermion_flutter/README.md
Symbolic link
1
thermion_flutter/thermion_flutter/README.md
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../thermion_dart/README.md
|
||||||
Reference in New Issue
Block a user