请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 578|回复: 1

请问龚大如何理解 VertexDisplacement 里面的法线计算? [复制链接]

Rank: 5Rank: 5

注册时间
2016-12-2
积分
91
发表于 2017-11-26 22:26:57 |显示全部楼层
请问龚大如何理解 VertexDisplacement 里面的法线计算?
在 VertexDisplacement 示例中,旗子的振幅从左至右线性增大。
比如下列代码中的 x_dir 的 z 分量的计算,是使用使用右边点的 z 值减 当前点的 z 值计算的吗?
比方说设currentAngle 等于 0,对于点(-2, 1.5,0) offset.xy 都是 0,有 z = (1+0)*0*0.2  = 0
则右边点(-1.5, 1.5, 0) 的 offset.xy = (0.5, 0),有 z = (cos(0.5) + sin(0.5)) * 0.5 * 0.2 = 0.132
而 x_dir 的 z = -sin(-2) * 0.2 = 0.18,差距比较大。
如果不同地方的振幅变化,高度差为 (cos(0.5) + sin(0.5)) * 0.2 - (1+0) * 0.2 = 0.064,差距也很大?求助龚大这个是如何计算的呢?

void VertexDisplacementVS(float4 pos                        : POSITION,
                                                                float2 texcoord0        : TEXCOORD0,
                                                                out float2 oTexcoord0        : TEXCOORD0,
                                                                out float3 oNormal                : TEXCOORD1,
                                                                out float4 oPos                        : SV_Position)
{
        pos = float4(pos.xyz * pos_extent + pos_center, 1);

        float4 v = pos;
        float2 offset = pos.xy + float2(half_length, -half_width);
        v.z = (cos(offset.x + currentAngle) + sin(offset.y + currentAngle)) * offset.x * 0.2f;

        float3 x_dir = float3(0.5f, 0, -sin(pos.x + currentAngle) * 0.2f);
        float3 y_dir = float3(0, 0.5f, cos(pos.y + currentAngle) * pos.x * 0.2f);
        float3 normal = mul(cross(x_dir, y_dir), (float3x3)modelview);

        oPos = mul(v, mvp);
        oNormal = normal;
        oTexcoord0 = texcoord0;
}

点评

江义奇  海!外直播 t.cn/RxmJTRo 禁闻视频 t.cn/RJJZmvl 从大米里,认识了镉;从咸鸭蛋里,认识了苏丹红;从火锅里,认识了福尔马林;从银耳里,认识了硫磺;从牛奶里认识了三聚氰胺..在食品中我们国家顺利完成了化学扫盲...   发表于 6 天前

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2009-3-31
积分
14463
发表于 6 天前 |显示全部楼层
随便写的

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-12-15 03:02 , Processed in 0.045922 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部