首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >纹理投影测试

纹理投影测试

作者头像
逍遥剑客
发布2019-02-20 12:52:28
6360
发布2019-02-20 12:52:28
举报

对于不规则的几何体的纹理坐标, 差不多都是通过投影来算的吧

冒似有个"球状纹理"投影到一个物体上, 就像CubeMap

还有一种"圆柱形纹理", 对物体一圈进行投影

GPU Gems3里有个不规则地形(X,Y,Z三个方向上都有面), 这时就没法简单地用X,Z坐标来计算UV了

对于基于高度图的地形来说, 如果Y方向很高的话, 纹理会有明显的拉伸现象

这时就可以换个方向进行投影, 用于制作悬崖之类的复杂地形

float4x4 matViewProjection;
float scaler;

struct VS_INPUT 
{
   float4 Position : POSITION0;
   float3 Normal   : NORMAL0;
};

struct VS_OUTPUT 
{
   float4 Position : POSITION0;
   float2 Texcoord : TEXCOORD0;
};

float2 GetCliffUV(float3 pos, float3 normal)
{
   if (abs(normal.x) < abs(normal.z))
   {
      return float2(pos.x, pos.y);
   }
   else
   {
      return float2(pos.z, pos.y);
   }
}

VS_OUTPUT vs_main( VS_INPUT Input )
{
   VS_OUTPUT Output;

   Output.Position = mul( Input.Position, matViewProjection );
   Output.Texcoord = GetCliffUV(Input.Position, Input.Normal) * scaler;

   return( Output );
}

不过有个接缝问题该怎么处理呢?

用两层进行过渡吗?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2008年10月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档