Changeset 3098
- Timestamp:
- 12/02/09 13:57:01 (9 months ago)
- Location:
- branches/active/view_performance/engine/core
- Files:
-
- 3 modified
-
util/math/matrix.h (modified) (2 diffs)
-
view/camera.cpp (modified) (3 diffs)
-
view/layercache.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/active/view_performance/engine/core/util/math/matrix.h
r2515 r3098 224 224 return m[ind]; 225 225 } 226 inline const T& operator[] (int ind) const { 227 assert(ind > -1 && ind < 16); 228 return m[ind]; 229 } 226 230 227 231 /** Apply the matrix dot product to this matrix … … 375 379 */ 376 380 template<typename T> 377 std::ostream& operator<<(std::ostream& os, Matrix<T>& m) { 381 std::ostream& operator<<(std::ostream& os, const Matrix<T>& m) { 382 378 383 return os << "\n|" << m[0] << "," << m[4] << "," << m[8] << "," << m[12] << "|\n" << \ 379 384 "|" << m[1] << "," << m[5] << "," << m[9] << "," << m[13] << "|\n" << \ -
branches/active/view_performance/engine/core/view/camera.cpp
r3037 r3098 232 232 m_inverse_matrix = m_matrix.inverse(); 233 233 234 m_vs_matrix.applyTranslate(0,0,0); 234 235 m_vs_matrix.applyRotate(-m_rotation, 0.0, 0.0, 1.0); 235 236 m_vs_matrix.applyRotate(-m_tilt, 1.0, 0.0, 0.0); 236 237 m_vs_inverse_matrix = m_vs_matrix.inverse(); 238 FL_WARN(_log, LMsg("matrix: ") << m_matrix << " vs_matrix: " << m_vs_matrix); 237 239 } 238 240 … … 267 269 268 270 ScreenPoint Camera::virtualScreenToScreen(const ScreenPoint& p) { 269 Point3D pt = doublePt2intPt( m_matrix * (m_vs_inverse_matrix * intPt2doublePt(p))); 271 Point3D pt = p; 272 pt.z = 0; 273 pt = doublePt2intPt( m_matrix * (m_vs_inverse_matrix * intPt2doublePt(pt))); 270 274 pt.x += m_viewport.w / 2; 271 275 pt.y += m_viewport.h / 2; 276 pt.z = p.z; 272 277 return pt; 273 278 } … … 277 282 pt.x -= m_viewport.w / 2; 278 283 pt.y -= m_viewport.h / 2; 279 return doublePt2intPt( m_vs_matrix * (m_inverse_matrix * intPt2doublePt(pt))); 284 pt.z = 0; 285 DoublePoint3D pt2 = m_inverse_matrix * intPt2doublePt(pt); 286 pt2.z = 0; 287 pt2 = m_vs_matrix * pt2; 288 pt2.z = p.z; 289 return doublePt2intPt(pt2); 280 290 } 281 291 -
branches/active/view_performance/engine/core/view/layercache.cpp
r3037 r3098 246 246 fullUpdate(); 247 247 248 bool m_updated = true;249 248 Point3D cammove = camera_update.getCameraMovement(); 250 249 Point3D screen_delta = m_camera->getOrigin(); … … 252 251 253 252 Rect viewport = camera_update.getViewport(); 254 253 Rect screen_viewport = viewport; 254 Point3D viewport_a = m_camera->screenToVirtualScreen(Point3D(viewport.x, viewport.y)); 255 Point3D viewport_b = m_camera->screenToVirtualScreen(Point3D(viewport.x, viewport.bottom())); 256 Point3D viewport_c = m_camera->screenToVirtualScreen(Point3D(viewport.right(), viewport.y)); 257 Point3D viewport_d = m_camera->screenToVirtualScreen(Point3D(viewport.right(), viewport.bottom())); 258 viewport.x = std::min(std::min(viewport_a.x, viewport_b.x), std::min(viewport_c.x, viewport_d.x)); 259 viewport.y = std::min(std::min(viewport_a.y, viewport_b.y), std::min(viewport_c.y, viewport_d.y)); 260 viewport.w = std::max(std::max(viewport_a.x, viewport_b.x), std::max(viewport_c.x, viewport_d.x)) - viewport.x; 261 viewport.h = std::max(std::max(viewport_a.y, viewport_b.y), std::max(viewport_c.y, viewport_d.y)) - viewport.y; 262 263 FL_LOG(_log, LMsg("camera-update viewport") << viewport); 264 255 265 std::vector<int> index_list; 256 266 collect(viewport, index_list); … … 280 290 } 281 291 282 if(item.cache_item.dimensions.intersects( viewport))292 if(item.cache_item.dimensions.intersects(screen_viewport)) 283 293 m_renderlist.push_back(item); 284 294 } 285 FL_LOG(_log, LMsg("camera-update ") << " N=" <<m_renderlist.size() << "/" << m_instances.size() );295 FL_LOG(_log, LMsg("camera-update ") << " N=" <<m_renderlist.size() << "/" << m_instances.size() << "/" << index_list.size()); 286 296 } 287 297
