zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lib3ds_node.c
Go to the documentation of this file.
1 /*
2  Copyright (C) 1996-2008 by Jan Eric Kyprianidis <www.kyprianidis.com>
3  All rights reserved.
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published
7  by the Free Software Foundation, either version 2.1 of the License, or
8  (at your option) any later version.
9 
10  Thisprogram is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with this program; If not, see <http://www.gnu.org/licenses/>.
17 */
18 #include "lib3ds_impl.h"
19 
20 
31  Lib3dsNode *node;
32  switch (type) {
35  node = (Lib3dsNode*)n;
36  strcpy(node->name, "$AMBIENT$");
38  break;
39  }
40 
43  node = (Lib3dsNode*)n;
44  strcpy(node->name, "$$$DUMMY");
49  break;
50  }
51 
52  case LIB3DS_NODE_CAMERA: {
54  node = (Lib3dsNode*)n;
58  break;
59  }
60 
63  node = (Lib3dsNode*)n;
65  break;
66  }
67 
68  case LIB3DS_NODE_OMNILIGHT: {
70  node = (Lib3dsNode*)n;
73  break;
74  }
75 
76  case LIB3DS_NODE_SPOTLIGHT: {
78  node = (Lib3dsNode*)n;
84  break;
85  }
86 
89  node = (Lib3dsNode*)n;
91  break;
92  }
93 
94  default:
95  assert(0);
96  return NULL;
97  }
98 
99  node->type = type;
100  node->node_id = 65535;
101  node->user_id = 65535;
103  return node;
104 }
105 
106 
109  Lib3dsNode *node;
111 
113 
114  n = (Lib3dsAmbientColorNode*)node;
116  if (color0) {
117  lib3ds_vector_copy(n->color_track.keys[0].value, color0);
118  } else {
120  }
121 
122  return n;
123 }
124 
125 
127 lib3ds_node_new_mesh_instance(Lib3dsMesh *mesh, const char *instance_name, float pos0[3], float scl0[3], float rot0[4]) {
128  Lib3dsNode *node;
130  int i;
131 
133  if (mesh) {
134  strcpy(node->name, mesh->name);
135  } else {
136  strcpy(node->name, "$$$DUMMY");
137  }
138 
139  n = (Lib3dsMeshInstanceNode*)node;
140  if (instance_name) {
141  strcpy(n->instance_name, instance_name);
142  }
143 
145  if (pos0) {
146  lib3ds_vector_copy(n->pos_track.keys[0].value, pos0);
147  }
148 
150  if (scl0) {
151  lib3ds_vector_copy(n->scl_track.keys[0].value, scl0);
152  } else {
153  lib3ds_vector_make(n->scl_track.keys[0].value, 1, 1, 1);
154  }
155 
157  if (rot0) {
158  for (i = 0; i < 4; ++i) n->rot_track.keys[0].value[i] = rot0[i];
159  } else {
160  for (i = 0; i < 4; ++i) n->rot_track.keys[0].value[i] = 0;
161  }
162 
163  return n;
164 }
165 
166 
171 
172  assert(camera);
174  strcpy(node->name, camera->name);
175 
176  n = (Lib3dsCameraNode*)node;
179 
181  n->fov_track.keys[0].value[0] = camera->fov;
182 
184  n->roll_track.keys[0].value[0] = camera->roll;
185 
186  return n;
187 }
188 
189 
192  Lib3dsNode *node;
194 
195  assert(camera);
197  strcpy(node->name, camera->name);
198 
199  n = (Lib3dsTargetNode*)node;
201  lib3ds_vector_copy(n->pos_track.keys[0].value, camera->target);
202 
203  return n;
204 }
205 
206 
209  Lib3dsNode *node;
211 
212  assert(light);
214  strcpy(node->name, light->name);
215 
216  n = (Lib3dsOmnilightNode*)node;
219 
222 
223  return n;
224 }
225 
226 
229  Lib3dsNode *node;
231 
232  assert(light);
234  strcpy(node->name, light->name);
235 
236  n = (Lib3dsSpotlightNode*)node;
239 
242 
244  n->hotspot_track.keys[0].value[0] = light->hotspot;
245 
247  n->falloff_track.keys[0].value[0] = light->falloff;
248 
250  n->roll_track.keys[0].value[0] = light->roll;
251 
252  return n;
253 }
254 
255 
258  Lib3dsNode *node;
260 
261  assert(light);
263  strcpy(node->name, light->name);
264 
265  n = (Lib3dsTargetNode*)node;
268 
269  return n;
270 }
271 
272 
273 static void
275  assert(node);
276  switch (node->type) {
280  break;
281  }
282 
289  break;
290  }
291 
292  case LIB3DS_NODE_CAMERA: {
297  break;
298  }
299 
303  break;
304  }
305 
306  case LIB3DS_NODE_OMNILIGHT: {
310  break;
311  }
312 
313  case LIB3DS_NODE_SPOTLIGHT: {
320  break;
321  }
322 
326  break;
327  }
328  }
329  {
330  Lib3dsNode *p, *q;
331  for (p = node->childs; p; p = q) {
332  q = p->next;
334  }
335  }
336  free(node);
337 }
338 
339 
345 void
347  assert(node);
348  free_node_and_childs(node);
349 }
350 
351 
361 void
363  assert(node);
364  switch (node->type) {
367  if (node->parent) {
368  lib3ds_matrix_copy(node->matrix, node->parent->matrix);
369  } else {
371  }
373  break;
374  }
375 
377  float M[4][4];
379 
382  if (n->scl_track.nkeys) {
384  } else {
385  n->scl[0] = n->scl[1] = n->scl[2] = 1.0f;
386  }
388 
390  lib3ds_matrix_translate(M, n->pos[0], n->pos[1], n->pos[2]);
392  lib3ds_matrix_scale(M, n->scl[0], n->scl[1], n->scl[2]);
393 
394  if (node->parent) {
395  lib3ds_matrix_mult(node->matrix, node->parent->matrix, M);
396  } else {
397  lib3ds_matrix_copy(node->matrix, M);
398  }
399  break;
400  }
401 
402  case LIB3DS_NODE_CAMERA: {
407  if (node->parent) {
408  lib3ds_matrix_copy(node->matrix, node->parent->matrix);
409  } else {
411  }
412  lib3ds_matrix_translate(node->matrix, n->pos[0], n->pos[1], n->pos[2]);
413  break;
414  }
415 
419  if (node->parent) {
420  lib3ds_matrix_copy(node->matrix, node->parent->matrix);
421  } else {
423  }
424  lib3ds_matrix_translate(node->matrix, n->pos[0], n->pos[1], n->pos[2]);
425  break;
426  }
427 
428  case LIB3DS_NODE_OMNILIGHT: {
432  if (node->parent) {
433  lib3ds_matrix_copy(node->matrix, node->parent->matrix);
434  } else {
436  }
437  lib3ds_matrix_translate(node->matrix, n->pos[0], n->pos[1], n->pos[2]);
438  break;
439  }
440 
441  case LIB3DS_NODE_SPOTLIGHT: {
448  if (node->parent) {
449  lib3ds_matrix_copy(node->matrix, node->parent->matrix);
450  } else {
452  }
453  lib3ds_matrix_translate(node->matrix, n->pos[0], n->pos[1], n->pos[2]);
454  break;
455  }
456 
460  if (node->parent) {
461  lib3ds_matrix_copy(node->matrix, node->parent->matrix);
462  } else {
464  }
465  lib3ds_matrix_translate(node->matrix, n->pos[0], n->pos[1], n->pos[2]);
466  break;
467  }
468  }
469  {
470  Lib3dsNode *p;
471  for (p = node->childs; p != 0; p = p->next) {
472  lib3ds_node_eval(p, t);
473  }
474  }
475 }
476 
477 
490 Lib3dsNode*
492  Lib3dsNode *p, *q;
493 
494  for (p = node->childs; p != 0; p = p->next) {
495  if ((p->type == type) && (strcmp(p->name, name) == 0)) {
496  return(p);
497  }
498  q = lib3ds_node_by_name(p, name, type);
499  if (q) {
500  return(q);
501  }
502  }
503  return(0);
504 }
505 
506 
517 Lib3dsNode*
519  Lib3dsNode *p, *q;
520 
521  for (p = node->childs; p != 0; p = p->next) {
522  if (p->node_id == node_id) {
523  return(p);
524  }
525  q = lib3ds_node_by_id(p, node_id);
526  if (q) {
527  return(q);
528  }
529  }
530  return(0);
531 }
532 
533 
534 void
536  Lib3dsChunk c;
537  uint16_t chunk;
538 
539  assert(node);
540  lib3ds_chunk_read_start(&c, 0, io);
541 
542  switch (c.chunk) {
544  case CHK_OBJECT_NODE_TAG:
545  case CHK_CAMERA_NODE_TAG:
546  case CHK_TARGET_NODE_TAG:
547  case CHK_LIGHT_NODE_TAG:
550  break;
551  default:
552  return;
553  }
554 
555  while ((chunk = lib3ds_chunk_read_next(&c, io)) != 0) {
556  switch (chunk) {
557  case CHK_NODE_ID: {
558  node->node_id = lib3ds_io_read_word(io);
559  lib3ds_io_log_indent(io, 1);
560  lib3ds_io_log(io, LIB3DS_LOG_INFO, "ID=%d", (short)node->node_id);
561  lib3ds_io_log_indent(io, -1);
562  break;
563  }
564 
565  case CHK_NODE_HDR: {
566  lib3ds_io_read_string(io, node->name, 64);
567  node->flags = lib3ds_io_read_word(io);
568  node->flags |= ((uint32_t)lib3ds_io_read_word(io)) << 16;
569  node->user_id = lib3ds_io_read_word(io);
570 
571  lib3ds_io_log_indent(io, 1);
572  lib3ds_io_log(io, LIB3DS_LOG_INFO, "NAME=%s", node->name);
573  lib3ds_io_log(io, LIB3DS_LOG_INFO, "PARENT=%d", (short)node->user_id);
574  lib3ds_io_log_indent(io, -1);
575  break;
576  }
577 
578  case CHK_PIVOT: {
579  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
582  } else {
583  lib3ds_chunk_unknown(chunk, io);
584  }
585  break;
586  }
587 
588  case CHK_INSTANCE_NAME: {
589  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
592  } else {
593  lib3ds_chunk_unknown(chunk, io);
594  }
595  break;
596  }
597 
598  case CHK_BOUNDBOX: {
599  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
603  } else {
604  lib3ds_chunk_unknown(chunk, io);
605  }
606  break;
607  }
608 
609  case CHK_COL_TRACK_TAG: {
610  Lib3dsTrack *track = 0;
611  switch (node->type) {
614  track = &n->color_track;
615  break;
616  }
617  case LIB3DS_NODE_OMNILIGHT: {
619  track = &n->color_track;
620  break;
621  }
622  case LIB3DS_NODE_SPOTLIGHT: {
624  track = &n->color_track;
625  break;
626  }
627  default:
628  lib3ds_chunk_unknown(chunk, io);
629  }
630  if (track) {
631  lib3ds_track_read(track, io);
632  }
633  break;
634  }
635 
636  case CHK_POS_TRACK_TAG: {
637  Lib3dsTrack *track = 0;
638  switch (node->type) {
641  track = &n->pos_track;
642  break;
643  }
644  case LIB3DS_NODE_CAMERA: {
646  track = &n->pos_track;
647  break;
648  }
651  track = &n->pos_track;
652  break;
653  }
654  case LIB3DS_NODE_OMNILIGHT: {
656  track = &n->pos_track;
657  break;
658  }
659  case LIB3DS_NODE_SPOTLIGHT: {
661  track = &n->pos_track;
662  break;
663  }
666  track = &n->pos_track;
667  break;
668  }
669  default:
670  lib3ds_chunk_unknown(chunk, io);
671  }
672  if (track) {
673  lib3ds_track_read(track, io);
674  }
675  break;
676  }
677 
678  case CHK_ROT_TRACK_TAG: {
679  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
682  lib3ds_track_read(&n->rot_track, io);
683  } else {
684  lib3ds_chunk_unknown(chunk, io);
685  }
686  break;
687  }
688 
689  case CHK_SCL_TRACK_TAG: {
690  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
693  lib3ds_track_read(&n->scl_track, io);
694  } else {
695  lib3ds_chunk_unknown(chunk, io);
696  }
697  break;
698  }
699 
700  case CHK_FOV_TRACK_TAG: {
701  if (node->type == LIB3DS_NODE_CAMERA) {
704  lib3ds_track_read(&n->fov_track, io);
705  } else {
706  lib3ds_chunk_unknown(chunk, io);
707  }
708  break;
709  }
710 
711  case CHK_HOT_TRACK_TAG: {
712  if (node->type == LIB3DS_NODE_SPOTLIGHT) {
716  } else {
717  lib3ds_chunk_unknown(chunk, io);
718  }
719  break;
720  }
721 
722  case CHK_FALL_TRACK_TAG: {
723  if (node->type == LIB3DS_NODE_SPOTLIGHT) {
727  } else {
728  lib3ds_chunk_unknown(chunk, io);
729  }
730  break;
731  }
732 
733  case CHK_ROLL_TRACK_TAG: {
734  switch (node->type) {
735  case LIB3DS_NODE_CAMERA: {
738  lib3ds_track_read(&n->roll_track, io);
739  break;
740  }
741  case LIB3DS_NODE_SPOTLIGHT: {
744  lib3ds_track_read(&n->roll_track, io);
745  break;
746  }
747  default:
748  lib3ds_chunk_unknown(chunk, io);
749  }
750  break;
751  }
752 
753  case CHK_HIDE_TRACK_TAG: {
754  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
757  lib3ds_track_read(&n->hide_track, io);
758  } else {
759  lib3ds_chunk_unknown(chunk, io);
760  }
761  break;
762  }
763 
764  case CHK_MORPH_SMOOTH: {
765  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
768  } else {
769  lib3ds_chunk_unknown(chunk, io);
770  }
771  }
772  break;
773 
774  /*
775  case LIB3DS_MORPH_TRACK_TAG: {
776  if (node->type == LIB3DS_NODE_MESH_INSTANCE) {
777  Lib3dsMeshInstanceNode *n = (Lib3dsMeshInstanceNode*)node;
778  n->morph_track = lib3ds_track_new(node, LIB3DS_TRACK_MORPH, 0);
779  lib3ds_track_read(n->morph_track, io);
780  } else {
781  lib3ds_chunk_unknown(chunk, io);
782  }
783  }
784  break;
785  */
786 
787  default:
788  lib3ds_chunk_unknown(chunk, io);
789  }
790  }
791 
792  lib3ds_chunk_read_end(&c, io);
793 }
794 
795 
796 void
797 lib3ds_node_write(Lib3dsNode *node, uint16_t node_id, uint16_t parent_id, Lib3dsIo *io) {
798  Lib3dsChunk c;
799 
800  switch (node->type) {
803  break;
804 
807  break;
808 
809  case LIB3DS_NODE_CAMERA:
811  break;
812 
815  break;
816 
819  break;
820 
823  break;
824 
827  break;
828 
829  default:
830  assert(0);
831  return;
832  }
833 
834  lib3ds_chunk_write_start(&c, io);
835 
836  { /*---- CHK_NODE_ID ----*/
837  Lib3dsChunk c;
838  c.chunk = CHK_NODE_ID;
839  c.size = 8;
840  lib3ds_chunk_write(&c, io);
841  lib3ds_io_write_intw(io, node_id);
842  }
843 
844  { /*---- CHK_NODE_HDR ----*/
845  Lib3dsChunk c;
846  c.chunk = CHK_NODE_HDR;
847  c.size = 6 + 1 + (uint32_t)strlen(node->name) + 2 + 2 + 2;
848  lib3ds_chunk_write(&c, io);
849  lib3ds_io_write_string(io, node->name);
850  lib3ds_io_write_word(io, node->flags & 0xffff);
851  lib3ds_io_write_word(io, (node->flags >> 16) & 0xffff);
852  lib3ds_io_write_word(io, parent_id);
853  }
854 
855  switch (c.chunk) {
856  case CHK_AMBIENT_NODE_TAG: {
858  if (n->color_track.nkeys) { /*---- CHK_COL_TRACK_TAG ----*/
859  Lib3dsChunk c;
861  lib3ds_chunk_write_start(&c, io);
863  lib3ds_chunk_write_end(&c, io);
864  }
865  break;
866  }
867 
868  case CHK_OBJECT_NODE_TAG: {
870  { /*---- CHK_PIVOT ----*/
871  Lib3dsChunk c;
872  c.chunk = CHK_PIVOT;
873  c.size = 18;
874  lib3ds_chunk_write(&c, io);
876  }
877 
878  { /*---- CHK_INSTANCE_NAME ----*/
879  Lib3dsChunk c;
880  const char *name;
881  if (strlen(n->instance_name)) {
882  name = n->instance_name;
883 
885  c.size = 6 + 1 + (uint32_t)strlen(name);
886  lib3ds_chunk_write(&c, io);
887  lib3ds_io_write_string(io, name);
888  }
889  }
890  {
891  int i;
892  for (i = 0; i < 3; ++i) {
893  if ((fabs(n->bbox_min[i]) > LIB3DS_EPSILON) ||
894  (fabs(n->bbox_max[i]) > LIB3DS_EPSILON)) {
895  break;
896  }
897  }
898 
899  if (i < 3) { /*---- CHK_BOUNDBOX ----*/
900  Lib3dsChunk c;
901  c.chunk = CHK_BOUNDBOX;
902  c.size = 30;
903  lib3ds_chunk_write(&c, io);
906  }
907  }
908 
909  if (n->pos_track.nkeys) { /*---- CHK_POS_TRACK_TAG ----*/
910  Lib3dsChunk c;
912  lib3ds_chunk_write_start(&c, io);
913  lib3ds_track_write(&n->pos_track, io);
914  lib3ds_chunk_write_end(&c, io);
915  }
916  if (n->rot_track.nkeys) { /*---- CHK_ROT_TRACK_TAG ----*/
917  Lib3dsChunk c;
919  lib3ds_chunk_write_start(&c, io);
920  lib3ds_track_write(&n->rot_track, io);
921  lib3ds_chunk_write_end(&c, io);
922  }
923  if (n->scl_track.nkeys) { /*---- LIB3DS_SCL_TRACK_TAG ----*/
924  Lib3dsChunk c;
926  lib3ds_chunk_write_start(&c, io);
927  lib3ds_track_write(&n->scl_track, io);
928  lib3ds_chunk_write_end(&c, io);
929  }
930  if (n->hide_track.nkeys) { /*---- CHK_HIDE_TRACK_TAG ----*/
931  Lib3dsChunk c;
933  lib3ds_chunk_write_start(&c, io);
935  lib3ds_chunk_write_end(&c, io);
936  }
937  if (fabs(n->morph_smooth) > LIB3DS_EPSILON) { /*---- CHK_MORPH_SMOOTH ----*/
938  Lib3dsChunk c;
940  c.size = 10;
941  lib3ds_chunk_write(&c, io);
943  }
944  break;
945  }
946 
947  case CHK_CAMERA_NODE_TAG: {
949  if (n->pos_track.nkeys) { /*---- CHK_POS_TRACK_TAG ----*/
950  Lib3dsChunk c;
952  lib3ds_chunk_write_start(&c, io);
953  lib3ds_track_write(&n->pos_track, io);
954  lib3ds_chunk_write_end(&c, io);
955  }
956  if (n->fov_track.nkeys) { /*---- CHK_FOV_TRACK_TAG ----*/
957  Lib3dsChunk c;
959  lib3ds_chunk_write_start(&c, io);
960  lib3ds_track_write(&n->fov_track, io);
961  lib3ds_chunk_write_end(&c, io);
962  }
963  if (n->roll_track.nkeys) { /*---- CHK_ROLL_TRACK_TAG ----*/
964  Lib3dsChunk c;
966  lib3ds_chunk_write_start(&c, io);
968  lib3ds_chunk_write_end(&c, io);
969  }
970  break;
971  }
972 
973  case CHK_TARGET_NODE_TAG: {
975  if (n->pos_track.nkeys) { /*---- CHK_POS_TRACK_TAG ----*/
976  Lib3dsChunk c;
978  lib3ds_chunk_write_start(&c, io);
979  lib3ds_track_write(&n->pos_track, io);
980  lib3ds_chunk_write_end(&c, io);
981  }
982  break;
983  }
984 
985  case CHK_LIGHT_NODE_TAG: {
987  if (n->pos_track.nkeys) { /*---- CHK_POS_TRACK_TAG ----*/
988  Lib3dsChunk c;
990  lib3ds_chunk_write_start(&c, io);
991  lib3ds_track_write(&n->pos_track, io);
992  lib3ds_chunk_write_end(&c, io);
993  }
994  if (n->color_track.nkeys) { /*---- CHK_COL_TRACK_TAG ----*/
995  Lib3dsChunk c;
997  lib3ds_chunk_write_start(&c, io);
999  lib3ds_chunk_write_end(&c, io);
1000  }
1001  break;
1002  }
1003 
1004  case CHK_SPOTLIGHT_NODE_TAG: {
1006  if (n->pos_track.nkeys) { /*---- CHK_POS_TRACK_TAG ----*/
1007  Lib3dsChunk c;
1009  lib3ds_chunk_write_start(&c, io);
1010  lib3ds_track_write(&n->pos_track, io);
1011  lib3ds_chunk_write_end(&c, io);
1012  }
1013  if (n->color_track.nkeys) { /*---- CHK_COL_TRACK_TAG ----*/
1014  Lib3dsChunk c;
1016  lib3ds_chunk_write_start(&c, io);
1018  lib3ds_chunk_write_end(&c, io);
1019  }
1020  if (n->hotspot_track.nkeys) { /*---- CHK_HOT_TRACK_TAG ----*/
1021  Lib3dsChunk c;
1023  lib3ds_chunk_write_start(&c, io);
1025  lib3ds_chunk_write_end(&c, io);
1026  }
1027  if (n->falloff_track.nkeys) { /*---- CHK_FALL_TRACK_TAG ----*/
1028  Lib3dsChunk c;
1030  lib3ds_chunk_write_start(&c, io);
1032  lib3ds_chunk_write_end(&c, io);
1033  }
1034  if (n->roll_track.nkeys) { /*---- CHK_ROLL_TRACK_TAG ----*/
1035  Lib3dsChunk c;
1037  lib3ds_chunk_write_start(&c, io);
1038  lib3ds_track_write(&n->roll_track, io);
1039  lib3ds_chunk_write_end(&c, io);
1040  }
1041  break;
1042  }
1043 
1044  case CHK_L_TARGET_NODE_TAG: {
1046  if (n->pos_track.nkeys) { /*---- CHK_POS_TRACK_TAG ----*/
1047  Lib3dsChunk c;
1049  lib3ds_chunk_write_start(&c, io);
1050  lib3ds_track_write(&n->pos_track, io);
1051  lib3ds_chunk_write_end(&c, io);
1052  }
1053  break;
1054  }
1055 
1056  default:
1057  break;
1058  }
1059 
1060  lib3ds_chunk_write_end(&c, io);
1061 }
1062 
void lib3ds_io_write_intw(Lib3dsIo *io, int16_t w)
Definition: lib3ds_io.c:368
LIB3DSAPI void lib3ds_track_resize(Lib3dsTrack *track, int nkeys)
Definition: lib3ds_track.c:40
Lib3dsTrack pos_track
Definition: lib3ds.h:506
LIB3DSAPI Lib3dsCameraNode * lib3ds_node_new_camera(Lib3dsCamera *camera)
Definition: lib3ds_node.c:168
Lib3dsTrack fov_track
Definition: lib3ds.h:492
else Out of place iCCP chunk
Definition: pngrutil.c:1260
LIB3DSAPI void lib3ds_matrix_rotate_quat(float m[4][4], float q[4])
Lib3dsTrack color_track
Definition: lib3ds.h:518
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
Definition: gl2ext.h:845
const GLubyte GLuint GLuint GLuint GLuint alpha GLboolean GLboolean GLboolean GLboolean alpha GLint GLint GLsizei GLsizei GLenum type GLenum GLint GLenum GLint GLint GLsizei GLsizei GLint border GLenum GLint GLint GLint GLint GLint GLsizei GLsizei height GLsizei GLsizei GLenum GLenum const GLvoid *pixels GLenum GLint GLint GLint GLint j2 GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble zFar GLenum light
Definition: SDL_glfuncs.h:144
#define NULL
Definition: ftobjs.h:61
LIB3DSAPI Lib3dsOmnilightNode * lib3ds_node_new_omnilight(Lib3dsLight *light)
Definition: lib3ds_node.c:208
unsigned user_id
Definition: lib3ds.h:406
char name[64]
Definition: lib3ds.h:286
unsigned short uint16_t
LIB3DSAPI Lib3dsAmbientColorNode * lib3ds_node_new_ambient_color(float color0[3])
Definition: lib3ds_node.c:108
Lib3dsTargetNode * lib3ds_node_new_spotligf_target(Lib3dsLight *light)
Definition: lib3ds_node.c:257
GLclampd n
Definition: glew.h:7287
Lib3dsNodeType type
Definition: lib3ds.h:411
char name[64]
Definition: lib3ds.h:362
SDL_EventEntry * free
Definition: SDL_events.c:80
float value[4]
Definition: lib3ds.h:434
void lib3ds_io_read_vector(Lib3dsIo *io, float v[3])
Definition: lib3ds_io.c:258
Lib3dsTrack pos_track
Definition: lib3ds.h:491
GLdouble GLdouble t
Definition: glew.h:1384
float pos[3]
Definition: lib3ds.h:504
Lib3dsKey * keys
Definition: lib3ds.h:459
void lib3ds_node_read(Lib3dsNode *node, Lib3dsIo *io)
Definition: lib3ds_node.c:535
Lib3dsTrack color_track
Definition: lib3ds.h:465
float position[3]
Definition: lib3ds.h:288
void lib3ds_chunk_unknown(uint16_t chunk, Lib3dsIo *io)
Definition: lib3ds_chunk.c:140
EGLImageKHR EGLint * name
Definition: eglext.h:284
LIB3DSAPI void lib3ds_matrix_scale(float m[4][4], float x, float y, float z)
#define assert(x)
Definition: SDL_malloc.c:1234
LIB3DSAPI void lib3ds_matrix_identity(float m[4][4])
Definition: lib3ds_matrix.c:42
#define calloc
Definition: SDL_malloc.c:636
uint32_t size
Definition: lib3ds_impl.h:297
LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, float t)
Definition: lib3ds_node.c:362
LIB3DSAPI void lib3ds_matrix_mult(float m[4][4], float a[4][4], float b[4][4])
uint16_t lib3ds_chunk_read_next(Lib3dsChunk *c, Lib3dsIo *io)
Definition: lib3ds_chunk.c:68
void lib3ds_track_read(Lib3dsTrack *track, Lib3dsIo *io)
Definition: lib3ds_track.c:422
float roll
Definition: lib3ds.h:290
unsigned short node_id
Definition: lib3ds.h:412
float target[3]
Definition: lib3ds.h:307
void lib3ds_io_write_string(Lib3dsIo *io, const char *s)
Definition: lib3ds_io.c:443
float roll
Definition: lib3ds.h:308
Lib3dsTrack pos_track
Definition: lib3ds.h:480
void lib3ds_chunk_write_start(Lib3dsChunk *c, Lib3dsIo *io)
Definition: lib3ds_chunk.c:119
void lib3ds_io_write_vector(Lib3dsIo *io, float v[3])
Definition: lib3ds_io.c:422
float color[3]
Definition: lib3ds.h:505
LIB3DSAPI Lib3dsTargetNode * lib3ds_node_new_camera_target(Lib3dsCamera *camera)
Definition: lib3ds_node.c:191
LIB3DSAPI void lib3ds_vector_copy(float dst[3], float src[3])
Definition: lib3ds_vector.c:39
void lib3ds_io_write_float(Lib3dsIo *io, float l)
Definition: lib3ds_io.c:402
Lib3dsTrack hotspot_track
Definition: lib3ds.h:519
LIB3DSAPI Lib3dsNode * lib3ds_node_new(Lib3dsNodeType type)
Definition: lib3ds_node.c:30
float pos[3]
Definition: lib3ds.h:488
LIB3DSAPI void lib3ds_track_eval_vector(Lib3dsTrack *track, float v[3], float t)
Definition: lib3ds_track.c:357
LIB3DSAPI void lib3ds_track_eval_bool(Lib3dsTrack *track, int *b, float t)
Definition: lib3ds_track.c:277
struct Lib3dsNode * next
Definition: lib3ds.h:408
Lib3dsTrackType type
Definition: lib3ds.h:457
float hotspot
Definition: lib3ds.h:326
void lib3ds_node_write(Lib3dsNode *node, uint16_t node_id, uint16_t parent_id, Lib3dsIo *io)
Definition: lib3ds_node.c:797
LIB3DSAPI void lib3ds_vector_make(float c[3], float x, float y, float z)
Definition: lib3ds_vector.c:22
GLfloat GLfloat p
Definition: glew.h:14938
LIB3DSAPI void lib3ds_vector_zero(float c[3])
Definition: lib3ds_vector.c:30
const GLfloat * c
Definition: glew.h:14913
LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node)
Definition: lib3ds_node.c:346
char name[64]
Definition: lib3ds.h:301
Lib3dsTrack rot_track
Definition: lib3ds.h:481
float fov
Definition: lib3ds.h:291
LIB3DSAPI void lib3ds_track_eval_quat(Lib3dsTrack *track, float q[4], float t)
Definition: lib3ds_track.c:367
uint16_t lib3ds_io_read_word(Lib3dsIo *io)
Definition: lib3ds_io.c:156
float lib3ds_io_read_float(Lib3dsIo *io)
Definition: lib3ds_io.c:237
char instance_name[64]
Definition: lib3ds.h:471
void lib3ds_chunk_read_end(Lib3dsChunk *c, Lib3dsIo *io)
Definition: lib3ds_chunk.c:96
#define LIB3DS_EPSILON
Definition: lib3ds_impl.h:55
LIB3DSAPI Lib3dsMeshInstanceNode * lib3ds_node_new_mesh_instance(Lib3dsMesh *mesh, const char *instance_name, float pos0[3], float scl0[3], float rot0[4])
Definition: lib3ds_node.c:127
float matrix[4][4]
Definition: lib3ds.h:415
void lib3ds_io_log_indent(Lib3dsIo *io, int indent)
Definition: lib3ds_io.c:119
float color[3]
Definition: lib3ds.h:305
unsigned int uint32_t
Lib3dsTrack roll_track
Definition: lib3ds.h:521
LIB3DSAPI void lib3ds_matrix_translate(float m[4][4], float x, float y, float z)
Lib3dsTrack color_track
Definition: lib3ds.h:507
struct Lib3dsNode * childs
Definition: lib3ds.h:409
int nkeys
Definition: lib3ds.h:458
void lib3ds_io_read_string(Lib3dsIo *io, char *s, int buflen)
Definition: lib3ds_io.c:285
float pos[3]
Definition: lib3ds.h:512
LIB3DSAPI void lib3ds_track_eval_float(Lib3dsTrack *track, float *f, float t)
Definition: lib3ds_track.c:347
GLdouble GLdouble GLdouble GLdouble q
Definition: glew.h:1400
Lib3dsTrack pos_track
Definition: lib3ds.h:517
void lib3ds_io_log(Lib3dsIo *io, Lib3dsLogLevel level, const char *format,...)
Definition: lib3ds_io.c:100
void lib3ds_chunk_write(Lib3dsChunk *c, Lib3dsIo *io)
Definition: lib3ds_chunk.c:111
static void free_node_and_childs(Lib3dsNode *node)
Definition: lib3ds_node.c:274
void lib3ds_chunk_read_start(Lib3dsChunk *c, uint16_t chunk, Lib3dsIo *io)
Definition: lib3ds_chunk.c:50
Lib3dsTrack scl_track
Definition: lib3ds.h:482
LIB3DSAPI Lib3dsNode * lib3ds_node_by_name(Lib3dsNode *node, const char *name, Lib3dsNodeType type)
Definition: lib3ds_node.c:491
LIB3DSAPI Lib3dsNode * lib3ds_node_by_id(Lib3dsNode *node, unsigned short node_id)
Definition: lib3ds_node.c:518
struct Lib3dsNode * parent
Definition: lib3ds.h:410
Lib3dsTrack hide_track
Definition: lib3ds.h:483
LIB3DSAPI Lib3dsSpotlightNode * lib3ds_node_new_spotlight(Lib3dsLight *light)
Definition: lib3ds_node.c:228
uint16_t chunk
Definition: lib3ds_impl.h:296
int i
Definition: pngrutil.c:1377
float target[3]
Definition: lib3ds.h:289
float position[3]
Definition: lib3ds.h:306
void lib3ds_track_write(Lib3dsTrack *track, Lib3dsIo *io)
Definition: lib3ds_track.c:501
float falloff
Definition: lib3ds.h:327
char name[64]
Definition: lib3ds.h:413
float color[3]
Definition: lib3ds.h:513
float pos[3]
Definition: lib3ds.h:498
double fabs(double x)
Definition: s_fabs.c:29
Lib3dsTrack pos_track
Definition: lib3ds.h:499
unsigned flags
Definition: lib3ds.h:414
void lib3ds_chunk_write_end(Lib3dsChunk *c, Lib3dsIo *io)
Definition: lib3ds_chunk.c:129
Lib3dsTrack roll_track
Definition: lib3ds.h:493
Lib3dsNodeType
Definition: lib3ds.h:387
LIB3DSAPI void lib3ds_matrix_copy(float dest[4][4], float src[4][4])
Definition: lib3ds_matrix.c:56
Lib3dsTrack falloff_track
Definition: lib3ds.h:520
void lib3ds_io_write_word(Lib3dsIo *io, uint16_t w)
Definition: lib3ds_io.c:322