сохранить линии в obj

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

сохранить линии в obj

Сообщение Trifov 29 ноя 2021, 13:32

мне надо сохранить граф дорог в obj файл. для этого написал простой скриптик. если сохранять лишь одну дорогу, все нормально сохраняется, и потом читается в 3д максе.
если же попытаться сохранить несколько дорог, вываливается ошибка чтения. вот кусок скрипта, отвечающего за сохранение:

p.s. структуру копировал из obj файла, созданном в 3д максе, и возможно где-то тут ошибка кроется
Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Text;
 
public class RoadsToObject {
    public static void CreateFile(List<RoadPoint> roads, string filename)
    {
        if(roads == null || roads.Count <=0)
        {
            Debug.LogError("Road not select");
            return;
        }
        if (string.IsNullOrEmpty(filename))
        {
            Debug.LogError("File name error");
            return;
        }
        if (File.Exists(filename))
        {
            Debug.LogError("File already exists");
            return;
        }
        StringBuilder meshString = new StringBuilder();
 
        meshString.Append("#" + "Roads.obj" + "\n"
                          + "#" + System.DateTime.Now.ToLongDateString() + "\n"
                          + "#" + System.DateTime.Now.ToLongTimeString() + "\n"
                          + "#-------" + "\n");
        for(int i = 0; i < roads.Count; i++)
        {
            if (roads[i] == null)
                continue;
            meshString.Append(CreateData(roads[i], i));
        }
        Debug.Log(meshString.ToString());
        WriteToFile(meshString.ToString(),filename);
    }
 
    private static void WriteToFile(string s, string filename)
    {
        using (StreamWriter sw = new StreamWriter(filename))
        {
            sw.Write(s);
        }
    }
 
    private static string CreateData(RoadPoint obj, int child)
    {
        StringBuilder data = new StringBuilder();
            data.Append( "#" + "\n"
            + "# shape Road" + child + "\n"
            + "#" + "\n"
            + "\n");
        foreach (Vector3 pos in obj.Points)
        {
            data.Append(string.Format("v  {0} {1} {2} \n",pos.x.ToString(), pos.y.ToString(), pos.z.ToString()));
        }
        data.Append(string.Format("# {0} vertices\n", obj.Points.Count));
        data.Append(string.Format("g Road{0}\n", child));
        data.Append(string.Format("usemtl wire_008110135\n",child));
        data.Append("l");
        for (int i = 0; i < obj.Points.Count; i++)
        {
            data.Append(string.Format(" {0}", (i + 1)));
        }
        data.Append("\n");
        return data.ToString();
    }
}
Trifov
UNец
 
Сообщения: 45
Зарегистрирован: 07 апр 2021, 11:43

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23