我正在使用点光源实现延迟照明。我的灯光渲染方法如下
Take an Unit Sphere[S]
Center=(0,0,0)
Radius=1 unit
我正在渲染4个点光源,每个点光源的位置和影响力都不同
Point Light 1
Position[P]==(-5f,0.4f,-6f)
Radius_Of_Influence[R]=1.5f
Point Light 2
Position[P]==(5f,0.4f,-6f)
Radius_Of_Influence[R]=2.5f
Point Light 3
Position[P]==(-5f,0.4f,6f)
Radius_Of_Influence[R]=0.8f
Point Light 4
Position[P]==(-5f,0.4f,6f)
Radius_Of_Influence[R]=0.7f
现在我有一个Matrix4f对象,每个光源
for(PointLight light:lights)
{
translate(light.position(),modelMatrix);/*Translate the matrix with position*/
scale(light.radius(),modelMatrix);/*Scale the matrix with radius of influence*/
render_sphere();
}
这是转换矩阵的方法
public void translate(float x,float y,float z)
{
translation.negate(); /*Undo the previous translation*/
Matrix4f.translate(translation.toVector(temp),modelMatrix,modelMatrix);
translation.set(x,y,z);/*translate with new values*/
Matrix4f.translate(translation.toVector(temp),modelMatrix,modelMatrix);
}
这是缩放矩阵的方法
public void scale(float x,float y,float z)
{
scale.set(1/scale.x,1/scale.y,1/scale.z);/*undo previous scaling*/
Matrix4f.scale(scale,modelMatrix,modelMatrix);
scale.set(x,y,z);/*apply new scale*/
Matrix4f.scale(scale,modelMatrix,modelMatrix);
}
每个方法都可以正常工作,但是当我一起调用它们时 翻译和缩放 光源位置无限增加
这是每个帧中每个光源的模型矩阵
2.899367 0.0 0.0 -5.0
0.0 2.899367 0.0 0.4
0.0 0.0 2.899367 -6.0
0.0 0.0 0.0 1.0
2.899367 0.0 0.0 23.993671
0.0 2.899367 0.0 0.39999998
0.0 0.0 2.899367 -6.0
0.0 0.0 0.0 1.0
3.6717935 0.0 0.0 -5.0
0.0 3.6717935 0.0 0.39999998
0.0 0.0 3.6717935 22.993671
0.0 0.0 0.0 1.0
4.380832 0.0 0.0 31.717934
0.0 4.380832 0.0 0.39999998
0.0 0.0 4.380832 22.993671
0.0 0.0 0.0 1.0
2.899367 0.0 0.0 -12.090389
0.0 2.899367 0.0 0.39999998
0.0 0.0 2.899367 -20.81465
0.0 0.0 0.0 1.0
4.380832 0.0 0.0 -1549.4392
0.0 4.380832 0.0 0.39999998
0.0 0.0 4.380832 -3280.6797
0.0 0.0 0.0 1.0
2.899367 0.0 0.0 -1593.2476
0.0 2.899367 0.0 0.39999998
0.0 0.0 2.899367 -3324.488
0.0 0.0 0.0 1.0
2.899367 0.0 0.0 -1564.2539
0.0 2.899367 0.0 0.39999998
0.0 0.0 2.899367 -3324.488
0.0 0.0 0.0 1.0
3.6717935 0.0 0.0 -1593.2476
0.0 3.6717935 0.0 0.39999998
0.0 0.0 3.6717935 -3295.4944
0.0 0.0 0.0 1.0
4.380832 0.0 0.0 -1556.5295
0.0 4.380832 0.0 0.39999998
0.0 0.0 4.380832 -3295.4944
0.0 0.0 0.0 1.0
2.899367 0.0 0.0 -1600.3379
0.0 2.899367 0.0 0.39999998
0.0 0.0 2.899367 -3339.3027
0.0 0.0 0.0 1.0
最右列是翻译向量,其值变化很快。
如果我为每个光源使用单独的模型矩阵,它可以正常工作,但我想节省内存并仅对一个Matrix对象执行操作。
想法是撤消先前帧的平移和缩放,并应用新的变换
关于如何在一个矩阵上执行此操作的任何想法?旋转也必须保留