簡體   English   中英

OpenGL-保持紋理寬高比

[英]OpenGL - Maintain texture width to height ratio

我有一個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紋理都顯示一致的大小。

根據長寬比調整紋理坐標。

例如,如果您的圖塊的寬高比為2:1,則紋理坐標在X上的范圍為0-2,而不是0-1。 這將導致紋理在X中平鋪兩次。

您需要檢查X是否大於Y,反之亦然。 如果是前者,則按quadWidth / quadHeight縮放X。 否則,按quadHeight / quadWidth縮放texCoord.y。

這樣,您的最小尺寸將從0-1開始,較大的尺寸將進行調整以匹配您的紋理外觀。

您可以只將紋理的寬度和高度(或縱橫比,但是寬度和高度有時很有用,所以我只是將它們分別以float2形式分別作為x和y發送給着色器),然后進行校正那里。

OP的其他評論:

這工作了。 通過計算平面的寬度(x2 - x1)和紋理偏移量(x1 % 1) ,紋理現在與“世界網格”水平對齊。

// Texture Co-ordinates
Vector2 texcoords = new Vector2[] {
    new Vector2 (TextureOffset, 0.0f),
    new Vector2 (TextureOffset + Width, 0.0f),
    new Vector2 (TextureOffset + Width, 1.0f),
    new Vector2 (TextureOffset, 1.0f)};

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM