Ejemplo n.º 1
0
const char*
create_sphere_node(const char *parent_name, const char *child_name, scalar_t resolution ) 
{
    scene_node_t *node;
    char *msg;

    msg = create_scene_node(parent_name, child_name, &node);
    if ( msg != NULL ) {
        return msg;
    } 

    node->geom = Sphere;
    node->param.sphere.radius = 1.0;

#ifdef __APPLE__
    node->param.sphere.resolution = resolution;
#else
    node->param.sphere.divisions = min( 
	MAX_SPHERE_DIVISIONS, max( 
	    MIN_SPHERE_DIVISIONS, 
	    ROUND_TO_NEAREST( getparam_tux_sphere_divisions() * resolution ) 
	    ) );
#endif

    return NULL;
}
Ejemplo n.º 2
0
void traverse_dag_sub( scene_node_t *node, material_t *mat )
{
    scene_node_t *child;
    glm::mat4 matrix;
    int i,j;
    
    check_assertion( node != NULL, "node is NULL" );
    hier_push_mat();
    
    for( i = 0; i < 4; i++ )
    {
        for( j = 0; j < 4; j++ )
            matrix[i][j] = node->trans[i][j];
    }
    hier_mult_mat(matrix);
    
    if ( node->mat != NULL ) {
        mat = node->mat;
    }
    
    if ( node->geom == Sphere ) {
        
        //FIXME
        draw_sphere(std::min(MAX_SPHERE_DIVISIONS, std::max(MIN_SPHERE_DIVISIONS, ROUND_TO_NEAREST(node->param.sphere.divisions))), mat);
    }
    
    child = node->child;
    while (child != NULL) {
        traverse_dag_sub( child, mat );
        child = child->next;
    }
    
    hier_pop_mat();
}
Ejemplo n.º 3
0
void
update_scene_nodes()
{
	//update sphere divisions for all nodes	
	std::map<std::string, SceneNode *>::iterator it;
	for(it=nodes.begin(); it!=nodes.end();it++){	
		(*it).second->sphere.divisions = MIN( 
			MAX_SPHERE_DIVISIONS, MAX( 
	    	MIN_SPHERE_DIVISIONS, 
	    	ROUND_TO_NEAREST(PPConfig.getInt("tux_sphere_divisions") * (*it).second->sphere.resolution) 
	    	));	
	}
}
Ejemplo n.º 4
0
bool CCharShape::VisibleNode (size_t node_name, float level) {
	TCharNode *node = GetNode(node_name);
	if (node == NULL) return false;

	node->visible = (level > 0);

	if (node->visible) {
		node->divisions =
		    clamp (MIN_SPHERE_DIV, ROUND_TO_NEAREST (param.tux_sphere_divisions * level / 10), MAX_SPHERE_DIV);
		node->radius = 1.0;
	}
	if (newActions && useActions) AddAction (node_name, 5, NullVec3, level);
	return true;
}
Ejemplo n.º 5
0
bool CCharShape::VisibleNode (int node_name, float level) {
    TCharNode *node;
    if (GetNode (node_name, &node) == false) return false;

	node->visible = (level > 0);

	if (node->visible) {
    	node->divisions = 
			MIN (MAX_SPHERE_DIV, MAX (MIN_SPHERE_DIV, 
			ROUND_TO_NEAREST (param.tux_sphere_divisions * level / 10)));
	    node->radius = 1.0;
	} 
	if (newActions && useActions) AddAction (node_name, 5, NullVec, level);
	return true;
}
Ejemplo n.º 6
0
void
create_sphere_node(const std::string& parent_name, const std::string& child_name, float resolution ) 
{
    SceneNode *node;

    create_scene_node(parent_name, child_name, &node);

    node->isSphere = true;
    node->sphere.radius = 1.0;
    node->sphere.divisions = MIN( 
	MAX_SPHERE_DIVISIONS, MAX( 
	    MIN_SPHERE_DIVISIONS, 
	    ROUND_TO_NEAREST(PPConfig.getInt("tux_sphere_divisions") * resolution ) 
	    ) );
	node->sphere.resolution = resolution;
}