一、如何得到纹理坐标?
(1)自己指定纹理坐标
(2)模型文件中带有纹理坐标
a.如pikaqiu.obj中有纹理坐标
![3ce1da5b749be324bd14391d0c1676c8.png](https://i-blog.csdnimg.cn/blog_migrate/1f2db43adb3bab2b35ac597cfef67189.jpeg)
上面是用sublime打开一个obj文件的文本显示
b.如glut提供的基本模型都自带纹理坐标
(3)OpenGL可自动生成纹理坐标
二、投影式纹理映射(projective texture mapping)
(1)投影式纹理映射从投影点出发,将二维纹理投到三维物体表面。(如同从放映机中投影出的画面一样)
![c8a209cdddc09b17986d306909118866.png](https://i-blog.csdnimg.cn/blog_migrate/fcf8aa9cf12b3b3e4d3278e5a5ac8900.png)
![45c41c28d3f884b617593cb05a2a911e.png](https://i-blog.csdnimg.cn/blog_migrate/080adf96de7548881325eaa2a76bf814.png)
三、OpenGL自动生成纹理坐标
五种方式
![85a94b5f59f2ae2ae609a946ce4f0800.png](https://i-blog.csdnimg.cn/blog_migrate/1a5ef31abdc2cf7308795aa892b0d881.png)
四、GL_OBJECT_LINEAR
(1)设置三维空间中的一个平面
(2) 计算当前顶点与该平面的距离
(3) 以此距离作为纹理坐标。
![f1cc81438f8ee5c5f7ccbb845be38e7b.png](https://i-blog.csdnimg.cn/blog_migrate/4d336ee9df56dd3773cdf7415b8555b1.png)
如果是二维纹理,则可为s和t分别设置一个平面;
![bd8685c6f8c43eaa4c937a384252d4f1.png](https://i-blog.csdnimg.cn/blog_migrate/ea1aea5f4b748d811ae4edd000d5dc53.png)
三维空间中平面的方程
p1*x + p2*y + p3*z + p4 = 0
三维空间中顶点到平面的距离
d = p1*x + p2 *y + p3*z + p4
GL_OBJECT_LINEAR中的纹理坐标计算;
g = p1*x + p2 *y + p3*z + p4*w
五、GL_OBJECT_LINEAR与GL_EYE_LINEAR
GL_OBJECT_LINEAR是在物体局部坐标系的平面,保持与物体的相对位置关系不变。
GL_EYE_LINEAR则是当前时点坐标系中的平面。当物体变换时,该平面与物体的相对位置会发生变化。
![8c41d5dd16592e975613df13552ba4f6.png](https://i-blog.csdnimg.cn/blog_migrate/8b86cad777befb08039e612f7464e339.png)
六、操作步骤
步骤一、指定坐标生成模式
void glTexGenni(GLenum coord,GLenum pname,GLint param);
coord:GL_S,GL_T,GL_R,or GL_Q
pname:必须是GL_TEXTURE_GEN_MODE
param:GL_OBJECT_LINEAR,GL_EYE_LINEAR,GL_SPHERE_MAP,GL_REFLECTION_MAP,GL_NORMAL_MAP,GL_REFLECTION_MAP,GL_NORMAL_MAP
注意区分:(x,y,z,w)、(s,t,r,q)、(u,v,w)
步骤二:指定参考平面的参数
void glTexGenfv(GLenum coord,GLenum pname,const GLfloat *params);
coord:GL_S,GL_T,GL_R,or GL_Q
pname:GL_OBJECT_PLANE,GL_EYE_PANE
param:平面的四个参数p1,p2,p3,p4
步骤三
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);
七、OpenGL自动生成纹理坐标
![54cc01d17d9f16c0e3c61b7e194c1c3f.png](https://i-blog.csdnimg.cn/blog_migrate/c63cf140fda48ea0f26b510c6b6c35f0.png)