我想从这样的纹理中绘制一个按钮:
并通过这种方式做到这一点:
//sWidth, sHeight - stretched size.
Size mySize = TheSprite.MyTexture.TextureSize;
OpenGL.glBindTexture(OpenGL.TextureTarget.Texture2D, TheSprite.MyTexture.MyTextureID);
OpenGL.glBegin(OpenGL.BeginMode.Quads);
double x = (double)TheDestination.Left;
double y = (double)TheDestination.Top;
double s = (double)(TheSprite.MyLocation.Left + TheSource.Left) / (double)mySize.Width + sWidth;
double t = (double)(TheSprite.MyLocation.Top + TheSource.Top) / (double)mySize.Height + sHeight;
double x2 = (double)TheDestination.Right + sWidth;
double s2 = (double)(TheSprite.MyLocation.Left + TheSource.Right) / (double)mySize.Width + sWidth;
double y2 = (double)TheDestination.Bottom + sHeight;
double t2 = (double)(TheSprite.MyLocation.Top + TheSource.Bottom) / (double)mySize.Height + sHeight;
OpenGL.glColor4(TheModulation);
OpenGL.glTexCoord2d(s, t2);
OpenGL.glVertex2d(x, y2);
OpenGL.glTexCoord2d(s, t);
OpenGL.glVertex2d(x, y);
OpenGL.glTexCoord2d(s2, t);
OpenGL.glVertex2d(x2, y);
OpenGL.glTexCoord2d(s2, t2);
OpenGL.glVertex2d(x2, y2);
OpenGL.glEnd();
我应该如何绘制它以使其拉伸,而不是在我的情况下重新调整大小?
答案 0 :(得分:3)
在此代码中
OpenGL.glTexCoord2d(s, t2);
OpenGL.glVertex2d(x, y2);
OpenGL.glTexCoord2d(s, t);
OpenGL.glVertex2d(x, y);
OpenGL.glTexCoord2d(s2, t);
OpenGL.glVertex2d(x2, y);
OpenGL.glTexCoord2d(s2, t2);
OpenGL.glVertex2d(x2, y2);
您将纹理的边角映射到按钮的角落,如下所示:
由于纹理是方形且按钮是矩形,因此纹理会水平拉伸以适合按钮的宽度。 如果您不希望黄色框架在按钮的两侧水平拉伸,则在绘制纹理时需要使用额外的点,以便仅水平拉伸它的中间部分(点2-3-6) -7)。像这样: