Dear PDL`s,
thank for your help.
Vividsnow`s code is working perfect. So first step is done.
Now I`m trying to generate a subplot with a few more sine wave signals
to display.
Unfortunately I could not find out how to update the data in the opengl
vertex buffer to display different signals for each plot window.
I did something like
$ogl_data->assign_data(0,$vert);
or
$ogl_data->assign_data(0,$vert->get_dataref);
but the plots showed only the first signal
So how can I update the opengl vertex buffer with new data?
On 19.01.2013 17:04, David Mertens wrote:
Frank -
Did these posts answer your questions? I did something like this, I
think, a number of years ago and I can look through my old code to
find it if you would like more help.
David
@David: Yes, please other code and examples will help. It may end up in
some PP code like Craig suggested.
My question is related to visualize time series data from MEG and EEG
recordings with PDL in a very fast way.
(~ 300 channels , ~20 minutes, 1kHz samplingrate, float )
best regards
Frank
On Thu, Jan 17, 2013 at 8:46 AM, Craig DeForest
<[email protected] <mailto:[email protected]>> wrote:
vividsnow's answer is concise and great, but I'll expand a little
bit. You can access the PDL data
via "get_dataref", which returns a scalar ref whose scalar
contains the data itself. The data are in
whatever order they happen to be in, which may (or may not) be the
usual first-dimensions-fastest order.
(freshly copy()'ed PDLs are guaranteed to be in that order). If
you want more control than that I suggest
dropping down to PP or C with PDL::Inline or with XS -- then you
can access the PDL data directly from compiled C.
On Jan 17, 2013, at 3:58 AM, Frank Boers <[email protected]
<mailto:[email protected]>> wrote:
> Dear PDLs,
>
> how can I copy piddels direct to an opengl vertex buffer without
> converting the piddel to a perl array?
> Please have a look to the example, line 97- 98
>
> best regards
> Frank
>
> #!/usr/bin/perl -w
>
> use strict;
> use OpenGL qw(:all);
>
> use PDL;
>
> my $pending = 0;
> my $t = pdl(sequence(1000) );
> my $data = pdl( 10 * sin( $t * 10 * 6.28) )->float;
>
> #---------------------------------------------------------#
> #---- setWindow -------------------------#
> #---------------------------------------------------------#
> sub setWindow{
> my ($l,$r,$b,$t) = @_;
> glMatrixMode(GL_PROJECTION);
> glLoadIdentity();
> gluOrtho2D($l,$r,$b,$t);
> } # end of setWindow
>
> #---------------------------------------------------------#
> #---- setViewport -------------------------#
> #---------------------------------------------------------#
> sub setViewport{
> my ($l,$r,$b,$t) = @_;
> glViewport($l,$b,$r-$l,$t-$b);
> }# end of setViewport
>
> #---------------------------------------------------------#
> #---- myReshape -------------------------#
> #---------------------------------------------------------#
> sub myReshape{
>
> my($w,$h) = @_;
>
> return if ( $pending );
>
> glViewport(0,0,$w,$h);
> glMatrixMode(GL_PROJECTION);
> glLoadIdentity();
> gluOrtho2D(0.0,$w,0.0,$h);
>
> } # end of reshape
>
> #---------------------------------------------------------#
> #---- update_plot -------------------------#
> #---------------------------------------------------------#
> sub update_plot{
> my ($x,$y) = @_;
>
> return if ( $pending );
> $pending = 1;
>
> #---
> my $v = pdl( zeroes(2,$data->dim(0) ) )->float();
> my $v0 = $v->slice("(0),:");
> my $v1 = $v->slice("(1),:");
> $v0.= $t;
> my $size= $v->nelem * 4;
>
> glClear(GL_COLOR_BUFFER_BIT);
> glMatrixMode(GL_MODELVIEW);
> glLoadIdentity();
> glColor3f(0.0,0.0,1.0);
>
>
> #--- create OGL verts buffer
> glDisableClientState(GL_VERTEX_ARRAY);
>
> my $VertexObjID = glGenBuffersARB_p(1);
> glBindBufferARB(GL_ARRAY_BUFFER_ARB, $VertexObjID);
>
>
> my $verts = OpenGL::Array->new_list(GL_FLOAT,$v->list() );
> $verts->bind($VertexObjID);
> glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $verts,
GL_DYNAMIC_DRAW_ARB);
>
> glVertexPointer_p(2,$verts);
>
> glEnableClientState(GL_VERTEX_ARRAY);
>
> #--- plot
> my $w = glutGet( GLUT_WINDOW_WIDTH );
> my $h = glutGet( GLUT_WINDOW_HEIGHT );
>
> my $w0 = 0;
> my $w1 = $w-1;
>
> my $h0 = 0;
>
> setViewport($w0,$w1,$h0,$h);
> setWindow($t->min,$t->max,$data->min,$data->max );
>
> $v1.= $data;
>
> ### !!!! this is slow for large data
> $verts->assign( 0,$v->list() );
>
> glBufferSubDataARB_p(GL_ARRAY_BUFFER_ARB,0,$verts);
>
> glDrawArrays(GL_LINE_STRIP,0,$t->dim(-1)-1 );
>
> glDisableClientState(GL_VERTEX_ARRAY);
>
> glFlush();
> glutSwapBuffers();
>
> $pending = undef;
>
> } # end of update_plot
>
>
> #=== MAIN
> glClearColor(1.0,1.0,1.0,0.0);
> glColor3f(0.0,0.0,1.0);
> glLineWidth(2);
>
> glutInit();
>
> glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_ALPHA);
>
> glutInitWindowSize(300,400);
> glutInitWindowPosition(10,10);
>
> my $IDwindow = glutCreateWindow("PDL OGL TEST");
> glutDisplayFunc( sub{ update_plot(@_) } );
> glutReshapeFunc( sub{ myReshape(@_) } );
>
> glutMainLoop();
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> --
> Frank Boers
> Institute of Neuroscience and Medicine - 4
> Medical Imaging Physics
> Forschungszentrum Juelich GmbH
> 52425 Juelich
> phone: +49 - (0)2461-61-6005
> fax : +49 - (0)2461-61-2820
> email: [email protected] <mailto:[email protected]>
>
http://www.fz-juelich.de/inm/inm-4/DE/Forschung/MEG-Physik/_node.html
>
>
>
>
>
------------------------------------------------------------------------------------------------
>
------------------------------------------------------------------------------------------------
> Forschungszentrum Juelich GmbH
> 52425 Juelich
> Sitz der Gesellschaft: Juelich
> Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
> Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher
> Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender),
> Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
> Prof. Dr. Sebastian M. Schmidt
>
------------------------------------------------------------------------------------------------
>
------------------------------------------------------------------------------------------------
>
> _______________________________________________
> Perldl mailing list
> [email protected] <mailto:[email protected]>
> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
>
_______________________________________________
Perldl mailing list
[email protected] <mailto:[email protected]>
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
--
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it." -- Brian Kernighan
--
Frank Boers
Institute of Neuroscience and Medicine - 4
Medical Imaging Physics
Forschungszentrum Juelich GmbH
52425 Juelich
phone: +49 - (0)2461-61-6005
fax : +49 - (0)2461-61-2820
email: [email protected]
http://www.fz-juelich.de/inm/inm-4/DE/Forschung/MEG-Physik/_node.html
_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl