| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * PolySceneLight.cpp
- * Poly
- *
- * Created by Ivan Safrin on 9/21/08.
- * Copyright 2008 __MyCompanyName__. All rights reserved.
- *
- */
- #include "PolySceneLight.h"
- using namespace Polycode;
- SceneLight::SceneLight(int type, Number intensity, Number distance, Scene *parentScene) : SceneEntity() {
- this->type = type;
- this->intensity = intensity;
- this->distance = distance;
- this->depthWrite = false;
- lightMesh = new Mesh(Mesh::QUAD_MESH);
- lightMesh->createBox(0.1,0.1,0.1);
- bBoxRadius = lightMesh->getRadius();
- bBox = lightMesh->calculateBBox();
- shadowMapFOV = 70.0f;
- zBufferTexture = NULL;
- spotCamera = NULL;
- this->parentScene = parentScene;
- shadowsEnabled = false;
- }
- void SceneLight::enableShadows(bool val, Number resolution) {
- if(val) {
- if(!zBufferTexture) {
- CoreServices::getInstance()->getRenderer()->createRenderTextures(NULL, &zBufferTexture, resolution, resolution);
- }
- if(!spotCamera) {
- spotCamera = new Camera(parentScene);
- spotCamera->setPitch(-90.0f);
- addEntity(spotCamera);
- }
- shadowMapRes = resolution;
- shadowsEnabled = true;
- } else {
- shadowsEnabled = false;
- }
- }
- bool SceneLight::areShadowsEnabled() {
- return shadowsEnabled;
- }
- void SceneLight::setShadowMapFOV(Number fov) {
-
- }
- SceneLight::~SceneLight() {
- printf("Destroying scene light...\n");
- }
- void SceneLight::renderDepthMap(Scene *scene) {
- CoreServices::getInstance()->getRenderer()->clearScreen();
- CoreServices::getInstance()->getRenderer()->pushMatrix();
- CoreServices::getInstance()->getRenderer()->loadIdentity();
- CoreServices::getInstance()->getRenderer()->setViewportSize(shadowMapRes, shadowMapRes, shadowMapFOV);
- CoreServices::getInstance()->getRenderer()->bindFrameBufferTexture(zBufferTexture);
- scene->RenderDepthOnly(spotCamera);
-
- lightViewMatrix = CoreServices::getInstance()->getRenderer()->getModelviewMatrix() * CoreServices::getInstance()->getRenderer()->getProjectionMatrix();
- CoreServices::getInstance()->getRenderer()->unbindFramebuffers();
- CoreServices::getInstance()->getRenderer()->popMatrix();
- CoreServices::getInstance()->getRenderer()->setViewportSize(CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), 45.0f);
- }
- Matrix4 SceneLight::getLightViewMatrix() {
- return lightViewMatrix;
- }
- Texture *SceneLight::getZBufferTexture() {
- return zBufferTexture;
- }
- Number SceneLight::getIntensity() {
- return intensity;
- }
- Number SceneLight::getDistance() {
- return distance;
- }
- void SceneLight::Render() {
- /*
- CoreServices::getInstance()->getRenderer()->setTexture(NULL);
- CoreServices::getInstance()->getRenderer()->beginRenderOperation(lightMesh->getMeshType());
- for(int i=0; i < lightMesh->getPolygonCount(); i++) {
- CoreServices::getInstance()->getRenderer()->draw3DPolygon(lightMesh->getPolygon(i));
- }
- CoreServices::getInstance()->getRenderer()->endRenderOperation();
- */
- }
- int SceneLight::getType() {
- return type;
- }
|