Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 纹理和纹理贴图面筋多边形?_C++_C_Opengl - Fatal编程技术网

C++ 纹理和纹理贴图面筋多边形?

C++ 纹理和纹理贴图面筋多边形?,c++,c,opengl,C++,C,Opengl,如何准确地为臀肌多边形提供纹理坐标和绑定纹理? 谢谢我不知道我是否正确地理解了你。纹理在中有很好的描述。 他们在书中使用了过量,所以你应该在例子中找到答案 简而言之:在调用glVertex(如果不使用VBO)之前调用glTexCoord2f(u,v),其中u,v是纹理坐标 嗯 编辑: 对不起,现在我明白问题了 我从未使用过tesselators,但也许我能帮上忙:-) 细分器仅查找应创建新顶点的点。标准glVertex用于将它们发送到GPU 可以使用自己的函数绘制顶点。如果您向 gluTessC

如何准确地为臀肌多边形提供纹理坐标和绑定纹理?
谢谢

我不知道我是否正确地理解了你。纹理在中有很好的描述。 他们在书中使用了过量,所以你应该在例子中找到答案

简而言之:在调用glVertex(如果不使用VBO)之前调用glTexCoord2f(u,v),其中u,v是纹理坐标

编辑: 对不起,现在我明白问题了

我从未使用过tesselators,但也许我能帮上忙:-)

细分器仅查找应创建新顶点的点。标准glVertex用于将它们发送到GPU

可以使用自己的函数绘制顶点。如果您向

gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid (*) ()) &vertexCallback); 
然后,每次创建新顶点时都会调用函数。你也可以使用

gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid (*) ()) &combineCallback);
向类似顶点的法线、颜色、纹理坐标添加一些信息

参见示例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;
}
/*init()的不同部分*/
臀背肌(tobj,GLU_TESS_顶点,
(GLvoid(*)和vertexCallback);
臀肌后退(tobj,GLU_TESS_BEGIN,
(GLvoid(*)和beginCallback);
臀背肌(tobj、GLU_TESS_END、,
(GLvoid(*)和endCallback);
臀肌回缩(tobj,GLU_-TESS_错误,
(GLvoid(*)和errorCallback);
臀背肌(tobj、GLU_-TESS_联合收割机、,
(GLvoid(*)和combineCallback);
/*由这些调用注册的新回调例程*/
void vertexCallback(GLvoid*顶点)
{
常量GLdouble*指针;
指针=(GLdouble*)顶点;
glColor3dv(指针+3);
glVertex3dv(顶点);
}
void combineCallback(GLdouble coords[3],
GLdouble*顶点_数据[4],
GLfloat重量[4],GLdouble**dataOut)
{
GLdouble*顶点;
int i;
顶点=(GLdouble*)malloc(6*sizeof(GLdouble));
顶点[0]=坐标[0];
顶点[1]=坐标[1];
顶点[2]=坐标[2];
对于(i=3;i<7;i++)
顶点[i]=权重[0]*顶点_数据[0][i]
+权重[1]*顶点_数据[1][i]
+权重[2]*顶点_数据[2][i]
+权重[3]*顶点_数据[3][i];
*数据输出=顶点;
}
像往常一样绑定纹理就足够了——在使用tesselators绘制之前进行绑定


HTH

细分器应根据其派生的顶点插值纹理坐标。另一种方法是使用自动纹理坐标生成,如果这种方法适用于这种情况

但是当你使用臀大肌时,你不能在每个顶点之前打电话,因此我的问题