OpenGL缩放纹理

时间:2011-12-27 20:43:33

标签: opengl scaling textures

我正在使用OpenGL在游戏中绘制纹理。

glClear(GL_COLOR_BUFFER_BIT);

float w = 128;
float h = 128;

w *= scale;
h *= scale;

GLfloat vertices[] = {
    w, 0,
    w, h,
    0, 0,
    0, h
};

float u1 = 0;
float u2 = 1;
float v1 = 0;
float v2 = 1;

GLfloat texCoords[] = {
    u2, v1,
    u2, v2,
    u1, v1,
    u1, v2
};

glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

这是一个解释我的问题的简单例子。我改变了比例变量,它只影响三角形顶点,不应该改变纹理坐标。当比例为1时,我有这张照片:

one http://dl.dropbox.com/u/21467/opengl/1.png

当我将比例改为0.99时,我有这张照片:

two http://dl.dropbox.com/u/21467/opengl/3.png

如果你仔细观察,你会发现纹理顶部有一点条纹。它为什么存在,我该如何避免呢?

在我的真实游戏中,我绘制了瓷砖,如果我改变比例,我的瓷砖开始有这些条纹,结果我在游戏中得到了这个讨厌的条纹网格。有谁知道,出了什么问题?

2 个答案:

答案 0 :(得分:2)

创建纹理缓冲区时调用以下代码:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  

如果你仔细观察,你会发现纹理顶部有一点条纹。它为什么存在,我该如何避免呢?

发生的事情是,在某些像素处,该屏幕位置的纹理坐标可能类似于-0.00011.0002。 TEXTURE_WRAP_ [S / T]纹理参数详细说明了发生这种情况时会发生什么。

答案 1 :(得分:1)

今天第二次......

看到这个答案:

https://stackoverflow.com/a/8643282/524368


  

哦,小伙子,你们这些人从来没有谷歌问题吗?这已成为一些   常见问题解答:

     

我在这里回答了

     

https://stackoverflow.com/a/5879551/524368

     

在这里

     

https://stackoverflow.com/a/7272871/524368

     

以及其他一些地方。