【发布时间】:2014-02-04 23:32:21
【问题描述】:
所以我正在开发一个小型 Pong 复制品,只是为了使用 LWJGL 进行一些练习。由于没有简单的方法可以在 LWJGL 中编写可自定义的文本,因此我将纹理用于开始按钮、其他按钮等。然而,当我绘制纹理时,结果发现它在我的紫色背景上变色了。如果我将背景更改为白色,则不会变色。帮忙?
另外,我的开始按钮纹理类似于 50x22,但我将其放在 64x64 图像上,因为 Slick 只能加载为 2 的指数的分辨率。我调整了正在绘制的矩形,使其不变形,并且图像的其余部分是透明的,所以一旦我解决了上述问题,它就不应该是可见的。我的方法有其他替代方法吗?
这是我初始化 OpenGL 的地方:
public static void setCamera()
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,width,0,height,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
这是我绘制纹理的地方:
public void draw()
{
logic();
glPushMatrix();
glTranslated(x,y,0);
texture.bind();
glBegin(GL_QUADS);
glTexCoord2d(0,1); glVertex2d(0,-196.875);
glTexCoord2d(1,1); glVertex2d(width+18.75,-196.875);
glTexCoord2d(1,0); glVertex2d(width+18.75,height);
glTexCoord2d(0,0); glVertex2d(0,height);
glEnd();
glPopMatrix();
}
谢谢:)
【问题讨论】:
-
如果您解释了如何“将背景设置为白色”,将会很有帮助。是否清除颜色缓冲区,是否使用
glColor3f (...)绘制全屏四边形,是否在纹理中设置颜色?有许多可能的原因,从良性(忘记重置当前颜色)到更复杂的情况,例如在混合函数中不正确地应用预乘 alpha。 -
清除颜色缓冲区并在名为
setCamera (...)的函数中启用GL_TEXTURE_2D也没有多大意义。对我来说,这个名字意味着它应该做的唯一一件事就是设置您的查看体积(例如视口、投影和模型视图矩阵)。 -
@andon 好吧,这个名字现在并不重要。那个 setCamera() 方法在游戏循环中运行,还有另一个方法叫做 drawBackground(),这是我绘制背景颜色的地方。当我说“将背景设置为白色”时,我的意思是我使用 glColor3d() 更改了 drawBackground() 中的颜色。
-
那是你的问题。您需要在绘制前景之前重置当前颜色,否则它将通过背景颜色调整您的纹理。在
draw()中的texture.bind();之后添加对glColor3f (1.0f, 1.0f, 1.0f)的调用。而且我反对的不是函数的名称,而是函数的功能。你在那个函数中做的事情比你应该做的要多,其中许多是不相关的,特别是启用GL_TEXTURE_2D- 你应该只在你真正需要应用纹理时才这样做。 -
@andon 非常感谢!这解决了我的问题!
标签: java opengl textures lwjgl