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

Dex*_*Dex 4 textures opengl-es

我的输入纹理是852x640,输出纹理是612x612.我通过着色器传递输入,并希望缩放输出并正确裁剪.我遇到麻烦squareCoordinates,textureCoordinatesviewPorts以适当的共同努力.

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

  1. 将图像缩放到612x814
  2. 在每侧裁掉多余的101px

我正在使用标准的方形顶点和纹理顶点:

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
}
Run Code Online (Sandbox Code Playgroud)

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

bri*_*dir 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
}
Run Code Online (Sandbox Code Playgroud)