矩阵旋转影响光源

时间:2013-08-17 07:44:45

标签: javascript camera webgl lighting

我已经沉浸了好几天的实验和谷歌搜索,试图解决这个问题,而且我要么太深,不能理解我被告知的内容,要么没有用Google搜索正确的条款。

我有一个系统设置,可以将对象渲染到3D空间,还有一个“Camera”的实现。我现在正在尝试添加一个光源,并遇到了一个非常令人沮丧的问题。

“相机”实际上是在呈现任何特定项目之前应用的mvMatrix的旋转和平移。

如果我向我的对象添加逻辑,使其在自己的轴上旋转,则光线会正确地保持放置状态,并在物体面向光源时点亮对象上的各个面。但是,如果我移动相机,光源会相对于相机“粘住”,这不是我想要的。

解决此问题的一些尝试是:

  • 在移动和旋转相机之前定位灯,
  • 移动和旋转相机后定位灯,
  • 移动后和旋转相机前定位灯,
  • 在渲染完所有内容后,在弹出mvMatrix之后定位灯光,
  • 在渲染完所有内容之后以及弹出mvMatrix之前定位灯光,
  • 将灯光定位在程序的开头,而不是在渲染循环期间,
  • 当定位灯光时,将其位置vec3乘以mvMatrix(这让我非常接近,但似乎并非总是将灯光定位在0,0,0)
  • 定位灯光时,将其位置vec3乘以mvMatrix的倒数(非常奇怪的结果)。

这让我相信我需要通过mvMatrix旋转来旋转,但忽略它的翻译(我不知道为什么,我想这是我唯一能想到的,我没有尝试过),但我可以是错的,因为我找不到一个简单的方法来做到这一点。

无论如何,我确定你想看到这些代码,我把它全部放在一个公共的github回购中(PR欢迎,哈!),这里是我希望你会感兴趣的部分:

我知道prepareLighting已经被黑了,我只是想先了解它,然后再创建一个Light对象。

如果你想看到它的实际效果,请看这里: http://www.bracketbrotherhood.com/webgl-engine

我真的很感激一些帮助,因为我真的很困难。

顺便说一句,这是我第一次尝试整齐排序的JS,所以如果你对如何更好地组织代码库有任何评论我也很乐意听到,尽管我应该强调这绝对是对我来说,现在关心的不仅仅是修理我的照明问题!

对不起文字之墙......非常感谢你!

菲尔,

1 个答案:

答案 0 :(得分:0)

我复制了以下照片代码:http://learningwebgl.com/lessons/lesson07/index.html

这里的照明代码有一个对vec3.normalize的调用,虽然我不是100%肯定这是做什么的(我猜它正在把它变成正常......)删除它解决了问题:)

为清楚起见,这是我之前和之后:

var alp = vec3.create();
vec3.normalize([17,0,0], alp);

将此更改为:

var alp = vec3.create([17,0,0]);

修正了这个问题,万岁!

相关问题