2012-02-20 42 views
4

我有一个852x640的输入纹理和一个612x612的输出纹理。我通过着色器传递输入,并希望输出缩放并正确裁剪。我无法使squareCoordinatestextureCoordinatesviewPorts一起正常工作。如何在OpenGL中裁剪和缩放纹理

我不想只是裁剪,我想缩放以获得尽可能多的图像。每侧

  1. 缩放图像到612x814
  2. 裁剪掉多余101px:如果我使用的Photoshop我做这两个步骤(在OpenGL中,我试图做这一步)

我使用标准方顶点和纹理顶点:

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 
} 

我不知道究竟该视口应该是什么。

回答

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 
}