amino
Lightweight Robot Utility Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
scene_geom.h
Go to the documentation of this file.
1 /* -*- mode: C; c-basic-offset: 4; -*- */
2 /* ex: set shiftwidth=4 tabstop=4 expandtab: */
3 /*
4  * Copyright (c) 2015, Rice University
5  * All rights reserved.
6  *
7  * Author(s): Neil T. Dantam <ntd@rice.edu>
8  *
9  * Redistribution and use in source and binary forms, with or
10  * without modification, are permitted provided that the following
11  * conditions are met:
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * Neither the name of copyright holder the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
27  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
30  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
31  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  */
37 
38 #ifndef AMINO_RX_SCENE_GEOM_H
39 #define AMINO_RX_SCENE_GEOM_H
40 
46 /*-----------*/
47 /*- Options -*/
48 /*-----------*/
49 
56 struct aa_rx_geom_opt;
57 
61 AA_API struct aa_rx_geom_opt*
63 
67 AA_API void
68 aa_rx_geom_opt_destroy(struct aa_rx_geom_opt*);
69 
73 AA_API void
75  struct aa_rx_geom_opt *opt,
76  int no_shadow );
77 
81 AA_API int
82 aa_rx_geom_opt_get_no_shadow ( const struct aa_rx_geom_opt *opt );
83 
87 AA_API int
88 aa_rx_geom_opt_get_visual ( const struct aa_rx_geom_opt *opt );
89 
93 AA_API int
94 aa_rx_geom_opt_get_collision ( const struct aa_rx_geom_opt *opt );
95 
99 AA_API double
100 aa_rx_geom_opt_get_color_red ( const struct aa_rx_geom_opt *opt );
101 
105 AA_API double
106 aa_rx_geom_opt_get_color_blue ( const struct aa_rx_geom_opt *opt );
107 
108 
112 AA_API double
113 aa_rx_geom_opt_get_color_green ( const struct aa_rx_geom_opt *opt );
114 
118 AA_API double
119 aa_rx_geom_opt_get_alpha ( const struct aa_rx_geom_opt *opt );
120 
124 AA_API double
125 aa_rx_geom_opt_get_specular_red ( const struct aa_rx_geom_opt *opt );
126 
130 AA_API double
131 aa_rx_geom_opt_get_specular_blue ( const struct aa_rx_geom_opt *opt );
132 
136 AA_API double
137 aa_rx_geom_opt_get_specular_green ( const struct aa_rx_geom_opt *opt );
138 
142 AA_API void
144  struct aa_rx_geom_opt *opt,
145  double red, double blue, double green );
146 
150 AA_API void
152  struct aa_rx_geom_opt *opt,
153  double alpha );
154 
160 AA_API void
162  struct aa_rx_geom_opt *opt,
163  int visual );
164 
170 AA_API void
172  struct aa_rx_geom_opt *opt,
173  int collision );
174 
178 AA_API void
180  struct aa_rx_geom_opt *opt,
181  double red, double green, double blue );
182 
183 
187 AA_API void
189  struct aa_rx_geom_opt *opt,
190  double scale );
191 
195 AA_API double
197  const struct aa_rx_geom_opt *opt );
198 
199 /*----------*/
200 /*- Shapes -*/
201 /*----------*/
202 
203 
207 AA_API struct aa_rx_geom *
208 aa_rx_geom_copy( struct aa_rx_geom *src );
209 
213 AA_API void
214 aa_rx_geom_destroy( struct aa_rx_geom *geom );
215 
227 };
228 
232 AA_API const char *aa_rx_geom_shape_str( enum aa_rx_geom_shape shape );
233 
238  double dimension[3];
239 };
240 
245  double radius;
246 };
247 
252  double height;
253  double radius;
254 };
255 
260  double height;
261  double start_radius;
262  double end_radius;
263 };
264 
265 
270  double dimension[2];
271  double delta[2];
272  double width;
273 };
274 
284 AA_API void *
285 aa_rx_geom_shape ( const struct aa_rx_geom *g,
286  enum aa_rx_geom_shape *shape_type );
287 
291 AA_API struct aa_rx_geom *
293  struct aa_rx_geom_opt *opt,
294  const double dimension[3] );
295 
299 AA_API struct aa_rx_geom *
301  struct aa_rx_geom_opt *opt,
302  double radius );
303 
307 AA_API struct aa_rx_geom *
309  struct aa_rx_geom_opt *opt,
310  double height,
311  double radius );
312 
316 AA_API struct aa_rx_geom *
318  struct aa_rx_geom_opt *opt,
319  double height,
320  double start_radius,
321  double end_radius );
322 
326 AA_API struct aa_rx_geom *
328  struct aa_rx_geom_opt *opt,
329  const double dimension[2],
330  const double delta[2],
331  double width );
332 
336 AA_API const struct aa_rx_geom_opt*
337 aa_rx_geom_get_opt ( const struct aa_rx_geom *geom );
338 
342 AA_API struct aa_rx_cl_geom *
343 aa_rx_geom_get_collision ( const struct aa_rx_geom *geom );
344 
348 AA_API void
349 aa_rx_geom_set_collision ( struct aa_rx_geom *geom, struct aa_rx_cl_geom * );
350 
354 struct aa_rx_mesh;
355 
359 AA_API struct aa_rx_mesh* aa_rx_mesh_create();
360 
364 AA_API void aa_rx_mesh_destroy( struct aa_rx_mesh * mesh );
365 
370  struct aa_rx_mesh *mesh, size_t n,
371  const float *vectors, int copy );
372 
376 AA_API const float *aa_rx_mesh_get_vertices (
377  const struct aa_rx_mesh *mesh, size_t *size );
378 
382 AA_API const unsigned *aa_rx_mesh_get_indices (
383  const struct aa_rx_mesh *mesh, size_t *size );
384 
389  struct aa_rx_mesh *mesh, size_t n,
390  const float *normals, int copy );
391 
396  struct aa_rx_mesh *mesh, size_t n,
397  const unsigned *indices, int copy );
398 
403  struct aa_rx_mesh *mesh,
404  size_t width, size_t height,
405  const uint8_t *rgba, int copy );
406 
411  struct aa_rx_mesh *mesh,
412  size_t n, const float *uv, int copy );
413 
418  struct aa_rx_mesh *mesh,
419  const struct aa_rx_geom_opt *opt );
420 
424 AA_API struct aa_rx_geom *
426  struct aa_rx_geom_opt *opt,
427  struct aa_rx_mesh *mesh );
428 
432 AA_API void
434  struct aa_rx_sg *sg,
435  const char *frame,
436  struct aa_rx_geom *geom );
437 
441 AA_API unsigned
442 aa_rx_geom_refcount ( const struct aa_rx_geom *g );
443 
447 AA_API unsigned
448 aa_rx_mesh_refcount ( const struct aa_rx_mesh *sg );
449 
450 #endif /*AMINO_RX_SCENE_GEOM_H*/
AA_API double aa_rx_geom_opt_get_specular_blue(const struct aa_rx_geom_opt *opt)
Get blue specular value.
AA_API void aa_rx_geom_set_collision(struct aa_rx_geom *geom, struct aa_rx_cl_geom *)
Set the collision object for the geometry object.
AA_API void aa_rx_mesh_destroy(struct aa_rx_mesh *mesh)
Destroy the mesh.
Shape for a box.
Definition: scene_geom.h:237
AA_API void aa_rx_mesh_set_indices(struct aa_rx_mesh *mesh, size_t n, const unsigned *indices, int copy)
Set the mesh indices.
AA_API double aa_rx_geom_opt_get_alpha(const struct aa_rx_geom_opt *opt)
Get alpha value.
Invalid shape.
Definition: scene_geom.h:220
Container for scene geometry.
Definition: rxtype.h:56
aa_rx_geom_shape
Enumeration of geometry shape types.
Definition: scene_geom.h:219
AA_API const struct aa_rx_geom_opt * aa_rx_geom_get_opt(const struct aa_rx_geom *geom)
Return the options for the geometry object.
AA_API struct aa_rx_geom * aa_rx_geom_box(struct aa_rx_geom_opt *opt, const double dimension[3])
Create a box.
AA_API void aa_rx_geom_opt_set_no_shadow(struct aa_rx_geom_opt *opt, int no_shadow)
Set no-shadow option.
AA_API int aa_rx_geom_opt_get_no_shadow(const struct aa_rx_geom_opt *opt)
Get no-shadow option.
AA_API void aa_rx_geom_destroy(struct aa_rx_geom *geom)
Destroy a geometry struct.
Shape for a cylinder.
Definition: scene_geom.h:251
AA_API void aa_rx_mesh_set_uv(struct aa_rx_mesh *mesh, size_t n, const float *uv, int copy)
Set the mesh colors and uv values.
AA_API unsigned aa_rx_geom_refcount(const struct aa_rx_geom *g)
Return the reference count value of `g'.
AA_API void aa_rx_geom_opt_set_specular3(struct aa_rx_geom_opt *opt, double red, double green, double blue)
Set specular reflection.
AA_API int aa_rx_geom_opt_get_collision(const struct aa_rx_geom_opt *opt)
Get collision option.
AA_API double aa_rx_geom_opt_get_color_green(const struct aa_rx_geom_opt *opt)
Get green color value.
AA_API double aa_rx_geom_opt_get_color_blue(const struct aa_rx_geom_opt *opt)
Get blue color value.
AA_API void aa_rx_mesh_set_vertices(struct aa_rx_mesh *mesh, size_t n, const float *vectors, int copy)
Set the mesh vertices.
A cone shape.
Definition: scene_geom.h:225
AA_API double aa_rx_geom_opt_get_scale(const struct aa_rx_geom_opt *opt)
Get mesh scaling.
Shape for a grid.
Definition: scene_geom.h:269
AA_API const float * aa_rx_mesh_get_vertices(const struct aa_rx_mesh *mesh, size_t *size)
Get the mesh vertices.
AA_API struct aa_rx_geom * aa_rx_geom_sphere(struct aa_rx_geom_opt *opt, double radius)
Create a sphere.
AA_API void aa_rx_geom_opt_set_scale(struct aa_rx_geom_opt *opt, double scale)
Set mesh scaling.
Opaque type for a scene_graph.
AA_API void aa_rx_mesh_set_normals(struct aa_rx_mesh *mesh, size_t n, const float *normals, int copy)
Set the mesh normals.
AA_API const char * aa_rx_geom_shape_str(enum aa_rx_geom_shape shape)
Return a string for the shape type.
AA_API struct aa_rx_geom * aa_rx_geom_cone(struct aa_rx_geom_opt *opt, double height, double start_radius, double end_radius)
Create a cone.
AA_API struct aa_rx_geom * aa_rx_geom_cylinder(struct aa_rx_geom_opt *opt, double height, double radius)
Create a cylinder.
AA_API struct aa_rx_cl_geom * aa_rx_geom_get_collision(const struct aa_rx_geom *geom)
Return the collision object for the geometry object.
AA_API const unsigned * aa_rx_mesh_get_indices(const struct aa_rx_mesh *mesh, size_t *size)
Get the mesh indices.
AA_API struct aa_rx_geom * aa_rx_geom_copy(struct aa_rx_geom *src)
Copy a geometry struct.
AA_API void aa_rx_geom_attach(struct aa_rx_sg *sg, const char *frame, struct aa_rx_geom *geom)
Attach geometry to the scene graph.
AA_API struct aa_rx_geom_opt * aa_rx_geom_opt_create()
Create a geometry option struct.
AA_API void aa_rx_geom_opt_set_visual(struct aa_rx_geom_opt *opt, int visual)
Set visual flag.
#define AA_API
calling and name mangling convention for functions
Definition: amino.h:95
AA_API int aa_rx_geom_opt_get_visual(const struct aa_rx_geom_opt *opt)
Get visual option.
AA_API double aa_rx_geom_opt_get_specular_green(const struct aa_rx_geom_opt *opt)
Get green specular value.
Shape for a sphere.
Definition: scene_geom.h:244
AA_API struct aa_rx_geom * aa_rx_geom_mesh(struct aa_rx_geom_opt *opt, struct aa_rx_mesh *mesh)
Attach a mesh to frame.
AA_API struct aa_rx_geom * aa_rx_geom_grid(struct aa_rx_geom_opt *opt, const double dimension[2], const double delta[2], double width)
Create a grid.
AA_API void aa_rx_mesh_set_texture(struct aa_rx_mesh *mesh, const struct aa_rx_geom_opt *opt)
Set the mesh texture parameters.
AA_API struct aa_rx_mesh * aa_rx_mesh_create()
Create a mesh.
AA_API void aa_rx_mesh_set_rgba(struct aa_rx_mesh *mesh, size_t width, size_t height, const uint8_t *rgba, int copy)
Set the mesh colors and alpha.
AA_API void aa_rx_geom_opt_set_color3(struct aa_rx_geom_opt *opt, double red, double blue, double green)
Set color option.
AA_API double aa_rx_geom_opt_get_color_red(const struct aa_rx_geom_opt *opt)
Get red color value.
A triangular mesh shape.
Definition: scene_geom.h:221
Shape for a cone.
Definition: scene_geom.h:259
AA_API void aa_rx_geom_opt_set_alpha(struct aa_rx_geom_opt *opt, double alpha)
Set alpha (transparency) option.
A box (cube) shape.
Definition: scene_geom.h:222
AA_API void aa_rx_geom_opt_destroy(struct aa_rx_geom_opt *)
Destroy a geometry option struct.
A grid-lines shape.
Definition: scene_geom.h:226
A cylinder shape.
Definition: scene_geom.h:224
A sphere (ball) shape.
Definition: scene_geom.h:223
AA_API void aa_rx_geom_opt_set_collision(struct aa_rx_geom_opt *opt, int collision)
Set collision flag.
AA_API unsigned aa_rx_mesh_refcount(const struct aa_rx_mesh *sg)
Return the reference count value of `m'.
AA_API double aa_rx_geom_opt_get_specular_red(const struct aa_rx_geom_opt *opt)
Get red specular value.