You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中3D模型渲染丢失纹理,Windows 3D查看器显示正常

Flutter中flutter_cube加载3D模型无纹理显示问题解决

问题描述

使用flutter_cube包开发虚拟空间时,加载的3D模型在Flutter应用中仅显示无纹理的黑色模型,但该模型在Windows 3D查看器中可正常显示纹理。

相关代码

// Dart Program to add 3D objects to your project

// importing material.dart
import 'package:flutter/material.dart';

// importing flutter cube package
import 'package:flutter_cube/flutter_cube.dart';

// creating class of stateful widget
class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
// adding necessary objects
  late Object floor;

  @override
  void initState() {
    // assigning name to the objects and providing the
    // object's file path (obj file)
    floor = Object(fileName: "assets/floor/cartoon_wooden_floor_obj.obj");
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        extendBodyBehindAppBar: true,

        // creating appbar
        appBar: AppBar(
          centerTitle: true,
          title: Text(
            "3D Objects in Flutter",
            style: TextStyle(
                color: Colors.greenAccent,
                fontWeight: FontWeight.bold,
                fontSize: 25),
          ),
          backgroundColor: Colors.transparent,
          elevation: 0.0,
        ),
        body: Container(
          child: Cube(
            onSceneCreated: (Scene scene) {
              scene.world.add(floor);
              scene.camera.zoom = 10;
            },
          ),
        ));
  }
}

解决步骤

  • 检查模型文件完整性:OBJ模型通常依赖MTL材质文件和纹理图片,确保cartoon_wooden_floor_obj.obj同目录下存在对应的MTL文件,且MTL文件中map_Kd字段指向的纹理图片路径正确,所有文件(OBJ、MTL、纹理图)都已放入assets/floor/目录。
  • 显式指定纹理路径:如果flutter_cube未能自动识别材质文件,可在初始化Object时直接指定纹理:
    floor = Object(
      fileName: "assets/floor/cartoon_wooden_floor_obj.obj",
      texture: "assets/floor/[你的纹理图片文件名].png",
    );
    
  • 验证pubspec.yaml资源配置:确保已在pubspec.yaml中正确声明assets目录,避免资源未被打包:
    flutter:
      assets:
        - assets/floor/
    
  • 注意文件名大小写:Flutter对资源文件名大小写敏感,确保代码中引用的文件名和实际文件完全一致(比如Texture.png和texture.png会被视为不同文件)。

内容的提问来源于stack exchange,提问作者pritamk47

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:20:47