Esempio n. 1
0
static void	print_kdtree(t_kdtree_child const *node, uint32_t offset, char prefix)
{
	if (node->type == KDTREE_SPLIT)
	{
		print_kdtree(node->v.split.left, offset + 4, '/');
		ft_logf(LOG_DEBUG, "%*c %c|", offset, prefix, "xyz"[node->v.split.d]);
		print_kdtree(node->v.split.right, offset + 4, '\\');
		return ;
	}
	ft_logf(LOG_DEBUG, "%*c= %d node(s)", offset, prefix, node->v.leaf.length);
}
Esempio n. 2
0
void print_kdtree(kdtree_t *tree, int depth)
{
  if (tree == NULL)
    return;

  int i;
  for (i = 0; i < depth; i++)
    printf("  ");
  printf("node %d {d=%d, axis=%d, x=(%.2f", tree->i, tree->d, tree->axis, tree->x[0]);
  for (i = 1; i < tree->d; i++)
    printf(", %.2f", tree->x[i]);
  printf("), bbox_min = (%.2f", tree->bbox_min[0]);
  for (i = 1; i < tree->d; i++)
    printf(", %.2f", tree->bbox_min[i]);
  printf("), bbox_max = (%.2f", tree->bbox_max[0]);
  for (i = 1; i < tree->d; i++)
    printf(", %.2f", tree->bbox_max[i]);
  printf(")}\n");

  print_kdtree(tree->left, depth+1);
  print_kdtree(tree->right, depth+1);
}
Esempio n. 3
0
static bool	parse_scene(t_xml_parser *xml, t_scene *dst)
{
	t_parse_scene		scene;

	scene = (t_parse_scene){DSTR0(), KDTREE_BUILDER(3),
		VECTOR(t_light), VECTOR(t_camera), DEF_SKY_COLOR};
	if (!ft_xml_next(xml) || (xml->token == XML_TOKEN_PARAM
			&& !parse_xml_params(xml, &g_scene_params, &scene)))
		return (false);
	while (true)
	{
		ASSERT(xml->token == XML_TOKEN_START);
		if (!parse_scene_child(xml, &scene))
		{
			ft_dstrclear(&scene.name);
			ft_vclear(&scene.lights);
			ft_vclear(&scene.cameras);
			kdtree_builder_destroy(&scene.kdtree);
			return (false);
		}
		if (!ft_xml_next(xml))
			break ;
	}
	if (xml->token != XML_TOKEN_END)
		return (ft_xml_error(xml, SUBC("Unexpected EOF")));
	if (scene.cameras.length == 0)
		ft_vpush(&scene.cameras, &DEF_CAMERA, 1);
	*dst = (t_scene){
		DSTR_SUB(scene.name),
		kdtree_build(&scene.kdtree),
		scene.lights,
		scene.cameras,
		scene.sky_color
	};
	kdtree_builder_destroy(&scene.kdtree);
	print_kdtree(dst->objs.root, 1, '.');
	ft_logf(LOG_VERBOSE, "Scene '%ts' loaded: %u object(s), %u light(s), "
		"%u camera(s)", dst->name, dst->objs.length,
		dst->lights.length, dst->cameras.length);
	return (true);
}