在OpenGL中重复纹理

时间:2010-10-06 07:52:18

标签: opengl

嗨,我对OpenGL很陌生。

我的任务是在OpenGL中实现GDI画笔以在MAC OS X上绘图。因此我转向OpenGL中的纹理以首先绘制图案然后需要将其映射到绘图图元(如多边形)(矩形一个案例)在点)。我正在创建一个8x8纹素纹理,然后将其映射到一个多边形上,下面的坐标在500x500像素的窗口上。

glVertex3f(0.35,0.35,0.0);

glVertex3f(0.35,0.65,0.0);

glVertex3f(0.65,0.65,0.0);

glVertex3f(0.65,0.35,0.0);

因为我需要画笔效果,所以必须沿着矩形重复模式。矩形/正方形为0.3 x 0.3,整个窗口为500 x 500,然后就像素而言,多边形为150 x 150。

因此,重复所需的重复是150/8

因此我按如下方式设置纹理坐标:

glTexCoord2f(0.0,       0.0);   glVertex3f(0.35, 0.35, 0.0);
glTexCoord2f(0.0,       150/8); glVertex3f(0.35, 0.65, 0.0);
glTexCoord2f(150/8,     150/8); glVertex3f(0.65, 0.65, 0.0);
glTexCoord2f(150/8,     0.0);   glVertex3f(0.65, 0.35, 0.0);

我遇到的问题是,我创建的纹理垂直阴影(一个纹理透明,另一个颜色)图案没有被适当地映射,因为某些垂直线比其他垂直线更宽(一种混叠问题) )。是这样我必须在映射时设置纹理坐标吗?

感谢您的回复

2 个答案:

答案 0 :(得分:15)

如果我正确理解你,你就不能正确处理纹理坐标。使用glTexCoord2f()时,纹理从0.0,0.0扩展到1.0,1.0。因此,如果您想要一个填充四边形的纹理,请使用以下内容:

glTexCoord2f(0.0f, 0.0f);    glVertex3f(0.35f, 0.35f, 0.0f);
glTexCoord2f(0.0f, 1.0f);    glVertex3f(0.35f, 0.65f, 0.0f);
glTexCoord2f(1.0f, 1.0f);    glVertex3f(0.65f, 0.65f, 0.0f);
glTexCoord2f(1.0f, 0.0f);    glVertex3f(0.65f, 0.35f, 0.0f);

如果你想在四边形表面重复纹理8次,请使用8.0f代替texCoords调用中的1.0fs。您还需要确保在绑定纹理后将纹理设置为重复。

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

这可能是您的问题,但如果您仍然遇到别名问题,请尝试使用glTexParameteriGL_TEXTURE_MAG_FILTER以及mip-mapping查看GL_TEXTURE_MAG_FILTER

它可能已有十多年的历史,但this old Flipcode tutorial仍然具有相关性,值得一看。

编辑:在texcoord调用之前有顶点调用

答案 1 :(得分:3)

如果您编写的代码与代码中的代码完全相同,那么150/8就是您的问题。这是一个整数除法,不会返回浮点18.75,而是整数18。

将代码更改为浮点值。

 150.f/8.f
相关问题