Changeset 850 for trunk/vizservers


Ignore:
Timestamp:
Jan 8, 2008, 10:52:26 PM (17 years ago)
Author:
vrinside
Message:

Activated Particle System.

Location:
trunk/vizservers/nanovis
Files:
2 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/vizservers/nanovis/Command.cpp

    r848 r850  
    2424
    2525#include "Command.h"
     26#include "Trace.h"
    2627
    2728#include "nanovis.h"
     
    806807                }
    807808#ifdef __TEST_CODE__
     809/*
    808810            } else if (strcmp(header, "<FET>") == 0) {
    809811                printf("FET loading...\n");
     
    817819                    return TCL_ERROR;
    818820                }
     821*/
    819822#endif
    820823            } else {
     
    18631866    //  Generate the latest frame and send it back to the client
    18641867    //
    1865     // INSOO
     1868    if (NanoVis::particleRenderer && NanoVis::particleRenderer->isActivated())
     1869    {
     1870        NanoVis::particleRenderer->advect();
     1871    }
     1872
    18661873    NanoVis::offscreen_buffer_capture();  //enable offscreen render
    18671874
    18681875    NanoVis::display();
     1876   
     1877/*
     1878    // TEST
     1879    glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
     1880    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear screen
     1881    NanoVis::cam->activate();
     1882
     1883    //glEnable(GL_COLOR_MATERIAL);
     1884    glEnable(GL_TEXTURE_RECTANGLE_NV);
     1885    //glEnable(GL_BLEND);
     1886    if (NanoVis::particleRenderer->flip)
     1887    {
     1888        glBindTexture(GL_TEXTURE_RECTANGLE_NV, NanoVis::particleRenderer->psys_tex[0]);
     1889    }
     1890    else
     1891    {
     1892        glBindTexture(GL_TEXTURE_RECTANGLE_NV, NanoVis::particleRenderer->psys_tex[1]);
     1893    }
     1894
     1895    glColor3f(1.0f, 0.0f, 0.0f);
     1896    draw_quad(1, 1, 512, 512);
     1897
     1898    glBindTexture(GL_TEXTURE_RECTANGLE_NV, 0);
     1899    glDisable(GL_TEXTURE_RECTANGLE_NV);
     1900*/
     1901
    18691902
    18701903    // INSOO
  • trunk/vizservers/nanovis/Makefile.in

    r848 r850  
    7676        NvZincBlendeVolumeShader.o \
    7777        PCASplit.o \
    78         ParticleSystem.o \
    7978        PerfQuery.o \
    8079        Plane.o \
     
    223222Texture2D.o: Texture2D.cpp Texture2D.h $(AUXSRC)
    224223Texture3D.o: Texture3D.cpp Texture3D.h $(AUXSRC)
    225 ParticleSystem.o: ParticleSystem.cpp $(AUXSRC)
    226224Renderable.o: Renderable.cpp Renderable.h
    227225Camera.o: Camera.cpp Camera.h
  • trunk/vizservers/nanovis/NvParticleAdvectionShader.cpp

    r755 r850  
    11#include <R2/R2FilePath.h>
     2#include <Trace.h>
    23#include "NvParticleAdvectionShader.h"
    34
    4 NvParticleAdvectionShader::NvParticleAdvectionShader(const Vector3& scale)
     5NvParticleAdvectionShader::NvParticleAdvectionShader()
     6: _scale(1.0f, 1.0f, 1.0f), _velocityVolumeID(0), _max(1.0f), _timeStep(0.005f)
    57{
    6     init(scale);
     8    init();
    79}
    810
     
    1113}
    1214
    13 void NvParticleAdvectionShader::init(const Vector3& scale)
     15void NvParticleAdvectionShader::init()
    1416{
    1517    R2string path = R2FilePath::getInstance()->getPath("update_pos.cg");
     18   
     19    if (path.getLength() == 0)
     20    {
     21        Trace("%s is not found\n", (const char*) path);
     22    }
     23
    1624    _cgFP= cgCreateProgramFromFile(g_context, CG_SOURCE, path,
    1725        CG_PROFILE_FP30, "main", NULL);
     26
    1827
    1928    cgGLLoadProgram(_cgFP);
    2029
    2130    _posTimestepParam  = cgGetNamedParameter(_cgFP, "timestep");
     31    _maxParam  = cgGetNamedParameter(_cgFP, "max");
    2232    _velTexParam = cgGetNamedParameter(_cgFP, "vel_tex");
    2333    _posTexParam = cgGetNamedParameter(_cgFP, "pos_tex");
    2434    _scaleParam = cgGetNamedParameter(_cgFP, "scale");
    25     // TBD..
     35
     36    // TBD.
    2637    //cgGLSetTextureParameter(_velTexParam, volume);
    27     cgGLSetParameter3f(_scaleParam, scale.x, scale.y, scale.z);
     38    //cgGLSetParameter3f(_scaleParam, scale.x, scale.y, scale.z);
     39    Trace("update_pos.cg loaded\n");
    2840}
    2941
  • trunk/vizservers/nanovis/NvParticleAdvectionShader.h

    r587 r850  
    1010    CGparameter _posTexParam;
    1111    CGparameter _scaleParam;
     12    CGparameter _maxParam;
     13    unsigned int _velocityVolumeID;
     14    Vector3 _scale;
     15    float _max;
     16    float _timeStep;
    1217
    1318public :
    14     NvParticleAdvectionShader(const Vector3& scale);
     19    NvParticleAdvectionShader();
    1520    ~NvParticleAdvectionShader();
    1621
    1722private :
    18     void init(const Vector3& scale);
    19 
     23    void init();
    2024public :
    2125    void bind(unsigned int texID);
    2226    void unbind();
     27    void setScale(const Vector3& scale);
     28    void setVelocityVolume(unsigned int texID, float max);
     29    void setTimeStep(float timeStep);
    2330};
     31
     32inline void NvParticleAdvectionShader::setTimeStep(float timeStep)
     33{
     34    _timeStep = timeStep;
     35}
    2436
    2537inline void NvParticleAdvectionShader::bind(unsigned int texID)
    2638{
    2739    cgGLBindProgram(_cgFP);
    28     cgGLSetParameter1f(_posTimestepParam, 0.05);
     40
     41    cgGLSetParameter1f(_posTimestepParam, _timeStep);
     42    cgGLSetParameter1f(_maxParam, _max);
     43    cgGLSetParameter3f(_scaleParam, _scale.x, _scale.y, _scale.z);
     44    cgGLSetTextureParameter(_velTexParam, _velocityVolumeID);
    2945    cgGLEnableTextureParameter(_velTexParam);
    3046    cgGLSetTextureParameter(_posTexParam, texID);
     
    4258}
    4359
     60inline void NvParticleAdvectionShader::setScale(const Vector3& scale)
     61{
     62    _scale = scale;
     63}
     64
     65inline void NvParticleAdvectionShader::setVelocityVolume(unsigned int texID, float max)
     66{
     67    _velocityVolumeID = texID;
     68    _max = max;
     69}
     70
    4471#endif //__NV_PARTICLE_ADV_SHADER_H__
  • trunk/vizservers/nanovis/NvParticleRenderer.cpp

    r755 r850  
    2121#include <R2/R2FilePath.h>
    2222#include "NvParticleRenderer.h"
    23 
    24 
    25 NvParticleRenderer::NvParticleRenderer(int w, int h, CGcontext context, NVISid volume, float scale_x,
    26                 float scale_y, float scale_z)
    27 {
    28 
    29     fprintf(stderr, "%f, %f, %f\n", scale_x, scale_y, scale_z);
    30     scale = Vector3(scale_x, scale_y, scale_z);
    31  
     23#include <Trace.h>
     24
     25
     26#define NV_32
     27
     28NvParticleRenderer::NvParticleRenderer(int w, int h, CGcontext context)
     29: scale(1, 1, 1), _activate(false)
     30{
    3231  psys_width = w;
    3332  psys_height = h;
     
    4140
    4241  m_vertex_array = new RenderVertexArray(psys_width*psys_height, 3, GL_FLOAT);
     42
    4343  assert(glGetError()==0);
    4444
     
    5151  glTexParameterf(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    5252  glTexParameterf(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     53
     54#ifdef NV_32
    5355  glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA32_NV, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, NULL);
     56#else
     57  glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, NULL);
     58#endif
    5459  glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_NV, psys_tex[0], 0);
    5560
     
    5964  glTexParameterf(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    6065  glTexParameterf(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     66#ifdef NV_32
    6167  glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA32_NV, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, NULL);
     68#else
     69  glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, NULL);
     70#endif
    6271  glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_NV, psys_tex[1], 0);
    6372
     73  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     74
    6475  CHECK_FRAMEBUFFER_STATUS();
    65   assert(glGetError()==0);
    6676
    6777  //load related shaders
     
    7888  cgGLSetParameter3f(m_scale_param, scale_x, scale_y, scale_z);
    7989  */
    80   _advectionShader = new NvParticleAdvectionShader(scale);
    81 
    82   fprintf(stderr, "init_psys\n");
     90
     91  _advectionShader = new NvParticleAdvectionShader();
     92
    8393}
    8494
     
    102112
    103113    glBindTexture(GL_TEXTURE_RECTANGLE_NV, psys_tex[0]);
     114    // I need to find out why GL_FLOAT_RGBA32_NV doesn't work
     115#ifdef NV_32
    104116    glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA32_NV, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, (float*)p);
    105  
    106     assert(glGetError()==0);
    107 
     117#else
     118    glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, (float*)p);
     119#endif
     120    glBindTexture(GL_TEXTURE_RECTANGLE_NV, 0);
     121 
    108122    flip = true;
    109123    reborn = false;
     
    115129{
    116130    glBindTexture(GL_TEXTURE_RECTANGLE_NV, psys_tex[0]);
     131
     132#ifdef NV_32
    117133    glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA32_NV, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, (float*)data);
    118  
    119     assert(glGetError()==0);
    120 
     134#else
     135    glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, psys_width, psys_height, 0, GL_RGBA, GL_FLOAT, (float*)data);#
     136#endif
     137    glBindTexture(GL_TEXTURE_RECTANGLE_NV, 0);
     138 
    121139    flip = true;
    122140    reborn = false;
     
    124142}
    125143
    126 
    127144void NvParticleRenderer::advect()
    128145{
     
    131148
    132149    glDisable(GL_BLEND);
     150    glDisable(GL_DEPTH_TEST);
    133151   
    134     if(flip){
     152    if (flip)
     153    {
    135154        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, psys_fbo[1]);
     155        glEnable(GL_TEXTURE_RECTANGLE_NV);
    136156        glBindTexture(GL_TEXTURE_RECTANGLE_NV, psys_tex[0]);
    137157
    138         glClear(GL_COLOR_BUFFER_BIT);
     158        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     159        //glClear(GL_COLOR_BUFFER_BIT);
    139160
    140161        glViewport(0, 0, psys_width, psys_height);
    141162        glMatrixMode(GL_PROJECTION);
    142163        glLoadIdentity();
    143         gluOrtho2D(0, psys_width, 0, psys_height);
     164        //gluOrtho2D(0, psys_width, 0, psys_height);
     165        glOrtho(0, psys_width, 0, psys_height, -10.0f, 10.0f);
    144166        glMatrixMode(GL_MODELVIEW);
    145167        glLoadIdentity();
     
    147169        _advectionShader->bind(psys_tex[0]);
    148170     
    149      /*
    150      cgGLBindProgram(m_pos_fprog);
    151      cgGLSetParameter1f(m_pos_timestep_param, 0.05);
    152      cgGLEnableTextureParameter(m_vel_tex_param);
    153      cgGLSetTextureParameter(m_pos_tex_param, psys_tex[0]);
    154      cgGLEnableTextureParameter(m_pos_tex_param);
    155 
    156      cgGLEnableProfile(CG_PROFILE_FP30);
    157      */
    158         draw_quad(psys_width, psys_height, psys_width, psys_height);
    159      /*
    160      cgGLDisableProfile(CG_PROFILE_FP30);
    161      cgGLDisableTextureParameter(m_vel_tex_param);
    162      cgGLDisableTextureParameter(m_pos_tex_param);
    163      */
     171     //cgGLBindProgram(m_pos_fprog);
     172     //cgGLSetParameter1f(m_pos_timestep_param, 0.05);
     173     //cgGLEnableTextureParameter(m_vel_tex_param);
     174     //cgGLSetTextureParameter(m_pos_tex_param, psys_tex[0]);
     175     //cgGLEnableTextureParameter(m_pos_tex_param);
     176     //cgGLEnableProfile(CG_PROFILE_FP30);
     177     
     178     draw_quad(psys_width, psys_height, psys_width, psys_height);
     179
     180     //cgGLDisableProfile(CG_PROFILE_FP30);
     181     //cgGLDisableTextureParameter(m_vel_tex_param);
     182     //cgGLDisableTextureParameter(m_pos_tex_param);
     183        glDisable(GL_TEXTURE_RECTANGLE_NV);
    164184   }
    165185   else
     
    168188        glBindTexture(GL_TEXTURE_RECTANGLE_NV, psys_tex[1]);
    169189
    170         glClear(GL_COLOR_BUFFER_BIT);
     190        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     191        //glClear(GL_COLOR_BUFFER_BIT);
    171192
    172193        glViewport(0, 0, psys_width, psys_height);
    173194        glMatrixMode(GL_PROJECTION);
    174195        glLoadIdentity();
    175         gluOrtho2D(0, psys_width, 0, psys_height);
     196        //gluOrtho2D(0, psys_width, 0, psys_height);
     197        glOrtho(0, psys_width, 0, psys_height, -10.0f, 10.0f);
    176198        glMatrixMode(GL_MODELVIEW);
    177199        glLoadIdentity();
     
    179201        _advectionShader->bind(psys_tex[1]);
    180202
    181      /*
    182      cgGLBindProgram(m_pos_fprog);
    183      cgGLSetParameter1f(m_pos_timestep_param, 0.05);
    184      cgGLEnableTextureParameter(m_vel_tex_param);
    185      cgGLSetTextureParameter(m_pos_tex_param, psys_tex[1]);
    186      cgGLEnableTextureParameter(m_pos_tex_param);
    187      cgGLEnableProfile(CG_PROFILE_FP30);
    188      */
     203     //cgGLBindProgram(m_pos_fprog);
     204     //cgGLSetParameter1f(m_pos_timestep_param, 0.05);
     205     //cgGLEnableTextureParameter(m_vel_tex_param);
     206     //cgGLSetTextureParameter(m_pos_tex_param, psys_tex[1]);
     207     //cgGLEnableTextureParameter(m_pos_tex_param);
     208     //cgGLEnableProfile(CG_PROFILE_FP30);
    189209
    190210        draw_quad(psys_width, psys_height, psys_width, psys_height);
    191 
    192      /*
    193      cgGLDisableProfile(CG_PROFILE_FP30);
    194      cgGLDisableTextureParameter(m_vel_tex_param);
    195      cgGLDisableTextureParameter(m_pos_tex_param);
    196      */
    197 
     211        //draw_quad(psys_width, psys_height, 1.0f, 1.0f);
     212
     213     //cgGLDisableProfile(CG_PROFILE_FP30);
     214     //cgGLDisableTextureParameter(m_vel_tex_param);
     215     //cgGLDisableTextureParameter(m_pos_tex_param);
    198216    }
    199217
    200218    _advectionShader->unbind();
    201219
    202    assert(glGetError()==0);
    203 
    204220   //soft_read_verts();
     221   
    205222   update_vertex_buffer();
    206223
     
    214231    }
    215232
    216    //fprintf(stderr, "advect: %d ", psys_frame);
     233    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
    217234}
    218235
     
    220237{
    221238    m_vertex_array->Read(psys_width, psys_height);
    222   //m_vertex_array->LoadData(vert);     //does not work??
    223     assert(glGetError()==0);
     239
     240    //m_vertex_array->LoadData(vert);     //does not work??
     241    //assert(glGetError()==0);
    224242}
    225243
     
    235253    glEnable(GL_DEPTH_TEST);
    236254
     255    glEnable(GL_COLOR_MATERIAL);
     256
    237257    glPointSize(1.2);
    238258    glColor4f(.2,.2,.8,1.);
    239259 
    240260    glPushMatrix();
     261
    241262    glScaled(1./scale.x, 1./scale.y, 1./scale.z);
    242263
     264    glEnableClientState(GL_VERTEX_ARRAY);
    243265    m_vertex_array->SetPointer(0);
    244     glEnableClientState(GL_VERTEX_ARRAY);
    245266    glDrawArrays(GL_POINTS, 0, psys_width*psys_height);
    246267    glDisableClientState(GL_VERTEX_ARRAY);
     
    249270 
    250271    glDisable(GL_DEPTH_TEST);
    251     assert(glGetError()==0);
    252 }
    253 
    254 
     272
     273    //assert(glGetError()==0);
     274}
     275
     276void NvParticleRenderer::setVectorField(unsigned int texID, float scaleX, float scaleY, float scaleZ, float max)
     277{
     278  _advectionShader->setScale(Vector3(scaleX, scaleY, scaleZ));
     279  _advectionShader->setVelocityVolume(texID, max);
     280}
  • trunk/vizservers/nanovis/NvParticleRenderer.h

    r587 r850  
    1515
    1616
    17 #ifndef _PARTICLE_SYSTEM_H_
    18 #define _PARTICLE_SYSTEM_H_
     17#ifndef _NV_PARTICLE_SYSTEM_H_
     18#define _NV_PARTICLE_SYSTEM_H_
    1919
    2020#include "GL/glew.h"
     
    4444
    4545class NvParticleRenderer : public Renderable {
     46public :
    4647    /**
    4748     * @brief frame buffer objects: two are defined, flip them as input output every step
     
    9293    Vector3 scale;
    9394
     95    bool _activate;
    9496public:
    9597    int psys_width;     //the storage of particles is implemented as a 2D array.
    9698    int psys_height;
    9799
    98     NvParticleRenderer(int w, int h, CGcontext context, NVISid vector_field,
    99                   float scalex, float scaley, float scalez);
     100    NvParticleRenderer(int w, int h, CGcontext context);
    100101    ~NvParticleRenderer();
     102    void setVectorField(unsigned int texID, float scaleX, float scaleY, float scaleZ, float max);
    101103    void initialize(Particle* data);
    102104    void advect();
     
    105107    void reset();
    106108    void render();
     109
     110    void activate();
     111    void deactivate();
     112    bool isActivated() const;
    107113};
    108114
     115inline void NvParticleRenderer::activate()
     116{
     117    _activate = true;
     118}
     119
     120inline void NvParticleRenderer::deactivate()
     121{
     122    _activate = false;
     123}
     124
     125inline bool NvParticleRenderer::isActivated() const
     126{
     127    return _activate;
     128}
    109129
    110130#endif
  • trunk/vizservers/nanovis/RenderVertexArray.cpp

    r226 r850  
    8484    glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, m_buffer);
    8585    glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT, m_nverts*m_size*m_bytes_per_component, data, m_usage);
     86    glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0);
    8687}
    8788
     
    104105    glBindBufferARB(GL_ARRAY_BUFFER, m_buffer);
    105106    //glVertexAttribPointerARB(index, m_size, m_type, GL_FALSE, 0, 0);          //doesn't work
    106     glVertexPointer(m_size, m_type, GL_FALSE, 0);
     107    glVertexPointer(m_size, m_type, 0, 0);
    107108
    108109    glBindBufferARB(GL_ARRAY_BUFFER, 0);
  • trunk/vizservers/nanovis/dxReader.cpp

    r848 r850  
    4545 */
    4646void
    47 load_vector_stream(int index, std::iostream& fin)
     47load_vector_stream(int index, std::istream& fin)
    4848{
    4949    int dummy, nx, ny, nz, nxy, npts;
     
    178178
    179179        ngen = 0;
    180         for (ngen=0; ngen < npts; ngen++) {
     180        // scale should be accounted.
     181        for (ngen=0; ngen < npts; ngen++)
     182        {
    181183            data[ngen] = (data[ngen]/(2.0*vmax) + 0.5);
    182184        }
  • trunk/vizservers/nanovis/nanovis.cpp

    r848 r850  
    3434#include "Util.h"
    3535
    36 // for debuging new functions
    37 // #include "Test.h"
    38 
    3936#include "nanovis.h"
    4037#include "RpField1D.h"
     
    9087Texture2D* NanoVis::plane[10];
    9188NvColorTableRenderer* NanoVis::color_table_renderer = 0;
     89NvParticleRenderer* NanoVis::particleRenderer = 0;
    9290graphics::RenderContext* NanoVis::renderContext = 0;
    9391
     
    183181// FLOW
    184182// TBD
     183static float lic_slice_x = 0.0f;
    185184/*
    186 static float lic_slice_x = 0.0f;
    187185static float lic_slice_y = 0.0f;
    188186static float lic_slice_z = 0.3f;
     
    463461    // Check framebuffer completeness at the end of initialization.
    464462    CHECK_FRAMEBUFFER_STATUS();
    465     assert(glGetError()==0);
     463
     464    //assert(glGetError()==0);
    466465}
    467466
     
    533532    // Check framebuffer completeness at the end of initialization.
    534533    CHECK_FRAMEBUFFER_STATUS();
    535     assert(glGetError()==0);
     534    //assert(glGetError()==0);
    536535    fprintf(stdin,"  after assert\n");
    537536}
     
    580579}
    581580
     581void NanoVis::initParticle()
     582{
     583    //random placement on a slice
     584    float* data = new float[particleRenderer->psys_width * particleRenderer->psys_height * 4];
     585    bzero(data, sizeof(float)*4* particleRenderer->psys_width * particleRenderer->psys_height);
     586
     587    int index;
     588    bool particle;
     589    for (int i=0; i<particleRenderer->psys_width; i++) {
     590        for (int j=0; j<particleRenderer->psys_height; j++) {
     591            index = i + particleRenderer->psys_height*j;
     592            //particle = rand() % 256 > 150;
     593            //if(particle)
     594            {
     595                //assign any location (x,y,z) in range [0,1]
     596                // TEMP
     597                data[4*index] = lic_slice_x;
     598                data[4*index+1]= j/float(particleRenderer->psys_height);
     599                data[4*index+2]= i/float(particleRenderer->psys_width);
     600                data[4*index+3]= 30; //shorter life span, quicker iterations   
     601                //data[4*index+3]= 1.0f; //shorter life span, quicker iterations       
     602            }
     603/*
     604            else
     605            {
     606                data[4*index] = 0;
     607                data[4*index+1]= 0;
     608                data[4*index+2]= 0;
     609                data[4*index+3]= 0;     
     610            }
     611*/
     612        }
     613    }
     614
     615    particleRenderer->initialize((Particle*)data);
     616
     617    delete[] data;
     618}
    582619
    583620void NanoVis::init(const char* path)
     
    613650    color_table_renderer->setFonts(fonts);
    614651   
     652    particleRenderer = new NvParticleRenderer(NMESH, NMESH, g_context);
     653
    615654    ImageLoaderFactory::getInstance()->addLoaderImpl("bmp", new BMPImageLoaderImpl());
    616655
     
    698737   plane_render->add_plane(plane[0], get_transfunc("default"));
    699738
    700    assert(glGetError()==0);
     739   //assert(glGetError()==0);
    701740
    702741#ifdef notdef
     
    711750  glReadPixels(0, 0, win_width, win_height, GL_RGB, GL_UNSIGNED_BYTE,
    712751        screen_buffer);
    713   assert(glGetError()==0);
     752  //assert(glGetError()==0);
    714753}
    715754
     
    11091148    glPopMatrix();
    11101149   
    1111     assert(glGetError()==0);
     1150    //assert(glGetError()==0);
    11121151}
    11131152#endif
     
    12001239    //buffer->DisableTextureTarget();
    12011240
    1202     assert(glGetError()==0);
     1241    //assert(glGetError()==0);
    12031242}
    12041243#endif
     
    13331372NanoVis::display()
    13341373{
    1335     assert(glGetError()==0);
     1374    //assert(glGetError()==0);
    13361375   
    13371376    //lic->convolve(); //flow line integral convolution
     
    13891428        }
    13901429       
     1430        if (particleRenderer && particleRenderer->isActivated())
     1431        {
     1432            particleRenderer->render();
     1433        }
    13911434        //lic->render();        //display the line integral convolution result
    13921435        //soft_display_verts();
  • trunk/vizservers/nanovis/nanovis.h

    r848 r850  
    1515#ifndef __NANOVIS_H__
    1616#define __NANOVIS_H__
     17
     18#include <tcl.h>
    1719
    1820#include <GL/glew.h>
     
    4951#include "Mat4x4.h"
    5052#include "Volume.h"
    51 #include "ParticleSystem.h"
     53#include "NvParticleRenderer.h"
    5254#include "PerfQuery.h"
    5355#include "Event.h"
     
    6365#include "config.h"
    6466
    65 #include <tcl.h>
    6667
    6768//defines for the image based flow visualization
     
    102103    static VolumeRenderer* vol_renderer;
    103104    static PointSetRenderer* pointset_renderer;
     105    static NvParticleRenderer* particleRenderer;
    104106    static vector<PointSet*> pointSet;
    105107    static PlaneRenderer* plane_render;
     
    132134    static void init_lic(void);
    133135    static void init_offscreen_buffer(void);
     136    static void initParticle();
    134137    static void resize_offscreen_buffer(int w, int h);
    135138    static void offscreen_buffer_capture(void);
  • trunk/vizservers/nanovis/shaders/update_pos.cg

    r392 r850  
    1919            uniform sampler3D vel_tex,
    2020            uniform float timestep,
     21            uniform float max,
    2122            uniform float3 scale
    2223            ) : COLOR
     
    2829    float time = pos.w;
    2930
    30     float4 vel = float4(tex3D(vel_tex, pos.xyz).xyz, 0);
    31 
    3231    //reconstruct negative value
    33     vel = (vel - float4(0.5,0.5,0.5,0.))*2.;
     32    float4 vel = float4(tex3D(vel_tex, pos.xyz).xyz, 0) - float4(0.5, 0.5, 0.5, 0.0f);
     33    vel = vel * (2 * max);
    3434    vel.x *= scale.x;
    3535    vel.y *= scale.y;
    3636    vel.z *= scale.z;
    37     ret = pos + vel*timestep;
    38     //ret = pos;
    39 
     37    ret = pos;
     38    ret.x -= vel.x * timestep;
     39    ret.y -= vel.y * timestep;
     40    ret.z -= vel.z * timestep;
    4041
    4142    //not drawing if the particle is out of bound
Note: See TracChangeset for help on using the changeset viewer.