Javascript 矩阵旋转对光源的影响
为了解决这个问题,我花了好几天的时间进行实验和谷歌搜索,我要么太笨了,无法理解别人告诉我的内容,要么没有用谷歌搜索正确的术语 我设置了一个系统,可以将一个对象渲染到3D空间,还实现了一个“摄像头”。我现在正试图添加一个光源,遇到了一个相当令人沮丧的问题 “摄影机”实际上是在渲染任何特定项目之前应用的mvMatrix的旋转和平移 如果我向对象添加逻辑,使其在自己的轴上旋转,灯光将正确地保持不变,并在面向光源时照亮对象上的各个面。但是,如果我移动相机,光源相对于相机“粘住”,这不是我想要的 解决这一问题的一些尝试是:Javascript 矩阵旋转对光源的影响,javascript,camera,webgl,lighting,Javascript,Camera,Webgl,Lighting,为了解决这个问题,我花了好几天的时间进行实验和谷歌搜索,我要么太笨了,无法理解别人告诉我的内容,要么没有用谷歌搜索正确的术语 我设置了一个系统,可以将一个对象渲染到3D空间,还实现了一个“摄像头”。我现在正试图添加一个光源,遇到了一个相当令人沮丧的问题 “摄影机”实际上是在渲染任何特定项目之前应用的mvMatrix的旋转和平移 如果我向对象添加逻辑,使其在自己的轴上旋转,灯光将正确地保持不变,并在面向光源时照亮对象上的各个面。但是,如果我移动相机,光源相对于相机“粘住”,这不是我想要的 解决这一
- 在移动和旋转摄像机之前,请将灯放置好
- 移动和旋转相机后放置灯光
- 在移动摄像机后和旋转摄像机前,定位灯
- 渲染完所有内容并弹出mvMatrix后,定位灯光
- 渲染完所有内容后,在弹出mvMatrix之前定位灯光
- 在程序开始时放置灯光一次,而不是在渲染循环期间再次放置灯光
- 当定位灯光时,将其位置vec3乘以mvMatrix(这使我非常接近,但似乎并不总是将灯光定位在0,0,0)
- 当定位灯光时,将其位置vec3乘以mvMatrix的倒数(非常奇怪的结果)
- 主渲染循环:
- 相机的位置和旋转方法:
- 准备照明方法:
菲尔,我从以下地方复制了照明代码: 这里的照明代码调用了vec3.normalize,尽管我不能100%确定它在做什么(我想它正在将其变成一个正常的…),删除它解决了问题:) 为清楚起见,以下是我的“之前”和“之后”:
var alp = vec3.create();
vec3.normalize([17,0,0], alp);
将此更改为:
var alp = vec3.create([17,0,0]);
解决了这个问题,万岁 我应该注意的是,我也在谷歌上搜索了opengl问题,大多数解决方案都涉及使用glLight,而我在webgl中找不到相关的调用。我已经将我的对象移动到0,-5,0,并重新应用了mvMatrix的乘法,当我的灯光为0,0,0时,效果非常好。当沿着任何轴正向移动灯光时,它会稍微工作(就像它在该轴上移动到1,即灯光位置:[0,5,0]似乎会将其设置为[0,1,0]),但是负轴值似乎会被忽略!如果你想看,我已经更新了:)