Problem with bgcolor in a jsui

Jun 5, 2006 at 3:13pm

Problem with bgcolor in a jsui

Hi,

I have a problem with bgcolor in a jsui.
I want to draw a 3d aspect sphere in a jsui fader.
In order to have best result, i don’t redraw the background each time
i move the fader.
I first draw the bg in a sketch called “myskechbg” and when i update
the jsui, i just redraw it using the copypixels method.

This work great except a little problem :

I draw a plane in the bg and if the color of this plane is choosen by
arguments in the jsui, it work, but if i send the message rgb2 to my
jsui and then redraw the bg and then redraw the fader, the plane in
the background dissappears.

Can someone help me?
I am quite sure i made a mistake in my 3D code, but as i am not
really experimented with open gl, i can’t find it.

I wonder if my explications are clear enough…

The code is below.
Thanks.
Philippe OLLIVIER.

/*

*/
inlets=2;
outlets=3;
autowatch=1;
sketch.ortho3d();
var val = 0;
var vbrgb = [1.,1.,1.];
var vfrgb = [0.7,0.2,0.2];
var vrgb2 = [0.5,0.5,0.5];
var vmode = 0;
var voutline = 1;
var width = box.rect[2] – box.rect[0];
var height = box.rect[3] – box.rect[1];
var aspect = width/height;
var mysketchbg=new Sketch(width,height)
mysketchbg.ortho3d();

// process arguments
if (jsarguments.length>1)
vfrgb[0] = jsarguments[1]/255.;
if (jsarguments.length>2)
vfrgb[1] = jsarguments[2]/255.;
if (jsarguments.length>3)
vfrgb[2] = jsarguments[3]/255.;
if (jsarguments.length>4)
vbrgb[0] = jsarguments[4]/255.;
if (jsarguments.length>5)
vbrgb[1] = jsarguments[5]/255.;
if (jsarguments.length>6)
vbrgb[2] = jsarguments[6]/255.;
if (jsarguments.length>7)
vrgb2[0] = jsarguments[7]/255.;
if (jsarguments.length>8)
vrgb2[1] = jsarguments[8]/255.;
if (jsarguments.length>9)
vrgb2[2] = jsarguments[9]/255.;
if (jsarguments.length>10)
vmode = jsarguments[10];
if (jsarguments.length>11)
voutline = jsarguments[11];

draw_bg()
draw();
refresh();

function draw_bg()
{

with (mysketchbg) {

//scale everything to box size
glmatrixmode(“modelview”);
glpushmatrix();
glscale(aspect,1,1);
glenable(“line_smooth”);

// erase background
glclearcolor(vbrgb);
glclear();

sketch.shapeorient(0,0,0)
glcolor(vrgb2);
shapeslice(1,1);
moveto(0,0);
plane(0.1,0.8);

}
}

function draw()
{

with (sketch) {

// erase background
glclearcolor(vbrgb);
glclear();

//draw line
copypixels(mysketchbg,0,0);

// draw marker
glcolor(vfrgb);
moveto(0.,1.6*val-0.8); //on screen in range -0.8 to 0.8
sketch.sphere(aspect*.5)

}
}
function frgb(r,g,b)
{
vfrgb[0] = r/255.;
vfrgb[1] = g/255.;
vfrgb[2] = b/255.;
draw();
refresh();
}

function rgb2(r,g,b)
{
vrgb2[0] = r/255.;
vrgb2[1] = g/255.;
vrgb2[2] = b/255.;
draw_bg();
draw();
refresh();
}

function brgb(r,g,b)
{
vbrgb[0] = r/255.;
vbrgb[1] = g/255.;
vbrgb[2] = b/255.;
draw_bg();
draw();
refresh();
}

function mode(v)
{
vmode = v;
draw();
refresh();
}

function outline(v)
{
voutline = v;
draw();
refresh();
}

#26297
Jun 5, 2006 at 7:25pm

On Jun 5, 2006, at 8:15 AM, Philippe OLLIVIER wrote:

> I draw a plane in the bg and if the color of this plane is choosen
> by arguments in the jsui, it work, but if i send the message rgb2
> to my jsui and then redraw the bg and then redraw the fader, the
> plane in the background disappears.

In the following function, you need to pop the modelview
transformation stack. i.e. after the plane() call, you need to call

glmatrixmode(“modelview”);
glpopmatrix();

Otherwise you are scaling over and over again. With this change, the
rgb2 message seems to work fine for me.

-Joshua

#78357
Jun 5, 2006 at 7:35pm

Thanks Joshua,

Work fine also for me now.
Philippe.

#78358

You must be logged in to reply to this topic.