0

私は一種のシムシティアプリを作っています。アプリでは、ランダムな時間にイベントが発生します。ユーザーがそのイベントを拡大して詳細を表示できるようにしたい。

ズームインしないと、イベントの場所は X で示されます。ユーザーがズームインすると、イベントの詳細を確認できます。つまり、自動車事故の場合、ユーザーを拡大すると、おそらく 2 台以上の自動車が衝突し、アニメーションなどが表示されます。

ズームを機能させる方法は、ユーザーがアプリを一時停止し、マウスをイベントの場所に移動し、スクロールしてズームイン/ズームアウトできるようにすることです。

4

1 に答える 1

2

ズーム(およびパースペクティブも)を処理する3Dから2Dへの投影関数(メソッド)を使用できます。例:

class Point3D:

    def __init__(self, x = 0, y = 0, z = 0):
        self.x, self.y, self.z = float(x), float(y), float(z)

 ...

    def project(self, win_width, win_height, fov, viewer_distance, perspective):
        """ 
        Transforms this 3D point to 2D using a perspective projection. 
        """
        if perspective:
            factor = fov / (viewer_distance + self.z)
        else:
            factor = fov / viewer_distance
        x = self.x * factor + win_width / 2
        y = -self.y * factor + win_height / 2
        return Point3D(x, y, self.z)

この場合、パラメーター viewer_distance がズームに使用されます。

于 2012-10-15T20:51:27.700 に答える