Я успешно создал куб по этому коду: http://wiki.unity3d.com/index.php/ProceduralPrimitives и с текстурой получил следующее:
But if I try to change one vertex's position, half of the triangles get inverted such as shown in the following screen.
I also tried to change all of the vertices at once by giving them the exact same values ( I copy / pasted the code used to create the vertices ) and reassign the vertices with mesh.vertices = vertices
but I get the exact same triangle problem
введите описание изображения здесь
Все треугольники есть, но половина из них в конечном итоге отражается внутри меня sh, и форма куба теряется.
Когда я также пересчитываю треугольники текстура находится не на своем месте, и мне нужно пересчитать нормали и UV, если я хочу, чтобы куб выглядел нормально.
Мне это не кажется правильным, поскольку я меняю положение вершин, но не меняю ни одну из ребра / треугольники. Я не понимаю, почему я должен их пересчитывать.
Есть ли способ изменить форму моего куба, не пересчитывая все? Я не добавляю / удаляю вершины, и куб не скручивается / не деформируется (верхняя левая вершина остается верхней левой вершиной и так далее)
Примечание : Я sh, чтобы изменить положение вершин во время выполнения
Изменить : это код, который вызывает ошибку:
float width = 10f;
float height = 10f;
float length = 10f;
Vector3 p0 = new Vector3(-width * .5f, -height * .5f, length * .5f);
Vector3 p1 = new Vector3(width * .5f, -height * .5f, length * .5f);
Vector3 p2 = new Vector3(width * .5f, -height * .5f, -length * .5f);
Vector3 p3 = new Vector3(-width * .5f, -height * .5f, -length * .5f);
Vector3 p4 = new Vector3(-width * .5f, height * .5f, length * .5f);
Vector3 p5 = new Vector3(width * .5f, height * .5f, length * .5f);
Vector3 p6 = new Vector3(width * .5f, height * .5f, -length * .5f);
Vector3 p7 = new Vector3(-width * .5f, height * .5f, -length * .5f);
Vector3[] vertices = new Vector3[] {
// Bottom
p0, p1, p2, p3,
// Left
p7, p4, p0, p3,
// Front
p4, p5, p1, p0,
// Back
p6, p7, p3, p2,
// Right
p5, p6, p2, p1,
// Top
p7, p6, p5, p4
};
_selectionBoxMeshFilter.mesh.vertices = vertices;
Это тот же код, что и использовался для создания me sh в первую очередь. Me sh делает странные вещи, когда он вызывается после того, как me sh был создан.