Changeset 503 for trunk/src/gfx


Ignore:
Timestamp:
06/28/16 21:09:19 (9 years ago)
Author:
epyon
Message:
  • nv::random - support for different rng sources
  • nv::types - fixes and better support
  • nv::mesh_creator - full range transform
  • nv::context - buffer mask as separate type
  • nv::lua - initializations from lua::state instead of lua_State
  • nv::lua - initial support for rtti
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gfx/mesh_creator.cc

    r491 r503  
    8888
    8989
    90 void nv::mesh_data_creator::transform( float scale, const mat3& r33 )
    91 {
    92         vec3 vertex_offset     = vec3();
    93         mat3 vertex_transform  = scale * r33;
    94         mat3 normal_transform  = r33;
     90void nv::mesh_data_creator::transform( const vec3& pos, const mat3& r33, float scale /*= 1.0f */ )
     91{
     92        vec3 vertex_offset = pos;
     93        mat3 vertex_transform = scale * r33;
     94        mat3 normal_transform = r33;
    9595
    9696        for ( uint32 c = 0; c < m_data->size(); ++c )
    9797        {
    9898                raw_data_channel_access channel( m_data, c );
    99                 const data_descriptor&  desc    = channel.descriptor();
     99                const data_descriptor&  desc = channel.descriptor();
    100100                uint8* raw_data = channel.raw_data();
    101101                uint32 vtx_size = desc.element_size();
     
    103103                int n_offset = -1;
    104104                int t_offset = -1;
    105                 for ( const auto& cslot : desc  )
     105                for ( const auto& cslot : desc )
    106106                        switch ( cslot.vslot )
    107107                        {
    108                                 case slot::POSITION : if ( cslot.etype == FLOAT_VECTOR_3 ) p_offset = int( cslot.offset ); break;
    109                                 case slot::NORMAL   : if ( cslot.etype == FLOAT_VECTOR_3 ) n_offset = int( cslot.offset ); break;
    110                                 case slot::TANGENT  : if ( cslot.etype == FLOAT_VECTOR_4 ) t_offset = int( cslot.offset ); break;
    111                                 default             : break;
     108                        case slot::POSITION: if ( cslot.etype == FLOAT_VECTOR_3 ) p_offset = int( cslot.offset ); break;
     109                        case slot::NORMAL: if ( cslot.etype == FLOAT_VECTOR_3 ) n_offset = int( cslot.offset ); break;
     110                        case slot::TANGENT: if ( cslot.etype == FLOAT_VECTOR_4 ) t_offset = int( cslot.offset ); break;
     111                        default: break;
    112112                        }
    113113
    114114                if ( p_offset != -1 )
    115                         for ( uint32 i = 0; i < channel.size(); i++)
     115                        for ( uint32 i = 0; i < channel.size(); i++ )
    116116                        {
    117117                                vec3& p = *reinterpret_cast<vec3*>( raw_data + vtx_size*i + p_offset );
     
    120120
    121121                if ( n_offset != -1 )
    122                         for ( uint32 i = 0; i < channel.size(); i++)
     122                        for ( uint32 i = 0; i < channel.size(); i++ )
    123123                        {
    124124                                vec3& n = *reinterpret_cast<vec3*>( raw_data + vtx_size*i + n_offset );
     
    126126                        }
    127127                if ( t_offset != -1 )
    128                         for ( uint32 i = 0; i < channel.size(); i++)
    129                         {
    130                                 vec4& t = *reinterpret_cast<vec4*>(raw_data + vtx_size*i + t_offset );
    131                                 t = vec4( math::normalize( normal_transform * vec3(t) ), t[3] );
    132                         }
    133         }
    134 }
     128                        for ( uint32 i = 0; i < channel.size(); i++ )
     129                        {
     130                                vec4& t = *reinterpret_cast<vec4*>( raw_data + vtx_size*i + t_offset );
     131                                t = vec4( math::normalize( normal_transform * vec3( t ) ), t[3] );
     132                        }
     133        }
     134}
     135
    135136
    136137struct vertex_g
Note: See TracChangeset for help on using the changeset viewer.