问题描述
我面临的问题是在裁剪掉部分边缘后呈现正确的图像。我只能在非标准的宽高比中观察到这一点。 在我的情况下,宽度为1228,高度为972,长宽比为1.26。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glClearColor(0.0,0.0,1.0);
float vx = float(m_uiImageWidth) / float(m_uiImageWidth);
float vy = float(m_uiImageHeight) / float(m_uiImageWidth);
glEnable(GL_TEXTURE_2D);
glTexImage2D(GL_TEXTURE_2D,3,m_uiImageWidth,m_uiImageHeight,GL_BGR,GL_UNSIGNED_BYTE,m_arrayBufferVS1);
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D,m_texture);
//glTranslatef(0.0f,0.0f,-1.36f);
glTranslatef(0.0f,-1.358f);
//normal
if(m_bContextMenunormal)
glrotatef(180,1,0);
else if (m_bContextMenuRotate180 && m_bContextMenuMirror)
{
//do nothing
}
else if(m_bContextMenuMirror)
glrotatef(180,0);
else if(m_bContextMenuRotate180)
glrotatef(180,0);
glScalef(1,-1,1);
glBegin(GL_QUADS);
glTexCoord2f(1.0f,1.0f); //top right
glVertex3f(vx,vy,0.0f);
glTexCoord2f(0.0f,1.0f); // left top
glVertex3f(-vx,0.0f); //left bottom
glVertex3f(-vx,-vy,0.0f);
glTexCoord2f(1.0f,0.0f); //right bottom
glVertex3f(vx,0.0f);
glEnd();
gldisable(GL_TEXTURE_2D);
这是我的代码段。如果有人指出我犯的错误和纠正建议,那将是一个很大的帮助。
解决方法
修改对glTexCoord2f
的调用,十进制值将在四个顶点之间进行内插,然后乘以图像的宽度和高度,以计算从纹理绘制到屏幕的每个像素的坐标。如果要将纵横比为1.26的图像左右裁剪为正方形,则可以使用以下纹理坐标:
glTexCoord2f(1.0f - 0.13f,1.0f); //top right
glTexCoord2f(0.0f + 0.13f,1.0f); // left top
glTexCoord2f(0.0f + 0.13f,0.0f); //left bottom
glTexCoord2f(1.0f - 0.13f,0.0f); //right bottom
0.13 * 1228为159.64像素,当从1228像素宽的纹理的任一侧移除159.64像素时,图像的其余部分为972像素宽,这意味着绘制的像素的纵横比将为1:1,因为您的纹理高972像素