Java Can';在LWJGL中绘制1280x800纹理
我的图像是1280x800,我的屏幕大小是1280x800。它应该画得很好。但现在它在我的屏幕左上角画了一个正方形的纹理,它超出了比例,不够大。我不知道为什么它不起作用,我试着在画图时把纹理的大小写得更大,看起来效果更好,但我不知道为什么在1280x800四元网格上画图时它不起作用 这是我的OPENGL和显示设置代码:Java Can';在LWJGL中绘制1280x800纹理,java,opengl,lwjgl,slick2d,Java,Opengl,Lwjgl,Slick2d,我的图像是1280x800,我的屏幕大小是1280x800。它应该画得很好。但现在它在我的屏幕左上角画了一个正方形的纹理,它超出了比例,不够大。我不知道为什么它不起作用,我试着在画图时把纹理的大小写得更大,看起来效果更好,但我不知道为什么在1280x800四元网格上画图时它不起作用 这是我的OPENGL和显示设置代码: try { DisplayMode displayMode = null; DisplayMode[] modes = Display
try {
DisplayMode displayMode = null;
DisplayMode[] modes = Display.getAvailableDisplayModes();
for (int i = 0; i < modes.length; i++) {
if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
displayMode = modes[i];
}
}
Display.setDisplayMode(displayMode);
Display.setFullscreen(false);
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
编辑:在搜索了几个小时后,我发现,我找到了一个奇怪的解决方案,在我看来,我制作了2048x1024图像,留下了额外的空白。成功了。但这就是它应该如何工作的?所以我假设所有图像大小都是2的幂,剩下多余的空间是空的?或者有更好的方法吗?这里确实没有足够的信息,但我怀疑您有一个非常古老的OpenGL实现(2.0之前) 早期版本的OpenGL无法使用两种纹理的非幂函数。加载前必须重新缩放(拉伸以适应)图像,或者在调整大小和修改纹理坐标后将部分图像留空 如果您有一个合法的OpenGL 2.0实现,它将支持两种纹理的非增强功能。早在OpenGL 2.0时代,驱动程序供应商就没有很好地满足这些要求,并且经常声称要实现OpenGL版本,无论主机硬件是否真正满足所有要求。两种纹理的非功能可能是最大的缺陷,这个时代的许多硬件可以处理OpenGL2.0所需的一切,除了NPOT纹理
在任何情况下,如果您所在的平台不能保证OpenGL 2.0,在使用npot纹理之前,您应该检查扩展名
GL\u ARB\u texture\u non\u power\u of_two
。我认为这可能是LWJGL的问题。
background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));
girl_01 = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/girl_01.png")));
girl_02 = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/girl_02.png")));
glBindTexture(GL_TEXTURE_2D, background.getTextureID());
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0); // Upper left
glTexCoord2f(1, 0);
glVertex2f(World.SCREEN_WIDTH, 0); // Upper right
glTexCoord2f(1, 1);
glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right
glTexCoord2f(0, 1);
glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
glEnd();
glPopMatrix();