MCPcopy Create free account
hub / github.com/RenderKit/embree / addTree

Function addTree

tutorials/forest/forest_device.cpp:48–88  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

46RTCGeometry* instances = nullptr;
47
48unsigned int addTree(RTCScene scene_i, unsigned int tree_idx)
49{
50 /* create a triangulated cube with 12 triangles and 8 vertices */
51 RTCGeometry mesh = rtcNewGeometry(g_device, RTC_GEOMETRY_TYPE_TRIANGLE);
52
53 const float* vertices = tree_vertices[tree_idx];
54 const float* colors = tree_colors[tree_idx];
55 const unsigned int* indices = tree_indices[tree_idx];
56 unsigned int num_vertices = tree_num_vertices[tree_idx];
57 unsigned int num_colors = tree_num_colors[tree_idx];
58 unsigned int num_triangles = tree_num_triangles[tree_idx];
59
60 /* set vertices and vertex colors */
61 RTCBuffer vertex_buffer = rtcNewSharedBufferHostDevice(g_device, (void *)vertices, 3*num_vertices*sizeof(float));
62 rtcSetGeometryBuffer(mesh, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, vertex_buffer, 0, 3*sizeof(float), num_vertices);
63 rtcCommitBuffer(vertex_buffer);
64 rtcReleaseBuffer(vertex_buffer);
65
66 RTCBuffer index_buffer = rtcNewSharedBufferHostDevice(g_device, (void *)indices, 3*num_triangles*sizeof(unsigned int));
67 rtcSetGeometryBuffer(mesh, RTC_BUFFER_TYPE_INDEX, 0, RTC_FORMAT_UINT3, index_buffer, 0, 3*sizeof(unsigned int), num_triangles);
68 rtcCommitBuffer(index_buffer);
69 rtcReleaseBuffer(index_buffer);
70 data.tree_triangles[tree_idx] = (Triangle*)rtcGetBufferDataDevice(index_buffer);
71
72 /* create vertex color array */
73 RTCBuffer color_buffer = rtcNewSharedBufferHostDevice(g_device, (void*)colors, 3*num_colors*sizeof(float));
74 rtcSetGeometryVertexAttributeCount(mesh,1);
75 rtcSetGeometryBuffer(mesh, RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE, 0, RTC_FORMAT_FLOAT3, color_buffer, 0, 3*sizeof(float), num_colors);
76 rtcCommitBuffer(color_buffer);
77 rtcReleaseBuffer(color_buffer);
78 data.tree_vertex_colors[tree_idx] = (Vec3f*)rtcGetBufferDataDevice(color_buffer);
79
80 g_memory_consumed += num_vertices * 3 * sizeof(float);
81 g_memory_consumed += num_triangles * 3 * sizeof(unsigned int);
82 g_memory_consumed += num_colors * 3 * sizeof(float);
83
84 rtcCommitGeometry(mesh);
85 unsigned int geomID = rtcAttachGeometry(scene_i,mesh);
86 rtcReleaseGeometry(mesh);
87 return geomID;
88}
89
90/* adds a ground plane to the scene */
91unsigned int addTerrain(RTCScene scene_i)

Callers 1

device_initFunction · 0.85

Calls 9

rtcSetGeometryBufferFunction · 0.85
rtcCommitBufferFunction · 0.85
rtcReleaseBufferFunction · 0.85
rtcGetBufferDataDeviceFunction · 0.85
rtcCommitGeometryFunction · 0.85
rtcAttachGeometryFunction · 0.85
rtcReleaseGeometryFunction · 0.85

Tested by

no test coverage detected