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

4

我有一个852x640的输入纹理和一个612x612的输出纹理。我正在通过着色器传递输入,并希望正确地缩放和裁剪输出。我在使squareCoordinatestextureCoordinatesviewPorts正常配合方面遇到了困难。

我不仅想裁剪图像,还想将其缩放以尽可能多地获取图像。如果我在使用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
}

我不确定视口应该是什么。

1个回答

6

视口大小应为612x612像素。

为了缩放和裁剪原始四边形,最简单的方法是将顶点设置为覆盖612x612矩形(在您的情况下,我们保持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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接