如何在Minecraft Coder Pack(MCP)中将图像裁剪为屏幕矩形
解决方案:用OpenGL裁剪功能限制圆形绘制区域
因为Minecraft原生的Gui.drawModalRectWithCustomSizedTexture没有内置裁剪功能,你可以直接用OpenGL的**裁剪测试(Scissor Test)**来实现,这是原生Java版Minecraft支持的方法,不需要依赖Forge等Mod API。
具体步骤及代码修改
- 启用裁剪测试并设置屏幕上的目标裁剪矩形
- 执行你原本的纹理绘制代码
- 关闭裁剪测试,恢复绘图状态(避免影响后续游戏UI绘制)
修改后的代码示例:
// 定义你要裁剪到的屏幕矩形参数:x坐标,y坐标,宽度,高度 int clipX = 30; int clipY = 100; int clipWidth = 20; // 示例:只显示20x20的区域 int clipHeight = 20; // 启用OpenGL裁剪测试 GL11.glEnable(GL11.GL_SCISSOR_TEST); // 转换坐标:Minecraft UI坐标以左上角为原点,OpenGL裁剪坐标以左下角为原点 int windowHeight = mc.displayHeight; GL11.glScissor(clipX, windowHeight - (clipY + clipHeight), clipWidth, clipHeight); // 你的原有绘制代码 mc.getTextureManager().bindTexture(new ResourceLocation("Garbg/Circle.png")); Gui.drawModalRectWithCustomSizedTexture(30, 100, 0, 0, 25, 25, 25, 25); // 关闭裁剪测试,恢复正常绘图 GL11.glDisable(GL11.GL_SCISSOR_TEST);
关键说明
GL_SCISSOR_TEST:启用后,OpenGL只会在指定矩形内绘制内容,超出部分会被直接裁剪- 坐标转换:必须把Minecraft的UI坐标转换成OpenGL裁剪坐标,否则裁剪区域会出现在屏幕错误位置
- 务必关闭裁剪测试:如果不关闭,后续所有游戏UI都会被限制在这个矩形内,导致显示异常
如果你是想把圆形纹理缩放到指定矩形区域(而非裁剪超出部分),可以直接修改绘制方法的参数:
// 把圆形缩放到30,100位置的20x20矩形内 mc.getTextureManager().bindTexture(new ResourceLocation("Garbg/Circle.png")); Gui.drawModalRectWithCustomSizedTexture(30, 100, 0, 0, 20, 20, 25, 25);
这里的20,20是屏幕上要绘制的矩形大小,最后的25,25是原始纹理的尺寸,圆形会自动适配到目标矩形区域。
内容的提问来源于stack exchange,提问作者Garbg
相关产品推荐
相关产品推荐

