【发布时间】:2013-05-08 23:52:27
【问题描述】:
我正在生成一个能够缩放的平面,而纹理的边缘不会受到像素方面的影响。飞机需要能够保持其边界比例,但能够伸展到几乎任何尺寸。网格有 8 个顶点和 10 个三角形来构成边界。无论如何,这就是我得到的。忽略网格几何体上的数字。
是否可以编辑 UV 以获得所需的结果? 这是代码:
Mesh mesh = new Mesh();
var renderer = mesh.AddRenderer();
//create verticies
mesh.vertices = new Vector3[] {
//vertices in order for convienience
Manager.GUI.ScreenToWorldPoint(new Vector3(0f,0f,0f)), //0
Manager.GUI.ScreenToWorldPoint(new Vector3(padding,padding,0)), //1
Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, padding,0f)), //2
Manager.GUI.ScreenToWorldPoint(new Vector3(width,0f,0f)), //3
Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, height - padding,0f)),//4
Manager.GUI.ScreenToWorldPoint(new Vector3(width,height,0f)), //5
Manager.GUI.ScreenToWorldPoint(new Vector3(padding, height - padding, 0f)), //6
Manager.GUI.ScreenToWorldPoint(new Vector3(0f,height,0f)), //7
};
//create triangles
mesh.triangles = new int[] {
7,5,6,
6,5,4,
4,5,3,
2,4,3,
0,2,3,
0,1,2,
0,7,6,
0,6,1,
1,6,4,
1,4,2
};
//create UV's uvs are in order of creation for convienience
mesh.uv = new Vector2[] {
new Vector2(0f,0f),
new Vector2(padding/width, padding/height),
new Vector2((width-padding)/width, padding/height),
new Vector2(1f,0f),
new Vector2((width - padding)/width,(height-padding)/height),
new Vector2(1f,1f),
new Vector2(padding/width,(height-padding)/height),
new Vector2(0f,1f)
};
mesh.calculateNormals();
mesh.calculateBounds();
renderer.Texture = mytex;
return plane;
}
填充是纹理周围定义的忽略缩放的像素,而高度和宽度是形状的尺寸。
【问题讨论】:
-
不,不是,它总是会被拉长。您需要为顶部、底部、左侧、右侧和每个角设置单独的四边形。
-
@George 所以我需要生成 9 架飞机?还是我需要修改几何形状,使其中有 9 个四边形(或 18 个三角形)?无论哪种情况,我设置紫外线的方式都会给我想要的结果吗?同样对于tris,索引模式是否会是这样的(从上到下,从左到右“,”代表下一行)
13 11 10 9, 14 12 8 7, 15 2 4 6, 0 1 3 5 -
会有 9 个四边形,所以总共 9 * 2 = 18 个三角形。由于您正在更改几何体,因此您需要更改 UV,您可能会发现最简单的方法是让 4 个直边(因为它们相同,但经过旋转)和角落(因为所有 4角是相同的,旋转的。)。
-
您是否使用像素着色器来渲染三角形?如果你这样做,我可能会为你提供更好的答案。
-
我假设你不能,那么?
标签: c# .net image mesh uv-mapping