Пример #1
0
def sph_cart(lon, lat, scale=1):
    "spherical to cartesian mapping"
    lon = d2r(lon)
    lat = d2r(lat)

    rsl = m.cos(lat)
    y = m.sin(lat)
    x = rsl * m.cos(lon)
    z = rsl * m.sin(lon)

    return np.array([scale * x, scale * y, scale * z, 1])
Пример #2
0
    def __init__(self, vershade, fragshade):
        print "starting tree init ..."
        self.vershade = vershade
        self.fragshade = fragshade
        self.program = BoarGL.glbase.ProgBundle(self.vershade, self.fragshade)
        nlights = 30
        self.lights = [[0, 0, 0, 1]] * 30
        mul = 10
        div = 1.0 / mul
        top = 360 * mul
        theta = np.array([d2r(t) for t in range(0, top, 5) + [top]])
        r = (div * theta) / (2 * m.pi)
        r2 = (div * theta) / (2.2 * m.pi)

        # inside and outside
        x = r * np.cos(theta)
        y = r * np.sin(theta)
        height = 4
        z1 = height - (height * (theta / (2 * m.pi * mul)))
        z2 = height - ((height - 0.2) * (theta / (2 * m.pi * mul)))

        self.lights = zip(x[bulb_inds], y[bulb_inds], (z1[bulb_inds] + z2[bulb_inds]) / 2, [1 for i in bulb_inds])

        verts_f = []
        verts_b = []
        uvs = []
        norms_f = []
        norms_b = []
        cols_f = []
        cols_b = []

        col2 = [0, 1, 0, 1]
        col1 = [0, 0.5, 0, 1]
        j = 0
        # light_p = len(theta) // nlights
        for i, angle in enumerate(theta):

            # generate positions for nlights christmas lights
            # if i % light_p == 0:
            #    if(j < nlights):
            #        self.lights[j] = A([x[i], (y1[i]+y2[i])/2, z[i], 1])
            #       #print "setting light %d position: %s" % (j, str(self.lights[j]))
            #   j += 1
            # print "i: %d, j: %d nlights: %d, angles: %d" % (i, j, nlights, len(theta))

            p1 = A([x[i], y[i], z1[i], 1])
            p2 = A([x[i], y[i], z2[i], 1])

            fnorm = A([np.cos(angle), np.sin(angle), 0])
            verts_f = verts_f + [p1, p2]
            norms_f = norms_f + [-1 * fnorm, -1 * fnorm]
            verts_b = verts_b + [p2, p1]
            norms_b = norms_b + [1 * fnorm, 1 * fnorm]
            if angle == 0:
                uvs = uvs + [(0, 0), (0, 1)]
            else:
                uvs = uvs + [(i / len(theta), 0), (i / len(theta), 1)]
            cols_f = cols_f + [col1, col1]
            cols_b = cols_b + [col2, col2]

        # print "about to bundle"
        vb1 = BoarGL.gldraw.VertexBundle(verts_f, norms_f, cols_f, uvs)
        vb2 = BoarGL.gldraw.VertexBundle(verts_b, norms_b, cols_b, uvs)
        # print "about to glue"
        self.vb = BoarGL.gldraw.VertexBundle.glue_strips(vb1, vb2)
        # print "about to bufferize"
        self.vb.bufferize()

        # print "have %d faces, and %d indices." % (len(self.vb.cooked_faces), len(self.vb.cooked_ind))
        # print "about to copy buffer"
        self.vao = BoarGL.glbase.copyBuffer(self.vb.cooked_faces, self.vb.cooked_ind)
        # print "copied buffer"

        rmat = np.eye(4)
        self.modvec = rmat
        self.program.unif["u_model"] = self.modvec