|
|
发表于 2005-10-8 10:40:00
|
显示全部楼层
Re:用Cg对任意形状的物体进行凹凸贴图
glBegin(GL_TRIANGLE_FAN);
// Set the texture coordinates for the rock texture and the normal map
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, g_vTexCoords[0][0].x, g_vTexCoords[0][0].y);
// Specify the tangent matrix vectors, one by one, for the first triangle and send them to the vertex shader
glMultiTexCoord3fARB(GL_TEXTURE1_ARB, g_TBNMatrix[0][0].x, g_TBNMatrix[0][0].y, g_TBNMatrix[0][0].z);
glMultiTexCoord3fARB(GL_TEXTURE2_ARB, g_TBNMatrix[0][1].x, g_TBNMatrix[0][1].y, g_TBNMatrix[0][1].z);
glMultiTexCoord3fARB(GL_TEXTURE3_ARB, g_TBNMatrix[0][2].x, g_TBNMatrix[0][2].y, g_TBNMatrix[0][2].z);
// Draw the bottom left vertex
glVertex3f(g_vQuad[0][0].x, g_vQuad[0][0].y, g_vQuad[0][0].z);
// ------------------------------------------------------------ //
// Set the texture coordinates for the rock texture and the normal map
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, g_vTexCoords[0][1].x, g_vTexCoords[0][1].y);
// Draw the bottom right vertex
glVertex3f(g_vQuad[0][1].x, g_vQuad[0][1].y, g_vQuad[0][1].z);
// ------------------------------------------------------------ //
// Set the texture coordinates for the rock texture and the normal map
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, g_vTexCoords[0][2].x, g_vTexCoords[0][2].y);
// Draw the top right vertex
glVertex3f(g_vQuad[0][2].x, g_vQuad[0][2].y, g_vQuad[0][2].z);
// ------------------------------------------------------------ //
// Set the texture coordinates for the rock texture and the normal map
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, g_vTexCoords[1][0].x, g_vTexCoords[1][0].y);
// Specify the tangent matrix vectors, one by one, for the second triangle and send them to the vertex shader
glMultiTexCoord3fARB(GL_TEXTURE1_ARB, g_TBNMatrix[1][0].x, g_TBNMatrix[1][0].y, g_TBNMatrix[1][0].z);
glMultiTexCoord3fARB(GL_TEXTURE2_ARB, g_TBNMatrix[1][1].x, g_TBNMatrix[1][1].y, g_TBNMatrix[1][1].z);
glMultiTexCoord3fARB(GL_TEXTURE3_ARB, g_TBNMatrix[1][2].x, g_TBNMatrix[1][2].y, g_TBNMatrix[1][2].z);
// Draw the top left vertex
glVertex3f(g_vQuad[1][0].x, g_vQuad[1][0].y, g_vQuad[1][0].z);
glEnd();
--------------------
楼主的程序太好了,以前对BumpMap感到非常神秘,现在好点了(仍然迷糊)。
上面的代码为什么是在划三角形扇时第一个和第四个顶点用了三维坐标而中间的第二三个顶点不用呢?如果假如用D3D实现的话也会用到三维纹理吗?我对D3D不太熟悉。 |
|