从纹理图集在四边形网格中应用纹理

时间:2019-03-08 15:20:44

标签: c# unity3d mesh texture-mapping quad

我正在尝试将纹理图集中的纹理动态应用于Unity3D中的四边形网格。

当我在一个立方体网格中执行相同的操作时,正面效果很好,但其他曲面失真了。所以我有了一个简单的四边形的想法,现在我遇到了这种情况:

enter image description here

图像应显示如下:

enter image description here

我通过下面的代码放置纹理。数学工作正常:

public int offsetX = 0;
public int offsetY = 0;

private const float offset = 0.0625f; // the rate of each texture square

void Start ()
{
    Mesh mesh = GetComponent<MeshFilter>().mesh;

    Vector2[] UVs = new Vector2[mesh.vertices.Length];

    UVs[0] = new Vector2(offsetX * offset, offsetY * offset);
    UVs[1] = new Vector2((offsetX * offset) + offset, offsetY * offset);
    UVs[2] = new Vector2(offsetX * offset, (offsetY * offset) + offset);
    UVs[3] = new Vector2((offsetX * offset) + offset, (offsetY * offset) + offset);

    mesh.uv = UVs;
}

如何将纹理放置在四边形网格中作为图像参考?

1 个答案:

答案 0 :(得分:0)

对于那些寻求答案的人:

我修复了更改着色器的尾部(偏移)和比例的问题。示例:

using UnityEngine;

public class Cube : MonoBehaviour {

    public int offsetX = 0;
    public int offsetY = 0;

    private Renderer _rend;
    private Material _material;

    private const float Offset = 0.0625f;

    // Use this for initialization
    private void Start ()
    {
        _rend = GetComponent<Renderer>();

        _material = _rend.material;

        _material.mainTextureScale = new Vector2(Offset,Offset);
    }

    private void Update()
    {
        _material.mainTextureOffset = new Vector2(offsetX*Offset,offsetY*Offset);
    }
}