Я пытаюсь отобрать часть листа спермы в новую автономную текстуру. У меня есть треугольники, вершины и ультрафиолетовые координации моего спрайта, но мой код только правильно делает первый треугольник, а не второй. Я подтвердил, что оба треугольника обрабатываются. У меня есть два треугольника (0,3,1) и (2,3,0), образующие квадрат ширины 20% высоты 60% моей текстуры. Оба треугольника определены по часовой стрелке. < /P>
Vertex 2 ---------/Vertex 3
pos [1,1247] / pos [401,1247]
uv [0, 0.6] / uv [0.2, 0.6]
| / |
| / |
| / this |
| / renders|
| / |
Vertex 0 |/__________|Vertex 1
pos [1,1] pos [401,1]
uv [0, 0] uv [0.2, 0]
< /code>
Вот мой метод рендеринга в C#. Для каждого треугольника он смотрит на все возможные положения x и y в своем ограничивающем прямоугольнике, а затем вычисляет вес этого поста, связанный с каждой вершиной. Если вес отрицательный, он находится за пределами треугольника и, таким образом, игнорируется. В противном случае он выбирает текстуру соответственно. < /P>
private void RenderTight(Texture2D texture, Sprite sprite)
{
if (!sprite.texture.isReadable)
{
return;
}
for (int i = 0; i < sprite.triangles.Length; i += 3)
{
var a = sprite.triangles;
var b = sprite.triangles[i + 1];
var c = sprite.triangles[i + 2];
var vertA = sprite.vertices[a] * sprite.pixelsPerUnit;
var vertB = sprite.vertices * sprite.pixelsPerUnit;
var vertC = sprite.vertices[c] * sprite.pixelsPerUnit;
var textureSize = new Vector2(sprite.texture.width, sprite.texture.height);
var uvA = sprite.uv[a] * textureSize;
var uvB = sprite.uv * textureSize;
var uvC = sprite.uv[c] * textureSize;
var minX = Mathf.FloorToInt(Mathf.Min(vertA.x, vertB.x, vertC.x));
var maxX = Mathf.CeilToInt(Mathf.Max(vertA.x, vertB.x, vertC.x));
var minY = Mathf.FloorToInt(Mathf.Min(vertA.y, vertB.y, vertC.y));
var maxY = Mathf.CeilToInt(Mathf.Max(vertA.y, vertB.y, vertC.y));
var cX_bX = vertC.x - vertB.x;
var bY_cY = vertB.y - vertC.y;
var aX_cX = vertA.x - vertC.x;
var denom = (bY_cY * aX_cX) + (cX_bX * aX_cX);
for (int x = minX; x
Для добавленного контекста я делаю это в Unity 2019, что не поддерживает блатинговые сорты с индивидуальной геометрией, или я бы просто сделал это (Idk, если бы современный Unity может сделать это, но 2019 определенно не так). Оригинальный спрайт правильно воспроизводит в игре, так что это не имеет ничего общего с фактическими данными спрайта только с моим методом.
Подробнее здесь: https://stackoverflow.com/questions/797 ... es-and-uvs
Рендеринг текстуры треугольник из вершин и ультрафиолетовых технологий ⇐ C#
Место общения программистов C#
1759115628
Anonymous
Я пытаюсь отобрать часть листа спермы в новую автономную текстуру. У меня есть треугольники, вершины и ультрафиолетовые координации моего спрайта, но мой код только правильно делает первый треугольник, а не второй. Я подтвердил, что оба треугольника обрабатываются. У меня есть два треугольника (0,3,1) и (2,3,0), образующие квадрат ширины 20% высоты 60% моей текстуры. Оба треугольника определены по часовой стрелке. < /P>
Vertex 2 ---------/Vertex 3
pos [1,1247] / pos [401,1247]
uv [0, 0.6] / uv [0.2, 0.6]
| / |
| / |
| / this |
| / renders|
| / |
Vertex 0 |/__________|Vertex 1
pos [1,1] pos [401,1]
uv [0, 0] uv [0.2, 0]
< /code>
Вот мой метод рендеринга в C#. Для каждого треугольника он смотрит на все возможные положения x и y в своем ограничивающем прямоугольнике, а затем вычисляет вес этого поста, связанный с каждой вершиной. Если вес отрицательный, он находится за пределами треугольника и, таким образом, игнорируется. В противном случае он выбирает текстуру соответственно. < /P>
private void RenderTight(Texture2D texture, Sprite sprite)
{
if (!sprite.texture.isReadable)
{
return;
}
for (int i = 0; i < sprite.triangles.Length; i += 3)
{
var a = sprite.triangles[i];
var b = sprite.triangles[i + 1];
var c = sprite.triangles[i + 2];
var vertA = sprite.vertices[a] * sprite.pixelsPerUnit;
var vertB = sprite.vertices[b] * sprite.pixelsPerUnit;
var vertC = sprite.vertices[c] * sprite.pixelsPerUnit;
var textureSize = new Vector2(sprite.texture.width, sprite.texture.height);
var uvA = sprite.uv[a] * textureSize;
var uvB = sprite.uv[b] * textureSize;
var uvC = sprite.uv[c] * textureSize;
var minX = Mathf.FloorToInt(Mathf.Min(vertA.x, vertB.x, vertC.x));
var maxX = Mathf.CeilToInt(Mathf.Max(vertA.x, vertB.x, vertC.x));
var minY = Mathf.FloorToInt(Mathf.Min(vertA.y, vertB.y, vertC.y));
var maxY = Mathf.CeilToInt(Mathf.Max(vertA.y, vertB.y, vertC.y));
var cX_bX = vertC.x - vertB.x;
var bY_cY = vertB.y - vertC.y;
var aX_cX = vertA.x - vertC.x;
var denom = (bY_cY * aX_cX) + (cX_bX * aX_cX);
for (int x = minX; x
Для добавленного контекста я делаю это в Unity 2019, что не поддерживает блатинговые сорты с индивидуальной геометрией, или я бы просто сделал это (Idk, если бы современный Unity может сделать это, но 2019 определенно не так). Оригинальный спрайт правильно воспроизводит в игре, так что это не имеет ничего общего с фактическими данными спрайта только с моим методом.
Подробнее здесь: [url]https://stackoverflow.com/questions/79777667/render-texture-triangle-from-vertexes-and-uvs[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия