Страница 3 из 4

Re: из куба сферу

СообщениеДобавлено: 14 окт 2018, 21:58
Cyrix
IDoNotExist писал(а):
координата вершины минус центр планеты, нормализовать и умножить на радиус планеты.


что нормализовать? Центр планеты? Как это сделать?

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 10:32
Paul Siberdt
Нормализуют, как правило, вектор, то есть, приводят его к единичной магнитуде при сохранении направления.

Если вы не знаете про нормализацию, вам слишком рано замышлять проекты с процедурными и, тем более, прогрессивными мешами.

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 15:44
Cyrix
"координата вершины минус центр планеты" - это вектор? Его нужно привести к единице и умножить на радиус планеты?

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 16:08
Paul Siberdt
То есть, вы, все же, не понимаете, о чем вам говорят. :)

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 16:12
Cyrix
Paul Siberdt писал(а):То есть, вы, все же, не понимаете, о чем вам говорят. :)


неа... не понимаю. Можно как нибудь на пальцах или в виде кода? Вот есть сфера с радиусом 5, рядом со сферой расположена плоскость с 128-ю вершинами, как мне каждую вершину "притянуть" к поверхности сферы, чтобы наложить эту плоскость на сферу?

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 16:14
IDoNotExist
Cyrix писал(а):"координата вершины минус центр планеты" - это вектор? Его нужно привести к единице и умножить на радиус планеты?

Именно это я и имел в виду, это и есть простейшая проекция вершины на сферу.
Млин, совсем забыл, после этого центр планеты нужно сложить с получившимся вектором.

Как то так:
Синтаксис:
Используется csharp

float planetRadius = 5f;
Vector3 planetCenter = Vector3.zero;
foreach(Vector3 vert in mesh.vertices)
{
     Vector3 projVector = (vert - planetCenter).normalized * planetRadius;
     Vector3 projVert = planetCenter + projVector;
}
 

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 22:45
Cyrix
Не ложиться почему-то моя плоскость на сферу :-\
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;
using System.Collections;

        public class deform : MonoBehaviour
        {
                [InspectorButton("OnButtonClicked")]
                public bool GENERATE;
               
                private void OnButtonClicked()
                {
                Mesh mesh = GetComponent<MeshFilter>().sharedMesh;
                GameObject planeta = GameObject.Find("Sphere");
                Vector3 centr = planeta.GetComponent<Renderer>().bounds.center;

                Vector3[] vertices = mesh.vertices;
                int i = 0;

                        foreach(Vector3 vert in vertices)
                        {
                                Vector3 projVector = (vert - centr).normalized * 5f;
                                Vector3 projVert = centr + projVector;
                //      Debug.Log (projVert.z);
                                vertices[i].z = projVert.z;
                        i++;
                        }

                mesh.RecalculateBounds();
                mesh.RecalculateNormals();
                SceneView.RepaintAll();

                }
        }
 

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 23:26
Cyrix
ошибок никаких не пишет, но и ничего не происходит с вершинами. Скрипт вешаю на плоскость из 64-х вершин

Re: из куба сферу

СообщениеДобавлено: 15 окт 2018, 23:28
Tolking
Обратно мешу присвоить массив точек нужно...

Re: из куба сферу

СообщениеДобавлено: 16 окт 2018, 00:20
Cyrix
дописал
Синтаксис:
Используется csharp
mesh.vertices = vertices;
 


плоскость изогнулась, но совсем не по сфере


Join 4Shared Now!

Re: из куба сферу

СообщениеДобавлено: 16 окт 2018, 00:39
waruiyume
Вершины получаемые из меша находятся в локальном пространстве, а центр в мировом, нужно сначала трансформировать позиции в мировое пространство, произвести манипуляции, трансформировать в локальное пространство, а уже потом присвоить обратно мешу.
Transform.InverseTransformPoint
Transform.TransformPoint

Re: из куба сферу

СообщениеДобавлено: 16 окт 2018, 08:45
IDoNotExist
Cyrix писал(а):vertices[i].z = projVert.z;

Што это?

vertices[i] = projVert;
И никаких z;

Re: из куба сферу

СообщениеДобавлено: 16 окт 2018, 10:11
Cyrix
waruiyume писал(а):Вершины получаемые из меша находятся в локальном пространстве, а центр в мировом, нужно сначала трансформировать позиции в мировое пространство, произвести манипуляции, трансформировать в локальное пространство, а уже потом присвоить обратно мешу.
Transform.InverseTransformPoint
Transform.TransformPoint


Чёт не могу сообразить, в каком месте поставить Transform.InverseTransformPoint и в каком Transform.TransformPoint

Re: из куба сферу

СообщениеДобавлено: 16 окт 2018, 10:38
IDoNotExist
Cyrix писал(а):Чёт не могу сообразить, в каком месте поставить Transform.InverseTransformPoint и в каком Transform.TransformPoint

Достаточно центр привести в локальные коорд-ты:
Синтаксис:
Используется csharp
Vector3 centr = transform.InverseTransformPoint (planeta.GetComponent<Renderer>().bounds.center);
 

Re: из куба сферу

СообщениеДобавлено: 16 окт 2018, 11:28
Cyrix
Ура товарищи!!! Моя плоскость всё-же легла на сферу! Но вот пивот ускакал куда-то далеко от плоскости. Можно его как-то вернуть на плоскость?