究竟如何为 GLUTess 多边形提供纹理坐标并绑定(bind)纹理? 谢谢
最佳答案
我不知道我是否理解正确。纹理在 redbook 中有很好的描述。 . 他们在书中使用了 GLUT,因此您应该在示例中找到答案。
简而言之:在调用 glVertex 之前调用 glTexCoord2f(u,v)(如果您不使用 VBO),其中 u,v 是纹理坐标。
HTH
编辑: 对不起,现在我明白了这个问题。
我从未使用过 segmentation 器,但也许我可以提供帮助:-)
Tesselators 只找到应该创建新顶点的点。标准 glVertex 用于将它们发送到 GPU。
您可以使用自己的函数来绘制顶点。如果您使用
注册回调gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid (*) ()) &vertexCallback);
然后每次创建新顶点时都会调用您的函数。你也可以使用
gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid (*) ()) &combineCallback);
向顶点添加一些信息 - 如法线、颜色、tex 坐标。
参见 redbook - chapter11例11-2
/* a different portion of init() */
gluTessCallback(tobj, GLU_TESS_VERTEX,
(GLvoid (*) ()) &vertexCallback);
gluTessCallback(tobj, GLU_TESS_BEGIN,
(GLvoid (*) ()) &beginCallback);
gluTessCallback(tobj, GLU_TESS_END,
(GLvoid (*) ()) &endCallback);
gluTessCallback(tobj, GLU_TESS_ERROR,
(GLvoid (*) ()) &errorCallback);
gluTessCallback(tobj, GLU_TESS_COMBINE,
(GLvoid (*) ()) &combineCallback);
/* new callback routines registered by these calls */
void vertexCallback(GLvoid *vertex)
{
const GLdouble *pointer;
pointer = (GLdouble *) vertex;
glColor3dv(pointer+3);
glVertex3dv(vertex);
}
void combineCallback(GLdouble coords[3],
GLdouble *vertex_data[4],
GLfloat weight[4], GLdouble **dataOut )
{
GLdouble *vertex;
int i;
vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
vertex[0] = coords[0];
vertex[1] = coords[1];
vertex[2] = coords[2];
for (i = 3; i < 7; i++)
vertex[i] = weight[0] * vertex_data[0][i]
+ weight[1] * vertex_data[1][i]
+ weight[2] * vertex_data[2][i]
+ weight[3] * vertex_data[3][i];
*dataOut = vertex;
}
像往常一样绑定(bind)纹理应该就足够了 - 在使用曲面 segmentation 器绘制之前执行此操作。
HTH
关于c++ - 纹理和纹理映射 GLUTess 多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893164/