如何在OpenGL中裁剪和缩放纹理

时间:2012-02-20 03:19:33

标签: opengl-es textures

我的输入纹理为852x640,输出纹理为612x612。我通过着色器传递输入,并希望缩放输出并正确裁剪。我无法让squareCoordinatestextureCoordinatesviewPorts一起正常工作。

我不想只裁剪,我也想缩放它以获得尽可能多的图像。如果我使用Photoshop,我会分两步完成这个步骤(在OpenGL中我试图一步完成):

  1. 将图像缩放为612x814
  2. 在每侧裁掉多余的101px
  3. 我正在使用标准的方形顶点和纹理顶点:

    static const GLfloat squareVertices[] = {
        -1.0f, -1.0f,
        1.0f, -1.0f,
        -1.0f,  1.0f,
        1.0f,  1.0f,
    };
    
    static const GLfloat squareTextureVertices[] = {
        0.0f, 0.0f,
        1.0f, 0.0f,
        0.0f,  1.0f,
        1.0f,  1.0f
    }
    

    我不确切知道viewPort应该是什么。

1 个答案:

答案 0 :(得分:6)

视口将是612x612像素。

要缩放和裁剪原始四边形,最简单的方法是将顶点设置为覆盖612x612 rect(在您的情况下我们保持squareVertices不变),但设置纹理坐标以便左右两侧被裁剪掉:

static const GLfloat squareTextureVertices[] = {
    (852.0f-640.0f)/852.0f*0.5f, 0.0f,
    1.0f - (852.0f-640.0f)/852.0f*0.5f, 0.0f,
    (852.0f-640.0f)/852.0f*0.5f,  1.0f,
    1.0f - (852.0f-640.0f)/852.0f*0.5f,  1.0f
}