コード例 #1
0
ファイル: sceneparser.go プロジェクト: Giant-Sheep/GoTracer
func parseObjects(world *scene.Scene, jsondata map[string]interface{}) {
	items := jsondata["objects"].(map[string]interface{})
	log.Println("Parsing Json Objects")
	for k, v := range items {
		if strings.Contains(k, "camera") {
			val := v.(map[string]interface{})
			world.Camera.Type = val["type"].(string)
			world.Camera.FOV = float32(val["fov"].(float64) * (2 * math.Pi / 360))
			world.Camera.Near = float32(val["near"].(float64))
			world.Camera.Far = float32(val["far"].(float64))
			// world.Camera.Position.X = float32(val["position"].([]interface{})[0].(float64))
			// world.Camera.Position.Y = float32(val["position"].([]interface{})[1].(float64))
			// world.Camera.Position.Z = float32(val["position"].([]interface{})[2].(float64))
			// Let's override the camera position and put it in a sensible position
			world.Camera.Position.X = 0
			world.Camera.Position.Y = 0
			world.Camera.Position.Z = float32((-1) * (800 / math.Tan((float64(world.Camera.FOV) / 2))))
			world.Camera.Position.W = 1
			world.Camera.Rotation = quaternion.Quaternion{X: 0, Y: 0, Z: 0, W: 1}
			delete(items, k)
		} else if strings.Contains(k, "light") {
			var light objects.Light
			val := v.(map[string]interface{})
			light.Type = val["type"].(string)
			light.Colour = util.Uint32toVec3ui8(uint32(val["color"].(float64)))
			light.Intensity = float32(val["intensity"].(float64))
			light.Direction.X = float32(val["direction"].([]interface{})[0].(float64))
			light.Direction.Y = float32(val["direction"].([]interface{})[1].(float64))
			light.Direction.Z = float32(val["direction"].([]interface{})[2].(float64))
			light.Target = val["target"].(string)
			world.Lights = append(world.Lights, light)
			delete(items, k)
		}
	}
	world.Objects = append(world.Objects, parsePhysicalObjects(world, jsondata, jsondata["objects"].(map[string]interface{}))...)
}