【发布时间】:2016-02-11 17:55:39
【问题描述】:
我有一个 256x256 的板条箱纹理和一个两倍高的飞机。
我想保持纹理的纵横比并控制它的缩放因子,而不是将其拉伸到所有角落,如下所示。
这是我的对象数据:
// Vertex Positions
Vector3 vertices = new Vector3[] {
new Vector3( 1, 0, 1),
new Vector3( 3, 0, 1),
new Vector3( 3, 1, 1),
new Vector3( 1, 1, 1)};
// Index Order
int[] indices = new int[] {0, 1, 2, 0, 2, 3};
// Texture Co-ordinates
Vector2 texcoords = new Vector2[] {
new Vector2 (0.0f, 0.0f),
new Vector2 (1.0f, 0.0f),
new Vector2 (1.0f, 1.0f),
new Vector2 (0.0f, 1.0f)};
// Normals
Vector3 normals = new Vector3[] {
new Vector3 (0.0f, 0.0f, 1.0f),
new Vector3 (0.0f, 0.0f, 1.0f),
new Vector3 (0.0f, 0.0f, 1.0f),
new Vector3 (0.0f, 0.0f, 1.0f)};
我已启用纹理重复与以下内容:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, Convert.ToInt32(TextureWrapMode.Repeat));
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, Convert.ToInt32(TextureWrapMode.Repeat));
通过将纹理坐标与平面的高度和宽度相匹配,纹理会按预期重复。
// Texture Co-ordinates
Vector2 texcoords = new Vector2[] {
new Vector2 (0.0f, 0.0f),
new Vector2 (2.0f, 0.0f),
new Vector2 (2.0f, 1.0f),
new Vector2 (0.0f, 1.0f)};
但是,无论平面大小如何,我都希望所有 256x256 纹理的显示大小一致。
【问题讨论】:
-
你要的效果是什么?当四边形比纹理宽时,您是要平铺纹理,还是调整四边形的大小?
-
我想总是平铺四边形。例如,在具有许多不同大小的四边形的场景中,所有板条箱图像将具有相同大小,并在需要时进行平铺或裁剪。
-
好的,在这种情况下,您需要根据您的纵横比调整纹理坐标。