有人可以解释一下这个OpenGL代码吗?

时间:2012-11-19 03:37:24

标签: c++ opengl

我尝试使用GLDebugger来反转游戏,看看它是如何工作的。 窗口大小,如果是765 x 553。

Texture2D 184看起来像: enter image description here

和Texture2D 203看起来像:

enter image description here

代码的结果是(忽略美元符号和感叹号): enter image description here

背后的代码是:

glEnable(GL_SCISSOR_TEST)
glScissor(516, 335, 249, 168)
glEnable(GL_SCISSOR_TEST)
glScissor(550, 341, 154, 154)
glDisable(GL_TEXTURE_RECTANGLE)
glEnable(GL_TEXTURE_2D)

glBindTexture(GL_TEXTURE_2D, 184)
glActiveTextureARB(GL_TEXTURE1)
glEnable(GL_TEXTURE_RECTANGLE)
glBindTexture(GL_TEXTURE_RECTANGLE, 203)
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, 7681)
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, 8448)
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, 34168)
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, 768)

glBegin(GL_QUADS)
glColor3f(1, 1, 1)
glMultiTexCoord2fARB(GL_TEXTURE0, 0, 1)
glMultiTexCoord2fARB(GL_TEXTURE1, -194.55215, 353.57529)
glVertex2f(355.44785, -141.57529)
glMultiTexCoord2fARB(GL_TEXTURE0, 0, 0)
glMultiTexCoord2fARB(GL_TEXTURE1, -212.4122, -194.13358)
glVertex2f(337.5878, 406.13358)
glMultiTexCoord2fARB(GL_TEXTURE0, 1, 0)
glMultiTexCoord2fARB(GL_TEXTURE1, 335.29663, -211.99362)
glVertex2f(885.29663, 423.99362)
glMultiTexCoord2fARB(GL_TEXTURE0, 1, 1)
glMultiTexCoord2fARB(GL_TEXTURE1, 353.15674, 335.71524)
glVertex2f(903.15674, -123.71524)
glEnd()

我想知道上面的代码是做什么的,因为我想知道这么大的地图如何变成如此微小的东西:S

有人可能会将其分解或使用这些图像或不同的图像或其他任何东西来解释它吗?

1 个答案:

答案 0 :(得分:1)

要认识到的最重要的是,非常简单,所有这些代码都是“剪切”你所站的区域,在其上应用圆形滤镜,然后在屏幕上绘制。

需要glEnable才能使用glScissor命令。为什么他们启用它并连续两次使用它超出了我的范围。据我所知,它只需要为此代码启用和使用一次。

然后我们看到主要纹理绑定到GL_TEXTURE_2D,而较小的纹理绑定到GL_TEXTURE_RECTANGLE。设置了许多环境标志,以便GL_TEXTURE_RECTANGLE用作过滤器,通过组合某些事物并在其他事物上使用源和操作数来产生正确的结果。

一旦我们进入glBegin,我们开始实际绘制到屏幕上。 glEnd表示绘制到屏幕的结束。