如何在OpenGL中裁剪和缩放纹理
问题描述:
我有一个852x640的输入纹理和一个612x612的输出纹理。我通过着色器传递输入,并希望输出缩放并正确裁剪。我无法使squareCoordinates
,textureCoordinates
和viewPorts
一起正常工作。如何在OpenGL中裁剪和缩放纹理
我不想只是裁剪,我想缩放以获得尽可能多的图像。每侧
- 缩放图像到612x814
- 裁剪掉多余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
}
我不知道究竟该视口应该是什么。
答
视口将是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
}