Страница 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;
плоскость изогнулась, но совсем не по сфере
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
Ура товарищи!!! Моя плоскость всё-же легла на сферу! Но вот пивот ускакал куда-то далеко от плоскости. Можно его как-то вернуть на плоскость?