예제 #1
0
// TODO : a templated initTF function for different kinds of tf ( float, short, etc )
void RayCastRenderer::initTransferFunction( const TransferFunction1D< uint8_t >& transferFunction )
{
    const UInt8Vector& transferFunctionData = transferFunction.getData();

    assert( transferFunction.getNumChannels() == 4u );

    if( transferFunctionTexture_ == 0 )
    {
        GLuint tfTexture = 0;
        glGenTextures( 1, &tfTexture );
        glBindTexture( GL_TEXTURE_1D, tfTexture );

        glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
        glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );

        glBindTexture( GL_TEXTURE_1D, tfTexture);
        glTexImage1D(  GL_TEXTURE_1D, 0, GL_RGBA, transferFunctionData.size( )/4u, 0,
                       GL_RGBA, GL_UNSIGNED_BYTE, &transferFunctionData[ 0 ] );

        transferFunctionTexture_  = tfTexture;
    }
    else
    {
        glBindTexture( GL_TEXTURE_1D, transferFunctionTexture_ );
        glTexImage1D(  GL_TEXTURE_1D, 0, GL_RGBA, transferFunctionData.size( )/4u, 0,
                       GL_RGBA, GL_UNSIGNED_BYTE, &transferFunctionData[ 0 ] );
    }
}
예제 #2
0
    void initTransferFunction( const TransferFunction1D& transferFunction )
    {
        assert( transferFunction.getNumChannels() == 4u );

        if( _transferFunctionTexture == 0 )
        {
            GLuint tfTexture = 0;
            glGenTextures( 1, &tfTexture );
            glBindTexture( GL_TEXTURE_1D, tfTexture );

            glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
            glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
            glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
            _transferFunctionTexture  = tfTexture;
        }
        glBindTexture( GL_TEXTURE_1D, _transferFunctionTexture );

        const uint8_t* transferFunctionData = transferFunction.getLut();
        glTexImage1D(  GL_TEXTURE_1D, 0, GL_RGBA,
                       GLsizei( transferFunction.getLutSize() / 4u ), 0,
                       GL_RGBA, GL_UNSIGNED_BYTE, transferFunctionData );
    }