惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
B
Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
D
DataBreaches.Net
B
Blog RSS Feed
小众软件
小众软件
人人都是产品经理
人人都是产品经理
I
InfoQ
P
Proofpoint News Feed
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - Skyman

XML文件修改 - Skyman - 博客园 IE和FireFox中JavaScript的函数名的作用域的异同 - Skyman - 博客园 Javascript的assert() gif test CSS Sprites 周记(081124-081128) Ha, I Can Touch The Ball Anywhere 几何变换矩阵 我的3D化身(Avatar) 真人3D Avatar 3D Dirichlet Free-Form Deformation(三维Dirichlet自由变形) 图片拼接镶嵌(OpenGL实现) 模拟人生2人脸制作(转载) 脸部的黄金比例(转载) 使用WTL实现不规则窗口 最近在读《圣经》 《虚拟情人》Demo视频演示 《虚拟情人- Simone》 Demo演示 Papervision3D(Version 1.5)引擎源代码分析
UV UnWrap(UV展开)
Skyman · 2008-08-16 · via 博客园 - Skyman

如何把3D模型展开为一张2D的贴图?我们可以用Shader来实现。《GPU Gems》第16章有提及,这里复述一下:

在Vertex Shader里,使用纹理坐标UV作为顶点的屏幕位置(把[0,1]范围的纹理坐标重映射为[-1,1]范围的规范化的位置坐标)。要注意的是模型的UV映射必须要好,即在纹理上的每个点必须映射为模型上的唯一点,不能重叠。然后以3D模型每个像素的颜色来对展开的网格进行着色,就会得到展开后的2D贴图。

我用GLSL实现了一下,运行效果如下图所示:

1.3D模型:

(1)正面

(2)侧面

2.展开后的2D贴图:

 附GLSL代码:

// Vertex Shader

void main(void)
{
      vec2 pos = gl_MultiTexCoord0 * 2.0 - 1.0;
      gl_Position = gl_ModelViewProjectionMatrix * vec4(pos.x,pos.y,0.0,1.0);
 
      gl_TexCoord[0] = gl_MultiTexCoord0;
}

// Fragment Shader

uniform sampler2D  decalTex;

void main(void)
{

     gl_FragColor = texture2D(decalTex, gl_TexCoord[0].st);

}

---------------------------------------------------
Author: Skyman (吴俊)
版权所有,未经允许,不得转载
---------------------------------------------------