2012-02-20 79 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 
}