c++ - 纹理和纹理映射 GLUTess 多边形?

标签 c++ c opengl

究竟如何为 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/

相关文章:

javascript - 将信息从 Chromium Embedded (Javascript) 发送到包含的 C++ 应用程序

c++ - 设计线程安全的可复制类

c++ - __attribute__((weak)) 和 LD_PRELOAD

c# - 为什么默认情况下 Switch 语句的 Fall-Through?

c - 一个unsigned char *指向的内存区大小是多少?

java - OpenGL 纹理拉伸(stretch)

c - 获取总视频内存大小

c++ - 如何在使用 Visual Studio 编译器使用多重继承时优化对象的内存大小?

c++ - 为什么我的变量在我设置它们的类之外打印时给出不同的值?

opengl - 在 wxWidgets 中启用 OpenGL