| [8] | 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | |
|---|
| [151] | 7 | |
|---|
| 8 | |
|---|
| [8] | 9 | |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | |
|---|
| [151] | 13 | |
|---|
| [8] | 14 | |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | |
|---|
| 22 | #define LIB3DS_EXPORT |
|---|
| [1531] | 23 | #include "shadow.h" |
|---|
| 24 | #include "chunk.h" |
|---|
| 25 | #include "readwrite.h" |
|---|
| [1563] | 26 | #include <math.h> |
|---|
| [8] | 27 | |
|---|
| [151] | 28 | |
|---|
| [8] | 29 | |
|---|
| 30 | |
|---|
| 31 | |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | |
|---|
| [151] | 35 | |
|---|
| [8] | 36 | |
|---|
| [151] | 37 | |
|---|
| [8] | 38 | |
|---|
| 39 | Lib3dsBool |
|---|
| [10076] | 40 | lib3ds_shadow_read(Lib3dsShadow *shadow, iostream *strm) |
|---|
| [8] | 41 | { |
|---|
| [151] | 42 | Lib3dsChunk c; |
|---|
| [8] | 43 | |
|---|
| [10076] | 44 | if (!lib3ds_chunk_read(&c, strm)) { |
|---|
| [151] | 45 | return(LIB3DS_FALSE); |
|---|
| 46 | } |
|---|
| 47 | |
|---|
| 48 | switch (c.chunk) { |
|---|
| 49 | case LIB3DS_SHADOW_MAP_SIZE: |
|---|
| 50 | { |
|---|
| [10076] | 51 | shadow->map_size=lib3ds_intw_read(strm); |
|---|
| [151] | 52 | } |
|---|
| 53 | break; |
|---|
| 54 | case LIB3DS_LO_SHADOW_BIAS: |
|---|
| 55 | { |
|---|
| [10076] | 56 | shadow->lo_bias=lib3ds_float_read(strm); |
|---|
| [151] | 57 | } |
|---|
| 58 | break; |
|---|
| 59 | case LIB3DS_HI_SHADOW_BIAS: |
|---|
| 60 | { |
|---|
| [10076] | 61 | shadow->hi_bias=lib3ds_float_read(strm); |
|---|
| [151] | 62 | } |
|---|
| 63 | break; |
|---|
| 64 | case LIB3DS_SHADOW_SAMPLES: |
|---|
| 65 | { |
|---|
| [10076] | 66 | shadow->samples=lib3ds_intw_read(strm); |
|---|
| [151] | 67 | } |
|---|
| 68 | break; |
|---|
| 69 | case LIB3DS_SHADOW_RANGE: |
|---|
| 70 | { |
|---|
| [10076] | 71 | shadow->range=lib3ds_intd_read(strm); |
|---|
| [151] | 72 | } |
|---|
| 73 | break; |
|---|
| 74 | case LIB3DS_SHADOW_FILTER: |
|---|
| 75 | { |
|---|
| [10076] | 76 | shadow->filter=lib3ds_float_read(strm); |
|---|
| [151] | 77 | } |
|---|
| 78 | break; |
|---|
| 79 | case LIB3DS_RAY_BIAS: |
|---|
| 80 | { |
|---|
| [10076] | 81 | shadow->ray_bias=lib3ds_float_read(strm); |
|---|
| [151] | 82 | } |
|---|
| 83 | break; |
|---|
| 84 | } |
|---|
| 85 | |
|---|
| 86 | return(LIB3DS_TRUE); |
|---|
| [8] | 87 | } |
|---|
| 88 | |
|---|
| 89 | |
|---|
| 90 | |
|---|
| [151] | 91 | |
|---|
| [8] | 92 | |
|---|
| 93 | Lib3dsBool |
|---|
| [10076] | 94 | lib3ds_shadow_write(Lib3dsShadow *shadow, iostream *strm) |
|---|
| [8] | 95 | { |
|---|
| [151] | 96 | if (fabs(shadow->lo_bias)>LIB3DS_EPSILON) { |
|---|
| 97 | Lib3dsChunk c; |
|---|
| 98 | c.chunk=LIB3DS_LO_SHADOW_BIAS; |
|---|
| 99 | c.size=10; |
|---|
| [10076] | 100 | lib3ds_chunk_write(&c,strm); |
|---|
| 101 | lib3ds_float_write(shadow->lo_bias,strm); |
|---|
| [151] | 102 | } |
|---|
| 103 | |
|---|
| 104 | if (fabs(shadow->hi_bias)>LIB3DS_EPSILON) { |
|---|
| 105 | Lib3dsChunk c; |
|---|
| 106 | c.chunk=LIB3DS_HI_SHADOW_BIAS; |
|---|
| 107 | c.size=10; |
|---|
| [10076] | 108 | lib3ds_chunk_write(&c,strm); |
|---|
| 109 | lib3ds_float_write(shadow->hi_bias,strm); |
|---|
| [151] | 110 | } |
|---|
| 111 | |
|---|
| 112 | if (shadow->map_size) { |
|---|
| 113 | Lib3dsChunk c; |
|---|
| 114 | c.chunk=LIB3DS_SHADOW_MAP_SIZE; |
|---|
| 115 | c.size=8; |
|---|
| [10076] | 116 | lib3ds_chunk_write(&c,strm); |
|---|
| 117 | lib3ds_intw_write(shadow->map_size,strm); |
|---|
| [151] | 118 | } |
|---|
| 119 | |
|---|
| 120 | if (shadow->samples) { |
|---|
| 121 | Lib3dsChunk c; |
|---|
| 122 | c.chunk=LIB3DS_SHADOW_SAMPLES; |
|---|
| 123 | c.size=8; |
|---|
| [10076] | 124 | lib3ds_chunk_write(&c,strm); |
|---|
| 125 | lib3ds_intw_write(shadow->samples,strm); |
|---|
| [151] | 126 | } |
|---|
| 127 | |
|---|
| 128 | if (shadow->range) { |
|---|
| 129 | Lib3dsChunk c; |
|---|
| 130 | c.chunk=LIB3DS_SHADOW_RANGE; |
|---|
| 131 | c.size=10; |
|---|
| [10076] | 132 | lib3ds_chunk_write(&c,strm); |
|---|
| 133 | lib3ds_intd_write(shadow->range,strm); |
|---|
| [151] | 134 | } |
|---|
| 135 | |
|---|
| 136 | if (fabs(shadow->filter)>LIB3DS_EPSILON) { |
|---|
| 137 | Lib3dsChunk c; |
|---|
| 138 | c.chunk=LIB3DS_SHADOW_FILTER; |
|---|
| 139 | c.size=10; |
|---|
| [10076] | 140 | lib3ds_chunk_write(&c,strm); |
|---|
| 141 | lib3ds_float_write(shadow->filter,strm); |
|---|
| [151] | 142 | } |
|---|
| 143 | if (fabs(shadow->ray_bias)>LIB3DS_EPSILON) { |
|---|
| 144 | Lib3dsChunk c; |
|---|
| 145 | c.chunk=LIB3DS_RAY_BIAS; |
|---|
| 146 | c.size=10; |
|---|
| [10076] | 147 | lib3ds_chunk_write(&c,strm); |
|---|
| 148 | lib3ds_float_write(shadow->ray_bias,strm); |
|---|
| [151] | 149 | } |
|---|
| 150 | return(LIB3DS_TRUE); |
|---|
| [8] | 151 | } |
|---|
| 152 | |
|---|
| 153 | |
|---|
| 154 | |
|---|
| 155 | |
|---|
| 156 | |
|---|
| 157 | |
|---|
| 158 | |
|---|
| 159 | |
|---|
| 160 | |
|---|