[url]http://chengkehan.wordpress.com/2010/09/13/%E6%B7%B1%E5%BA%A6%E6%8E%92%E5%BA%8F/[/url]
对于深度排序,网上有很多的做法,按照y轴排序算法简单,但是受限制太多,还有很多复杂的算法,需要深入理解才能看明白。
最近,想到一种新的深度排序方法,使用的是向量,思路很简单,很容易理解,而且适用于几乎所有情况(只要不要自己给自己找麻烦)。
我们在地图编辑器中,设置建筑、障碍物的时候,都会规划出建筑或者障碍物占用地面的范围。这样我们就能找到占用范围的最左点和最右点。从左到右连接着两个点(这里要从左到右,如果反向的话,那么后面的正负也会调换)。
[img]http://dl.iteye.com/upload/attachment/415361/d6d33d5d-ef1e-3efd-aeba-adc8f3c3bd37.jpg[/img]
由此就形成一个向量。我观察到一个现象,所有在这条线后面的对象都会被这个建筑挡住,而所有在这条线前面的对象都会遮挡住建筑。
[img]http://dl.iteye.com/upload/attachment/415362/0b6b07a4-0482-3b41-8eec-b96318b2f94a.jpg[/img]
那么我们怎判断这个点在这条线的前面呢,这里就要使用向量了。
[img]http://dl.iteye.com/upload/attachment/415365/67547e81-727d-3002-9896-d399d71ed3d2.jpg[/img]
下面开始计算向量B、C的和。
[img]http://dl.iteye.com/upload/attachment/415367/da3cb483-9faf-32de-ae56-0d372a592132.jpg[/img]
那么我们就可以通过向量的点乘来算出向量A和向量B+C的夹角,B+C在A的顺时针方向,所以应该是正的(具体的值不用关心)。
运用同样的方法可以算出来在这条线后面的对象,夹角都是负数。
这样我们就可以根据正负来判断遮挡关系了。
对于深度排序,网上有很多的做法,按照y轴排序算法简单,但是受限制太多,还有很多复杂的算法,需要深入理解才能看明白。
最近,想到一种新的深度排序方法,使用的是向量,思路很简单,很容易理解,而且适用于几乎所有情况(只要不要自己给自己找麻烦)。
我们在地图编辑器中,设置建筑、障碍物的时候,都会规划出建筑或者障碍物占用地面的范围。这样我们就能找到占用范围的最左点和最右点。从左到右连接着两个点(这里要从左到右,如果反向的话,那么后面的正负也会调换)。
[img]http://dl.iteye.com/upload/attachment/415361/d6d33d5d-ef1e-3efd-aeba-adc8f3c3bd37.jpg[/img]
由此就形成一个向量。我观察到一个现象,所有在这条线后面的对象都会被这个建筑挡住,而所有在这条线前面的对象都会遮挡住建筑。
[img]http://dl.iteye.com/upload/attachment/415362/0b6b07a4-0482-3b41-8eec-b96318b2f94a.jpg[/img]
那么我们怎判断这个点在这条线的前面呢,这里就要使用向量了。
[img]http://dl.iteye.com/upload/attachment/415365/67547e81-727d-3002-9896-d399d71ed3d2.jpg[/img]
下面开始计算向量B、C的和。
[img]http://dl.iteye.com/upload/attachment/415367/da3cb483-9faf-32de-ae56-0d372a592132.jpg[/img]
那么我们就可以通过向量的点乘来算出向量A和向量B+C的夹角,B+C在A的顺时针方向,所以应该是正的(具体的值不用关心)。
运用同样的方法可以算出来在这条线后面的对象,夹角都是负数。
这样我们就可以根据正负来判断遮挡关系了。