-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathData.h
58 lines (49 loc) · 1.58 KB
/
Data.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#pragma once
#include <kvs/PolygonObject>
#include <kvs/RGBColor>
#include <kvs/ValueArray>
#include <kvs/Vector3>
#include <kvs/MersenneTwister>
#include "Input.h"
namespace local
{
inline kvs::PolygonObject Data( const local::Input& _input )
{
const size_t npolygons = _input.npolygons;
const kvs::RGBColor color = _input.color;
const kvs::UInt8 opacity = int( _input.opacity * 255 );
const size_t nvertices = npolygons * 3;
kvs::ValueArray<kvs::Real32> coords( nvertices * 3 );
kvs::ValueArray<kvs::Real32> normals( npolygons * 3 );
kvs::Real32* pcoords = coords.data();
kvs::Real32* pnormals = normals.data();
kvs::MersenneTwister rand( _input.seed );
for ( size_t i = 0; i < npolygons; i++ )
{
kvs::Vec3 p0( rand(), rand(), rand() );
kvs::Vec3 p1( rand(), rand(), rand() );
kvs::Vec3 p2( rand(), rand(), rand() );
kvs::Vec3 n = ( p1 - p0 ).cross( p2 - p0 );
*(pcoords++) = p0.x();
*(pcoords++) = p0.y();
*(pcoords++) = p0.z();
*(pcoords++) = p1.x();
*(pcoords++) = p1.y();
*(pcoords++) = p1.z();
*(pcoords++) = p2.x();
*(pcoords++) = p2.y();
*(pcoords++) = p2.z();
*(pnormals++) = n.x();
*(pnormals++) = n.y();
*(pnormals++) = n.z();
}
kvs::PolygonObject object;
object.setPolygonTypeToTriangle();
object.setNormalTypeToPolygon();
object.setCoords( coords );
object.setNormals( normals );
object.setColor( color );
object.setOpacity( opacity );
return object;
}
} // end of namespace local