Автор Тема: при экспорте в obj, v = vt.  (Прочитано 231 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн COMMUNIST239

  • Житель
при экспорте в obj, v = vt.
« : 11 Март 2018, 13:59:39 »
Как сделать так, что-бы количество вершин было равно количеству координат текстуры (то-бишь количество строчек, начинающихся на "v", было равно количеству строчек, начинающихся на "vt". ПРИ ЭКСПОРТЕ В .OBJ)

Оффлайн Striver

  • Житель
  • теперь Самара
    • http://striver00.ru
Re: при экспорте в obj, v = vt.
« Ответ #1 : 11 Март 2018, 14:23:52 »
Цитировать
Как сделать так, что-бы количество вершин было равно количеству координат текстуры (то-бишь количество строчек, начинающихся на "v", было равно количеству строчек, начинающихся на "vt". ПРИ ЭКСПОРТЕ В .OBJ)
Странное желание... Ну, можешь вусмерть разорвать меш на отдельные одиночные полигоны, чтобы каждая вершина относилась только к одному полигону. Только зачем это?

Оффлайн COMMUNIST239

  • Житель
Re: при экспорте в obj, v = vt.
« Ответ #2 : 11 Март 2018, 14:29:44 »
Рад, что спросили! В unity3d создал скрипт, который импортирует модели obj при запуске игры. Но для этого, модель должна иметь равное количество вершин и uv координат. А как разорвать то?

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: при экспорте в obj, v = vt.
« Ответ #3 : 11 Март 2018, 14:46:41 »
... выложи текст скрипта ...

Оффлайн Striver

  • Житель
  • теперь Самара
    • http://striver00.ru
Re: при экспорте в obj, v = vt.
« Ответ #4 : 11 Март 2018, 14:59:06 »
Я с Юнити никогда не работал, есть у меня пара предположений:
1) Наверняка там и раньше можно было без проблем импортировать OBJ-файлы, всё-таки один из самых распространённых форматов.
2) Наверняка можно изменить скрипт так, чтобы не было этого требования v=vt
Вот тут чуваки обсуждают: http://www.unity3d.ru/distribution/viewtopic.php?f=18&t=4287 (правда ещё аж в 2011 году).

Оффлайн COMMUNIST239

  • Житель
Re: при экспорте в obj, v = vt.
« Ответ #5 : 11 Март 2018, 15:00:45 »
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
using System;

public class ImportObjLITE : MonoBehaviour {

    public string ObjModel;
    public string Texture;

    public WWW w;
    public Texture2D tex;

    public bool TextureMirrorX;
    public bool TextureMirrorY;
    static int xx;
    static int yy;

    static int kol;
    static int kol1;

    static string[] lol;

    static string[] sas;

    static string[] kek;

    static Vector3[] vert;
    static int[] tri;

    static List<Vector3> ver = new List<Vector3>();
    static List<int> triang = new List<int>();
    static List<Vector2> uv = new List<Vector2>();
    static List<string> huh = new List<string>();
    static List<string> huh1 = new List<string>();

    static Vector2[] uvn;

    static char[] loh = new char[2];
    // Update is called once per frame
    void Start() {
        loh[0] = '/';
        loh[1] = ' ';

        MeshFilter m_f = GetComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        m_f.mesh = mesh;


        StreamReader st = new StreamReader(ObjModel);
        while (!st.EndOfStream)
        {
            var govno = st.ReadLine();

            if (govno.StartsWith("v "))
            {
                lol = govno.Substring(2).Split(' ');
                ver.Add(new Vector3(float.Parse(lol[0]), float.Parse(lol[1]), float.Parse(lol[2])));
            }
            if (govno.StartsWith("vt "))
            {
                kek = govno.Substring(3).Split(' ');

                uv.Add(new Vector2(float.Parse(kek[0]), float.Parse(kek[1])));
            }
            uvn = uv.ToArray();

            if (govno.StartsWith("f "))
            {
                sas = govno.Substring(2).Split(loh);
                huh.Add(sas[0]);
                huh.Add(sas[2]);
                huh.Add(sas[4]);

                huh1.Add(sas[1]);
                huh1.Add(sas[3]);
                huh1.Add(sas[5]);

                triang.Add(Convert.ToInt32(sas[0]) - 1);
                triang.Add(Convert.ToInt32(sas[2]) - 1);
                triang.Add(Convert.ToInt32(sas[4]) - 1);
            }
        }
        kol = huh.Count;

        for (int i = 0; i <= (kol - 1); i++)
        {
            uvn[Convert.ToInt32(huh) - 1] = uv[Convert.ToInt32(huh1) - 1];
        }
        mesh.vertices = ver.ToArray();
        mesh.triangles = triang.ToArray();
        mesh.uv = uvn;

        string k = @"\";
        char[] l = k.ToCharArray();
        string p = Texture.Replace(l[0], '/');
        w = new WWW("file://" + p);
        tex = w.texture;

        Renderer renderer = GetComponent<Renderer>();
        renderer.material.mainTexture = tex;
    }
    void Update()
    {
        if (TextureMirrorX == true)
        {
            xx = 1;
        }
        else
        {
            xx = -1;
        }
        if (TextureMirrorY == true)
        {
            yy = -1;
        }
        else
        {
            yy = 1;
        }
        Renderer renderer = GetComponent<Renderer>();
        renderer.material.mainTextureScale = new Vector2(xx, yy);
    }

}


но ты скорее всего не поймешь. могу объяснить. сначала скрипт берёт все вершины, потом соединяет их под треугольники (то-есть триангулирует), а потом берёт все текстурные координаты (uv). но unity устроена так, что при создании меша, должно учитываться то, что количество вершин должно быть равно количеству текстурных координат. Я так-то смог это сделать через edge split, и при создании uv развёртки выбрал smart UV Project. Однако при перетаскивании выделенных полигонов на uv развёртки, у меня при экспорте в obj увеличивалось количество текстурных координат.

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: при экспорте в obj, v = vt.
« Ответ #6 : 11 Март 2018, 15:07:18 »
>> А как разорвать то?
... в режиме редактирования: Ctrl+T    Ctrl+E K   далее добавить модификатор Edge Split с чеком Sharp Edges ...
... и наверное сделать развертку U->Light Pack ...

 

* По форуму

* Последние вложения


Скачано: 8
Автор: MusaevRamiz
2018-12-13_191934.png
Скачано: 14
Автор: oleg126

Скачано: 12
Автор: MusaevRamiz
untitled.jpg
Скачано: 27
Автор: Samovar
17.jpg
Скачано: 27
Автор: nilsen71