代码之家  ›  专栏  ›  技术社区  ›  Neph

使用FastObjImporter(Unity)在运行时加载并显示.obj文件

  •  1
  • Neph  · 技术社区  · 6 年前

    click ,直接链接到 pastebin )来自Unity维基的FastObjImporter( click

    由于.obj文件不包含法线,因此我必须进行以下更改:

    if(faceData[i].z >= 1) {
        if(normals.Count != 0) {
            newNormals[i] = normals[faceData[i].z - 1];
        }
    }
    

    我还补充说 mesh.RecalculateNormals(); 一开始。

    我提出这个问题的问题和原因是,团结没有显示任何东西。场景非常简单:标准的平行光和标准的摄像机,其中一个玩家角色是它的孩子。

    我的代码(必须旋转才能正确对齐):

    Mesh m = FastObjImporter.Instance.ImportFile(path);
    Material mat = new Material(Shader.Find("Hidden/Internal-Colored")) { color = new Color(0,0,1) };
    GameObject obj = new GameObject();
    
    if(obj.GetComponent<MeshFilter>()==null) { obj.AddComponent<MeshFilter>(); }
    
    if(obj.GetComponent<MeshRenderer>()==null) { obj.AddComponent<MeshRenderer>(); }
    
    obj.GetComponent<MeshFilter>().mesh = m;
    obj.GetComponent<MeshRenderer>().material = mat;
    obj.transform.Rotate(new Vector3(270,0,0));
    obj.transform.Rotate(new Vector3(0,0,180));
    

    我尝试过不同的材质和模型,我使用相同的代码创建自己的网格和游戏对象,其中的顶点信息是我从一个.txt文件中读取的,一切都很好-只是这里没有。

    我还注意到“三角形”列表总是包含0个条目,即使在我的.obj文件中有很多“t….”条目。如果我在这里将“j=1”更改为“j=0”,它将填充列表:

    info += j;
    j = 0;
    while(j + 2 < info) {
    

    最后,团结仍然没有显示出任何东西,所以必须有其他的东西是错误的。

    有没有人怀疑这可能是什么,我能做些什么让它工作?

    0 回复  |  直到 6 年前