本文整理汇总了C++中PointObject::normals方法的典型用法代码示例。如果您正苦于以下问题:C++ PointObject::normals方法的具体用法?C++ PointObject::normals怎么用?C++ PointObject::normals使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PointObject
的用法示例。
在下文中一共展示了PointObject::normals方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: add
/*===========================================================================*/
void PointObject::add( const PointObject& other )
{
if ( this->coords().size() == 0 )
{
// Copy the object.
BaseClass::setCoords( other.coords() );
BaseClass::setNormals( other.normals() );
BaseClass::setColors( other.colors() );
this->setSizes( other.sizes() );
BaseClass::setMinMaxObjectCoords(
other.minObjectCoord(),
other.maxObjectCoord() );
BaseClass::setMinMaxExternalCoords(
other.minExternalCoord(),
other.maxExternalCoord() );
}
else
{
if ( !BaseClass::hasMinMaxObjectCoords() )
{
BaseClass::updateMinMaxCoords();
}
kvs::Vec3 min_object_coord( BaseClass::minObjectCoord() );
kvs::Vec3 max_object_coord( BaseClass::maxObjectCoord() );
min_object_coord.x() = kvs::Math::Min( min_object_coord.x(), other.minObjectCoord().x() );
min_object_coord.y() = kvs::Math::Min( min_object_coord.y(), other.minObjectCoord().y() );
min_object_coord.z() = kvs::Math::Min( min_object_coord.z(), other.minObjectCoord().z() );
max_object_coord.x() = kvs::Math::Max( max_object_coord.x(), other.maxObjectCoord().x() );
max_object_coord.y() = kvs::Math::Max( max_object_coord.y(), other.maxObjectCoord().y() );
max_object_coord.z() = kvs::Math::Max( max_object_coord.z(), other.maxObjectCoord().z() );
BaseClass::setMinMaxObjectCoords( min_object_coord, max_object_coord );
BaseClass::setMinMaxExternalCoords( min_object_coord, max_object_coord );
// Integrate the coordinate values.
kvs::ValueArray<kvs::Real32> coords;
const size_t ncoords = this->coords().size() + other.coords().size();
coords.allocate( ncoords );
kvs::Real32* pcoords = coords.data();
// x,y,z, ... + x,y,z, ... = x,y,z, ... ,x,y,z, ...
memcpy( pcoords, this->coords().data(), this->coords().byteSize() );
memcpy( pcoords + this->coords().size(), other.coords().data(), other.coords().byteSize() );
BaseClass::setCoords( coords );
// Integrate the normal vectors.
kvs::ValueArray<kvs::Real32> normals;
if ( this->normals().size() > 0 )
{
if ( other.normals().size() > 0 )
{
// nx,ny,nz, ... + nx,ny,nz, ... = nx,ny,nz, ... ,nx,ny,nz, ...
const size_t nnormals = this->normals().size() + other.normals().size();
normals.allocate( nnormals );
kvs::Real32* pnormals = normals.data();
memcpy( pnormals, this->normals().data(), this->normals().byteSize() );
memcpy( pnormals + this->normals().size(), other.normals().data(), other.normals().byteSize() );
}
else
{
// nx,ny,nz, ... + (none) = nx,ny,nz, ... ,0,0,0, ...
const size_t nnormals = this->normals().size() + other.coords().size();
normals.allocate( nnormals );
kvs::Real32* pnormals = normals.data();
memcpy( pnormals, this->normals().data(), this->normals().byteSize() );
memset( pnormals + this->normals().size(), 0, other.coords().byteSize() );
}
}
else
{
if ( other.normals().size() > 0 )
{
const size_t nnormals = this->coords().size() + other.normals().size();
normals.allocate( nnormals );
kvs::Real32* pnormals = normals.data();
// (none) + nx,ny,nz, ... = 0,0,0, ... ,nz,ny,nz, ...
memset( pnormals, 0, this->coords().byteSize() );
memcpy( pnormals + this->coords().size(), other.normals().data(), other.normals().byteSize() );
}
}
BaseClass::setNormals( normals );
// Integrate the color values.
kvs::ValueArray<kvs::UInt8> colors;
if ( this->colors().size() > 1 )
{
if ( other.colors().size() > 1 )
{
// r,g,b, ... + r,g,b, ... = r,g,b, ... ,r,g,b, ...
const size_t ncolors = this->colors().size() + other.colors().size();
colors.allocate( ncolors );
kvs::UInt8* pcolors = colors.data();
memcpy( pcolors, this->colors().data(), this->colors().byteSize() );
memcpy( pcolors + this->colors().size(), other.colors().data(), other.colors().byteSize() );
}
//.........这里部分代码省略.........