Example #1
0
File: volume.c Project: clyde7/iv
void volume_render_brick(GLuint const geometry, Matrix const * inverse_modelview, Brick const * const brick)
{
    Vector size = box_size(brick->box);
    Vector tex_size = box_size(brick->tex);
    GLfloat const texture_matrix[4][4] =
    {
        {tex_size.x / size.x, 0, 0, 0},
        {0, tex_size.y / size.y, 0, 0},
        {0, 0, tex_size.z / size.z, 0},
        {brick->tex.min.x, brick->tex.min.y, brick->tex.min.z, 1}
    };
    GLdouble const clip_planes[6][4] =
    {
        { 1, 0, 0, -brick->box.min.x},
        {-1, 0, 0,  brick->box.max.x},
        { 0, 1, 0, -brick->box.min.y},
        { 0,-1, 0,  brick->box.max.y},
        { 0, 0, 1, -brick->box.min.z},
        { 0, 0,-1,  brick->box.max.z}
    };

    glBindTexture(GL_TEXTURE_3D, brick->texture);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_BASE_LEVEL, brick->level);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAX_LEVEL, brick->level);

    glMatrixMode(GL_TEXTURE);
    glLoadMatrixf(&texture_matrix[0][0]);
    glTranslatef(-brick->box.min.x, -brick->box.min.y, -brick->box.min.z); // move into texture_matrix
    glMultMatrixf((GLfloat const *) inverse_modelview);
    glMatrixMode(GL_MODELVIEW);

    glClipPlane(GL_CLIP_PLANE0, clip_planes[0]);
    glClipPlane(GL_CLIP_PLANE1, clip_planes[1]);
    glClipPlane(GL_CLIP_PLANE2, clip_planes[2]);
    glClipPlane(GL_CLIP_PLANE3, clip_planes[3]);
    glClipPlane(GL_CLIP_PLANE4, clip_planes[4]);
    glClipPlane(GL_CLIP_PLANE5, clip_planes[5]);

    glCallList(geometry);
}   
Example #2
0
void gspline_update(t_gspline *x)
{
	short oh,ow,nh,nw;
	
	ow = x->x_boxwidth;
	oh = x->x_boxheight;
	nw = x->x_box.z_box.b_rect.right-x->x_box.z_box.b_rect.left;
	nh = x->x_box.z_box.b_rect.bottom-x->x_box.z_box.b_rect.top;
	
	if(nh != oh || nw != ow) {
		nw = MIN(MAX(nw, MINWIDTH), MAXWIDTH); // constrain to min and max size
		nh = MIN(MAX(nh, MINHEIGHT), MAXHEIGHT);
		box_size(&x->x_box.z_box, nw, nh);
		x->x_boxwidth = nw;
		x->x_boxheight = nh;
	}
	gspline_redraw(x);
}