00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "fltEyepoint.h"
00016 #include "fltRecordReader.h"
00017 #include "fltRecordWriter.h"
00018
00019
00020
00021
00022
00023
00024 FltEyepoint::
00025 FltEyepoint() {
00026 _rotation_center.set(0.0, 0.0, 0.0);
00027 _hpr.set(0.0, 0.0, 0.0);
00028 _rotation = LMatrix4::ident_mat();
00029 _fov = 60.0;
00030 _scale = 1.0;
00031 _near_clip = 0.1;
00032 _far_clip = 10000.0;
00033 _fly_through = LMatrix4::ident_mat();
00034 _eyepoint.set(0.0, 0.0, 0.0);
00035 _fly_through_yaw = 0.0;
00036 _fly_through_pitch = 0.0;
00037 _eyepoint_direction.set(0.0, 1.0, 0.0);
00038 _no_fly_through = true;
00039 _ortho_mode = false;
00040 _is_valid = true;
00041 _image_offset_x = 0;
00042 _image_offset_y = 0;
00043 _image_zoom = 1;
00044 }
00045
00046
00047
00048
00049
00050
00051 bool FltEyepoint::
00052 extract_record(FltRecordReader &reader) {
00053 DatagramIterator &iterator = reader.get_iterator();
00054
00055 _rotation_center[0] = iterator.get_be_float64();
00056 _rotation_center[1] = iterator.get_be_float64();
00057 _rotation_center[2] = iterator.get_be_float64();
00058 _hpr[0] = iterator.get_be_float32();
00059 _hpr[1] = iterator.get_be_float32();
00060 _hpr[2] = iterator.get_be_float32();
00061 int r;
00062 for (r = 0; r < 4; r++) {
00063 for (int c = 0; c < 4; c++) {
00064 _rotation(r, c) = iterator.get_be_float32();
00065 }
00066 }
00067 _fov = iterator.get_be_float32();
00068 _scale = iterator.get_be_float32();
00069 _near_clip = iterator.get_be_float32();
00070 _far_clip = iterator.get_be_float32();
00071 for (r = 0; r < 4; r++) {
00072 for (int c = 0; c < 4; c++) {
00073 _fly_through(r, c) = iterator.get_be_float32();
00074 }
00075 }
00076 _eyepoint[0] = iterator.get_be_float32();
00077 _eyepoint[1] = iterator.get_be_float32();
00078 _eyepoint[2] = iterator.get_be_float32();
00079 _fly_through_yaw = iterator.get_be_float32();
00080 _fly_through_pitch = iterator.get_be_float32();
00081 _eyepoint_direction[0] = iterator.get_be_float32();
00082 _eyepoint_direction[1] = iterator.get_be_float32();
00083 _eyepoint_direction[2] = iterator.get_be_float32();
00084 _no_fly_through = (iterator.get_be_int32() != 0);
00085 _ortho_mode = (iterator.get_be_int32() != 0);
00086 _is_valid = (iterator.get_be_int32() != 0);
00087 _image_offset_x = iterator.get_be_int32();
00088 _image_offset_y = iterator.get_be_int32();
00089 _image_zoom = iterator.get_be_int32();
00090 iterator.skip_bytes(4*9);
00091
00092 return true;
00093 }
00094
00095
00096
00097
00098
00099
00100 bool FltEyepoint::
00101 build_record(FltRecordWriter &writer) const {
00102 Datagram &datagram = writer.update_datagram();
00103
00104 datagram.add_be_float64(_rotation_center[0]);
00105 datagram.add_be_float64(_rotation_center[1]);
00106 datagram.add_be_float64(_rotation_center[2]);
00107 datagram.add_be_float32(_hpr[0]);
00108 datagram.add_be_float32(_hpr[1]);
00109 datagram.add_be_float32(_hpr[2]);
00110 int r;
00111 for (r = 0; r < 4; r++) {
00112 for (int c = 0; c < 4; c++) {
00113 datagram.add_be_float32(_rotation(r, c));
00114 }
00115 }
00116 datagram.add_be_float32(_fov);
00117 datagram.add_be_float32(_scale);
00118 datagram.add_be_float32(_near_clip);
00119 datagram.add_be_float32(_far_clip);
00120 for (r = 0; r < 4; r++) {
00121 for (int c = 0; c < 4; c++) {
00122 datagram.add_be_float32(_fly_through(r, c));
00123 }
00124 }
00125 datagram.add_be_float32(_eyepoint[0]);
00126 datagram.add_be_float32(_eyepoint[1]);
00127 datagram.add_be_float32(_eyepoint[2]);
00128 datagram.add_be_float32(_fly_through_yaw);
00129 datagram.add_be_float32(_fly_through_pitch);
00130 datagram.add_be_float32(_eyepoint_direction[0]);
00131 datagram.add_be_float32(_eyepoint_direction[1]);
00132 datagram.add_be_float32(_eyepoint_direction[2]);
00133 datagram.add_be_int32(_no_fly_through);
00134 datagram.add_be_int32(_ortho_mode);
00135 datagram.add_be_int32(_is_valid);
00136 datagram.add_be_int32(_image_offset_x);
00137 datagram.add_be_int32(_image_offset_y);
00138 datagram.add_be_int32(_image_zoom);
00139 datagram.pad_bytes(4*9);
00140
00141 return true;
00142 }