【发布时间】:2023-08-15 08:53:01
【问题描述】:
我已经尝试了几个小时在 LWJGL 中将纹理拉伸到四边形。
这是我用于四边形的代码:
private static void renderLoad() {
glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
texture.bind();
glPushMatrix();{
glBegin(GL_QUADS);
{
glTexCoord2f(0, 1);
glVertex2f(0, 0); //Upper-left
glTexCoord2f(1, 1);
glVertex2f(Display.getWidth(), 0); //Upper-right
glTexCoord2f(1, 0);
glVertex2f(Display.getWidth(), Display.getHeight()); //Bottom-right
glTexCoord2f(0, 0);
glVertex2f(0, Display.getHeight()); //Bottom-left
}
glEnd();
}glPopMatrix();
}
这是我运行它时的显示效果: http://gyazo.com/376ddb0979c55226d2f63c26215a1e12
我正在尝试使图像扩展到窗口的大小。 Quad 是窗口大小,但纹理似乎没有拉伸。
如果我不使用纹理并且简单地将四边形设为颜色,则如下所示: http://gyazo.com/65f21fe3efa2d3948de69b55d5c85424
如果有帮助,这里是我的主循环:
glMatrixMode(GL_PROJECTION);
glViewport(0, 0, displaySizeX, displaySizeY);
glLoadIdentity();
glOrtho(0, displaySizeX, 0, displaySizeY, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
texture = loadLoadingImage();
//This is the main loop for the game.
while(!Display.isCloseRequested()){
delta = getDelta();
updateFPS();
if(Display.wasResized()){
displaySizeX = Display.getWidth();
displaySizeY = Display.getHeight();
glViewport(0, 0, displaySizeX, displaySizeY);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, displaySizeX, 0, displaySizeY, -1, 1);
}
render();
checkInput();
Display.update();
Display.sync(sync);
}
cleanUp();
return true;
如何使图像拉伸到四边形?
【问题讨论】:
-
您没有在显示调整大小代码中将矩阵模式设置回
GL_MODELVIEW。不确定这是否是导致问题的原因。 -
我尝试修复并删除它,但它什么也没做。即使不改变显示,它仍然不会拉伸图像。
-
你用什么来加载纹理?看起来它可能是在加载时将纹理大小四舍五入到二的下一个幂的工具包之一。
-
@RetoKoradi 我正在使用 slick-utitls。无论如何我解决了这个问题。这是图像。我在某处读到图像/纹理必须能够除以 2,并且它必须是 2 的指数。我将图像大小更改为 1024,现在效果很好!
-
这实际上只是您用于加载图像的库的限制。 OpenGL 纹理大小必须为 2 的幂的限制很久以前就被取消了。