Panda3D
|
00001 // Filename: fltEyepoint.cxx 00002 // Created by: drose (26Aug00) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #include "fltEyepoint.h" 00016 #include "fltRecordReader.h" 00017 #include "fltRecordWriter.h" 00018 00019 //////////////////////////////////////////////////////////////////// 00020 // Function: FltEyepoint::Constructor 00021 // Access: Public 00022 // Description: 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 // Function: FltEyepoint::extract_record 00048 // Access: Public 00049 // Description: 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 // Function: FltEyepoint::build_record 00097 // Access: Public 00098 // Description: 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 }