我正在学习使用 openGL,有人告诉我,因为我的轮拱是凹的,所以我必须对它们进行镶嵌。所以这是我的前轮拱代码......
GLdouble car[7][2] = { {-1.93,0.3}, {-1.95,0.4}, {-2.2,0.6}, {-2.6,0.6}, {-2.82,0.4}, {-2.8,0.3}, {-2.78,0.0} };
GLUtesselator *tess = gluNewTess(); // create a tessellator
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureLib[textureindex]);
glBegin(GL_POLYGON);
glTexCoord2f( 0.0 , 0.0 ); glVertex2f(-1.0 , 0.0 );
glTexCoord2f(-0.97, 0.0 ); glVertex2f(-1.97, 0.0 );
// Wheel arch
gluTessBeginContour(tess);
{
gluTessVertex(tess, car[0], car[0]);
gluTessVertex(tess, car[1], car[1]);
gluTessVertex(tess, car[2], car[2]);
gluTessVertex(tess, car[3], car[3]);
gluTessVertex(tess, car[4], car[4]);
gluTessVertex(tess, car[5], car[5]);
gluTessVertex(tess, car[6], car[6]);
}
gluTessEndContour(tess);
这辆车看起来像这样:
{我知道纹理也是错误的atm)但是你可以看到前轮拱即使有镶嵌也没有改变,所以我想我镶嵌错了..或者需要更多的镶嵌..还是什么?如果有人可以帮助我解决我在轮拱上遇到的这个巨大问题并纠正它,我将永远感激不尽,因为我一直在努力克服这一点。谢谢 :)
整个drawBody函数代码可以在这里找到:http: //pastebin.com/s9RpzMsd
更新:感谢所有帮助:感谢镶嵌帮助,我的对象现在看起来像这样。现在只是纹理:)
更新 2:好的,所以我使用了与 PeterT 建议的大致相同的代码,这就是它最终的结果(必须对其进行更改才能编译。指出它是否错误)
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureLib[textureindex]);
GLUtesselator *tess = gluNewTess(); // create a tessellator
gluTessCallback(tess, GLU_TESS_VERTEX,
(void (__stdcall *) ()) &putvertex);
gluTessCallback(tess, GLU_TESS_BEGIN,
(void (__stdcall *) ()) &glBegin);
gluTessCallback(tess, GLU_TESS_END,
(void (__stdcall *) ()) &glEnd);
gluTessBeginPolygon(tess, NULL);
gluTessBeginContour(tess);
for(int i=0; i<29;i++)
gluTessVertex(tess, car[i], car[i]);
//call gluTessVertex for EVERY vertex in the polygon here
gluTessEndContour(tess);
gluTessEndPolygon(tess);
glDisable(GL_TEXTURE_2D);
putvertex 代码为:
void CALLBACK putvertex(GLdouble *verts)
{
//filled according to you texture coordinates:
GLdouble scalefacx = 1.0;
GLdouble scalefacy = 1.0;
GLdouble offsetx = -1.0;
GLdouble offsety = 0.0;
glVertex2dv(verts);
glTexCoord2d(verts[0]*scalefacx - offsetx,verts[1]*scalefacy - offsety);
}
然后看起来像这样:
我在某个地方出错了吗?:/
感谢您的所有帮助,最终图像如下所示:
再次感谢您的帮助!尤其是彼得 :)