纹理贴图 小结
来源:互联网 发布:极客学院java视频下载 编辑:程序博客网 时间:2024/05/16 16:57
1.之前学习的时候,对比较简单的几何体,例如立方体等贴图很容易。
步骤为:先加载纹理图片,然后在Draw()函数里面写一个绑定语句,形如: glBindTexture(GL_TEXTURE_2D, texture[1]);接着绘制图形(如:立方体),同时写明纹理坐标和立方体坐标,它们之间是一一对应的关系,这样立方体上就出现了纹理。
2.后来,学习了球体贴图。
步骤为:最开始要创建并返回一个指向g_text二次对象的指针GLUquadricObj* g_text= gluNewQuadric();接着就加载纹理图片,然后再Draw()函数里面写一个绑定语句 glBindTexture(GL_TEXTURE_2D, texture[1]);再接着就是最重要的绘制球并贴上纹理gluSphere(g_text, 1.0f, 128, 128); 这里就不需要一一写明纹理坐标和球体坐标了,也会出现纹理。
3.现在,学习了给平面圆贴图。
步骤为:这里开始的步骤和立方体中的很类似,只是对于圆柱体,我们没有现成的函数可以直接绘制,必须要组合,包括一个没有盖的圆筒和两个平面圆,要想在平面圆上显示纹理,我们似乎没有办法一个个坐标计算,也不能用球体的方法贴图。我们应该怎么做了?以下就是在画圆的时候直接把贴图绑定,然后写一个绘制封闭圆柱体的函数,最后在Draw()函数中直接调用绘制圆柱体的函数,这样,圆柱体的平面圆上就会有我们的贴图了。嘿嘿~~~
GLvoid draw_circle(const GLfloat radius,const GLuint num_vertex)
{
GLfloat vertex[4];
GLfloat texcoord[2];
const GLfloat delta_angle = 2.0*M_PI/num_vertex;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texName);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
glBegin(GL_TRIANGLE_FAN);
//draw the vertex at the center of the circle
texcoord[0] = 0.5;
texcoord[1] = 0.5;
glTexCoord2fv(texcoord);
vertex[0] = vertex[1] = vertex[2] = 0.0;
vertex[3] = 1.0;
glVertex4fv(vertex);
//draw the vertex on the contour of the circle
for(int i = 0; i < num_vertex ; i++)
{
texcoord[0] = (std::cos(delta_angle*i) + 1.0)*0.5;
texcoord[1] = (std::sin(delta_angle*i) + 1.0)*0.5;
glTexCoord2fv(texcoord);
vertex[0] = std::cos(delta_angle*i) * radius;
vertex[1] = std::sin(delta_angle*i) * radius;
vertex[2] = 0.0;
vertex[3] = 1.0;
glVertex4fv(vertex);
}
texcoord[0] = (1.0 + 1.0)*0.5;
texcoord[1] = (0.0 + 1.0)*0.5;
glTexCoord2fv(texcoord);
vertex[0] = 1.0 * radius;
vertex[1] = 0.0 * radius;
vertex[2] = 0.0;
vertex[3] = 1.0;
glVertex4fv(vertex);
glEnd();
glDisable(GL_TEXTURE_2D);
}
之前一直以为是只要在Draw()函数中绘制圆柱体的地方,绑定纹理就可以了,可是一直只有一个效果,只有底色没有上面的图案。看来对于组合的物体,不是很规则的物体,我们还是要进行坐标的一一对应。不能简单的以为绑定纹理,开启纹理就万事大吉了~~手工小车完成了。
- 纹理贴图 小结
- 纹理贴图
- 纹理贴图
- 纹理贴图
- 纹理贴图
- 纹理贴图
- 纹理贴图
- 纹理贴图
- 纹理贴图
- OpenGL纹理贴图 JPEG纹理
- OpenGL纹理贴图 JPEG纹理
- OpenGL ES纹理贴图
- DirectX3D 纹理贴图
- 简单纹理贴图
- 简单纹理贴图
- 简单纹理贴图
- GLSL 纹理贴图
- 简单纹理贴图
- 小光棍数
- “手把手教你学linux驱动开发”OK6410系列之03---LED字符设备驱动
- directshow下载及运行示例程序错误的解决方法
- 结构体---函数----形参&&返回值
- c++编译器什么时候生成默认构造函数
- 纹理贴图 小结
- 数据库操作转载
- 【Oracle入门系列】第00章_序
- 成绩处理
- ListView 中添加按钮,动态删除添加ItemView的操作
- “手把手教你学linux驱动开发”OK6410系列之01---模块编程
- JS 网站性能优化笔记
- 教你如何迅速秒杀掉:99%的海量数据处理面试题(转)
- C#中异步和多线程的区别