首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >球向椭圆变形后法线和ShadowCoords的重新计算

球向椭圆变形后法线和ShadowCoords的重新计算
EN

Stack Overflow用户
提问于 2015-04-21 10:33:05
回答 1查看 75关注 0票数 0

我从一个正常的球体开始,我需要变形成一个椭圆形的形状。我是通过拉伸一个轴来做到这一点的,在我的代码中,这个轴就是y轴。

代码语言:javascript
运行
复制
mat4 ToOvalMat = mat4(vec4(1., 0., 0., 0.),
                      vec4(0., 1.5, 0., 0.),
                      vec4(0., 0., 1., 0.),
                      vec4(0., 0., 0., 1.));

我把它拉伸1.5乘以一个名为a的输入。它对我的意图很好,但我仍然需要想出一种很好的方法来修复法线,得到正确的阴影,因为它们仍然绑定在原始的球体上。

在谷歌上寻找答案之后,我偶然发现了GPU宝石-变形金刚,它与法线有关,但我不太理解解释的概念。雅可比矩阵似乎可以解决我的法线问题,但我不太确定,并希望得到某种帮助或反馈我的计算,因为这是很难从渲染在我给定的测试程序。

因为我在y维中拉伸,所以我有一个大小为4的正常单位矩阵,其中我只是用1.5a替换y 1。这将是我的雅可比矩阵,如果我理解正确的文本。逆,然后转置这个矩阵,然后我会用我的法线相乘。我也可以在我的ShadowMatrix上使用这个吗?

代码语言:javascript
运行
复制
Normal = (transpose(inverse(ToOvalMat)) * vec4(VertexNormal, 0.)).xyz;
Normal = normalize((ViewMatrix * WorldMatrix * vec4(Normal, 0.)).xyz);

通过这些计算,我得到了一些人工制品,它们并没有为我完全出售它的可信度,这让我觉得有些东西与我的矩阵或其他东西脱节。我完全猜到了ShadowMatrix,因为到目前为止,我还没有对它进行足够的研究,因为我一直被困在法线上。

EN

回答 1

Stack Overflow用户

发布于 2015-04-21 15:49:56

我不确定影子矩阵部分。对于法线,计算顶点着色器中的逆/转置是非常浪费的。这意味着矩阵可能是为每个顶点计算的。如果你幸运的话,这可能会被优化,但我不想指望它自己。

IMHO更干净的方法是将一个单独的法线变换矩阵传递到阴影中,并使用它来转换法线。这可以是一个3x3矩阵(请参阅我在这里的答案,以获得更多背景:安卓系统OpenGL ES 2.0 : normalMatrix应该有哪些维度?)。

然后,在CPU上自己的代码中计算逆/转置。对于非均匀标度,逆是一个标度矩阵,它包含标度因子的逆,而变换它什么也不做。以你为例:

代码语言:javascript
运行
复制
mat3 ToOvalNormalMat = mat3(vec3(1.0f, 0.0f, 0.0f),
                            vec3(0.0f, 1.0f / 1.5f, 0.0f),
                            vec3(0.0f, 0.0f, 1.0f));

有关如何计算非均匀缩放的正常矩阵的更多详细信息,请参见非均匀标度的正规矩阵

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29769702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档