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细分器应根据其派生的顶点插值纹理坐标。另一种方法是使用自动纹理坐标生成,如果这种方法适用于这种情况 但是当你使用臀大肌时,你不能在每个顶点之前打电话,因此我的问题