| 267 | } |
| 268 | |
| 269 | void MeshComponent::prepRenderImage( SceneRenderState *state ) |
| 270 | { |
| 271 | if (!mEnabled || !mOwner || !mShapeInstance) |
| 272 | return; |
| 273 | |
| 274 | Point3F cameraOffset; |
| 275 | mOwner->getRenderTransform().getColumn(3, &cameraOffset); |
| 276 | cameraOffset -= state->getDiffuseCameraPosition(); |
| 277 | F32 dist = cameraOffset.len(); |
| 278 | if (dist < 0.01f) |
| 279 | dist = 0.01f; |
| 280 | |
| 281 | Point3F objScale = getOwner()->getScale(); |
| 282 | F32 invScale = (1.0f / getMax(getMax(objScale.x, objScale.y), objScale.z)); |
| 283 | |
| 284 | mShapeInstance->setDetailFromDistance(state, dist * invScale); |
| 285 | |
| 286 | if (mShapeInstance->getCurrentDetail() < 0) |
| 287 | return; |
| 288 | |
| 289 | GFXTransformSaver saver; |
| 290 | |
| 291 | // Set up our TS render state. |
| 292 | TSRenderState rdata; |
| 293 | rdata.setSceneState(state); |
| 294 | rdata.setFadeOverride(1.0f); |
| 295 | rdata.setOriginSort(false); |
| 296 | |
| 297 | // We might have some forward lit materials |
| 298 | // so pass down a query to gather lights. |
| 299 | LightQuery query; |
| 300 | query.init(mOwner->getWorldSphere()); |
| 301 | rdata.setLightQuery(&query); |
| 302 | |
| 303 | MatrixF mat = mOwner->getRenderTransform(); |
| 304 | Point3F renderPos = mat.getPosition(); |
| 305 | EulerF renderRot = mat.toEuler(); |
| 306 | mat.scale(objScale); |
| 307 | GFX->setWorldMatrix(mat); |
| 308 | |
| 309 | mShapeInstance->render(rdata); |
| 310 | } |
| 311 | |
| 312 | void MeshComponent::updateShape() |
| 313 | { |
nothing calls this directly
no test coverage detected