снимок экрана с проблемой Я создаю очень простое приложение с помощью Sceneform, которое на данный момент имеет только одно действие с видом сцены, к которому я добавил рендеринг. Я хочу загрузить простую модель планеты, которую я создал в блендере и экспортировал как файл obj в качестве рендеринга. Однако объект загружается и отображается, но не имеет никакой текстуры или рельефного отображения, он просто серый. Мне нужно знать, что не так с моим кодом, из-за которого текстура не загружается. Я не получаю сообщений об ошибках при отладке приложения или об ошибках в logcat.
Когда я использую файл obj для камня, который я скачал в Интернете, он работает нормально, объект отображается с его текстурами. Однако когда я использую ту же процедуру для импорта и отображения модели, которую я создал в блендере и экспортировал как объект, я сталкиваюсь с проблемой. Я проверил наличие ошибок в файлах mtl, sfb и obj для своей модели, используя файлы для камня, которые, как мне известно, работают в качестве эталона, и, несмотря на то, что, казалось бы, не имеет никаких различий, кроме названных файлов и настроек материала, я все еще могу у меня нет текстуры для отображения на моей модели.
Я также добавил текстуру к визуализируемому объекту непосредственно в файле MainActivity.java, используя завершаемую будущую текстуру и метод .setTexture (). (Наконец, стоит отметить, что я попытался экспортировать как fbx вместо этого и имел ту же проблему)
MainActivity.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CompletableFuture<Texture> merSurFuture = Texture.builder().setSource(this, R.drawable.mercury_global_map).build();
ModelRenderable.builder().setSource(this, Uri.parse("mercuryobj.sfb") )
.build()
.thenAcceptBoth(merSurFuture, (renderable, texture ) -> {
mObjRenderable = renderable;
mObjRenderable.getMaterial().setTexture("baseColor", texture);
SceneView sceneView = findViewById(R.id.scene_view);
sceneView.setBackgroundColor(Color.BLACK);
Scene scene = sceneView.getScene();
//adding a node to the sceneview
Node node = new Node();
node.setParent(scene);
node.setName("sun");
node.setRenderable(renderable);
node.setLocalPosition(new Vector3(0f,-0.5f,-1f));
})
.exceptionally(throwable -> {
Toast toast = Toast.makeText(this, "unable to load sun", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return null;
});
mtl файл:
`# Blender MTL File: 'Mercury.blend'
# Material Count: 1
newmtl Material.001
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 1
map_Bump -bm 0.000030 mercury_topo.png
map_Ks Mercury_global_map.png
map_Kd Mercury_global_map.png
map_Ka Mercury_global_map.png
`
obj соответствующие строки:
mtllib mercurymtl.mtl
o Mercury_Sphere
...
usemtl Material.001
s 1
sfb файл:
{
materials: [
{
name: 'Material.001',
parameters: [
{
baseColor: 'Mercury_global_map',
},
{
baseColorTint: [
0.80000000000000004,
0.80000000000000004,
0.80000000000000004,
1,
],
},
{
metallic: 0,
},
{
roughness: 1,
},
{
opacity: null,
},
],
source: 'build/sceneform_sdk/default_materials/obj_material.sfm',
},
],
model: {
attributes: [
'Position',
'Orientation',
],
collision: {},
file: 'sampledata/mercuryobj.obj',
name: 'mercuryobj',
recenter: 'root',
scale: 0.20496,
},
samplers: [
{
file: 'sampledata\\Mercury_global_map.png',
name: 'Mercury_global_map',
params: {
usage_type: 'Data',
},
pipeline_name: 'Mercury_global_map.png',
},
],
version: '0.54:2',
}
Я ожидаю, что модель загрузится и отобразит свою текстуру, как в случае с моделью, которую я скачал из Интернета. Модель загружается полностью гладко, без текстуры.