Closed AdrienHoule closed 1 year ago
Hi Adrien,
A few things might cause the black screen.
First, be sure to add light to your scene e.g.: Scene.add(new THREE.AmbientLight("#ffffff,1.0));
If that doesn't solve it, your Tilesets may be outside the view. Check the tile "bounding volume" and adjust the camera to point at it.
Come back to me if it doesn't solve it
Thanks for your answer, so I added lighting to the scene and it didn't change anything. So I tried moving my camera near the object and using camera.lookAt for rotation but still couldn't see the object. The bouding volume of the root tile is the following "root": { "boundingVolume": { "region": [ 0, 0.6811202739730972, 0.4163239024191421, 0.9734848446547839, -475989.18440294435, 472931.24836871633 ] },
Ah ok, I see the bounding volume is a region.. these are specific to Georeferenced tilesets and I don't support it.
However, I've been waiting for the opportunity to add it, I just didn't have a sample use case
I can do it quite quickly but it could help if you can share the tileset or host it on a public file server
Of course I will share it to you, but I need a little time cause it is a geopackage not json tileset and there is an app my company made that converts it to json and make it useable from a server. And I unfortunately can't share the app with you. So let me convert it first or regenerate an other 3DTiles b3dm with region and will send it to you. I currently only have i3dm and cmpt that are in this format.
You know what, I found some datasets online and I think I fixed it, I'm going to test a bit more and I'll push a new version
Okay, if you need I still made some random data that is a b3dm with region around corsica. https://drive.google.com/file/d/1gho8gt0fUcVVwqEkTlktWz_JecoAPgZV/view?usp=share_link
I'm having the same issue! I can add the model to the scene but only the first mesh/level loads! The lod does not seem to be working with this type of model!
Okay, if you need I still made some random data that is a b3dm with region around corsica. https://drive.google.com/file/d/1gho8gt0fUcVVwqEkTlktWz_JecoAPgZV/view?usp=share_link
I can view the model but I have no texture is that normal? Also the model loads very slowly and that's because the tiles are encoded in a sub-optimal manner.
Nevertheless, I can see the model. I'm going to add some helper function to center the model on the origin and perhaps rotate it according to the shape of the earth. The "region" bounding volume is in lon/lat/height and takes the ellipsoid into account
Hi @AdrienHoule I find an inconsistency with your dataset relative to others I found online.
The doc stated that : glTFs must be transformed from y-up to z-up at runtime and I see that the gltf files in your model are indeed defined as y-up. However, I have not seen this implemented in other tilesets where the GLTFs are all z-up
Now, it is very possible that I mess up something in the transformations but I have 2 tilesets from 2 different sources that work different from yours.
Do you have another tileset I could test with?
@laraduarte , would you care to share the model in the screenshot or a link to it?
@ebeaufay I will send you an email with the link!
Hi, yeah the model has no texture don't worry it's normal. It is an old tileset I generated months ago, so don't worry about the gltf axis it is wrong, you should not use y-up but cesium still allows it to be used and you probably will have errors. I will try making/finding another b3dm but as I said most are geopackage tileset or CPMT and i3dm (if you need the second ones I can give it to you). ps : sry if I made english errors, I have a hard time talking english on technical points
You can try with version 5.1.3 also on NPM.
use the property "centerModel: true" to center and rotate the model so that it's up axis aligns with the y-axis.
@laraduarte
About the issue where you'd like to raise the model so that its lowest point is on y = 0, you can do it by creating the tileset like this :
const ogc3DTile = new OGC3DTile({
url: "http://localhost:8082/tileset.json",
static: false,
centerModel:true,
renderer: renderer,
onLoadCallback: (tile)=>{
if (!!tile.json.boundingVolume.region) {
const halfHeight = (tile.json.boundingVolume.region[5] - tile.json.boundingVolume.region[4]) * 0.5;
ogc3DTile.translateOnAxis(new THREE.Vector3(0, 1, 0), halfHeight);
}
}
});
In this example, I wait for the tileset.json to be loaded in order to access the bounding volume and infer how much to raise the model by.
I would consider having some API for this in the future, but I think this workaround should get you going.
@AdrienHoule, I'll close the issue if this worked for you
Hi I'm trying to load a b3dm in a scene but can't see it even tough I have no error in the console. So if you have any idea why I would love to know. Thanks in advance.