From 33c5b754dec20df39b9df080679e3afaf30a8e81 Mon Sep 17 00:00:00 2001 From: kearwood Date: Thu, 5 Apr 2012 23:09:41 +0000 Subject: [PATCH] Creating object model to store lights returned by FBX import in preparation of deferred rendering. --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4029 --- KREngine/KREngine.xcodeproj/project.pbxproj | 134 +++++++-- .../KREngine/Classes/KRDirectionalLight.cpp | 26 ++ .../KREngine/Classes/KRDirectionalLight.h | 24 ++ KREngine/KREngine/Classes/KREngine.h | 2 + KREngine/KREngine/Classes/KREngine.mm | 8 +- KREngine/KREngine/Classes/KRLight.cpp | 26 ++ KREngine/KREngine/Classes/KRLight.h | 24 ++ KREngine/KREngine/Classes/KRLightManager.cpp | 26 ++ KREngine/KREngine/Classes/KRLightManager.h | 20 ++ KREngine/KREngine/Classes/KRPointLight.cpp | 26 ++ KREngine/KREngine/Classes/KRPointLight.h | 23 ++ KREngine/KREngine/Classes/KRResource+fbx.cpp | 265 ++---------------- KREngine/KREngine/Classes/KRSpotLight.cpp | 25 ++ KREngine/KREngine/Classes/KRSpotLight.h | 23 ++ 14 files changed, 399 insertions(+), 253 deletions(-) create mode 100644 KREngine/KREngine/Classes/KRDirectionalLight.cpp create mode 100644 KREngine/KREngine/Classes/KRDirectionalLight.h create mode 100644 KREngine/KREngine/Classes/KRLight.cpp create mode 100644 KREngine/KREngine/Classes/KRLight.h create mode 100644 KREngine/KREngine/Classes/KRLightManager.cpp create mode 100644 KREngine/KREngine/Classes/KRLightManager.h create mode 100644 KREngine/KREngine/Classes/KRPointLight.cpp create mode 100644 KREngine/KREngine/Classes/KRPointLight.h create mode 100644 KREngine/KREngine/Classes/KRSpotLight.cpp create mode 100644 KREngine/KREngine/Classes/KRSpotLight.h diff --git a/KREngine/KREngine.xcodeproj/project.pbxproj b/KREngine/KREngine.xcodeproj/project.pbxproj index 0ebff4c..817a5d5 100644 --- a/KREngine/KREngine.xcodeproj/project.pbxproj +++ b/KREngine/KREngine.xcodeproj/project.pbxproj @@ -13,6 +13,27 @@ E414BAE91435585A00A668C4 /* KRScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414BAE81435585A00A668C4 /* KRScene.cpp */; }; E414BAEB14355E5500A668C4 /* KRBoundingVolume.h in Headers */ = {isa = PBXBuildFile; fileRef = E414BAEA14355E5500A668C4 /* KRBoundingVolume.h */; }; E414BAED14355EFF00A668C4 /* KRBoundingVolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414BAEC14355EFF00A668C4 /* KRBoundingVolume.cpp */; }; + E461A152152E54B500F2044A /* KRLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A151152E54B500F2044A /* KRLight.h */; }; + E461A153152E54B500F2044A /* KRLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A151152E54B500F2044A /* KRLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E461A156152E54F800F2044A /* KRLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A155152E54F700F2044A /* KRLight.cpp */; }; + E461A159152E557E00F2044A /* KRPointLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A158152E557E00F2044A /* KRPointLight.cpp */; }; + E461A15A152E557E00F2044A /* KRPointLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A158152E557E00F2044A /* KRPointLight.cpp */; }; + E461A15C152E563100F2044A /* KRDirectionalLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A15B152E563000F2044A /* KRDirectionalLight.h */; }; + E461A15D152E563100F2044A /* KRDirectionalLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A15B152E563000F2044A /* KRDirectionalLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E461A15F152E565700F2044A /* KRDirectionalLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A15E152E565700F2044A /* KRDirectionalLight.cpp */; }; + E461A160152E565700F2044A /* KRDirectionalLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A15E152E565700F2044A /* KRDirectionalLight.cpp */; }; + E461A165152E56C000F2044A /* KRSpotLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A164152E56C000F2044A /* KRSpotLight.cpp */; }; + E461A166152E56C000F2044A /* KRSpotLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A164152E56C000F2044A /* KRSpotLight.cpp */; }; + E461A168152E570700F2044A /* KRSpotLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A167152E570500F2044A /* KRSpotLight.h */; }; + E461A169152E570700F2044A /* KRSpotLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A167152E570500F2044A /* KRSpotLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E461A16B152E575800F2044A /* KRLightManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A16A152E575700F2044A /* KRLightManager.h */; }; + E461A16C152E575800F2044A /* KRLightManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A16A152E575700F2044A /* KRLightManager.h */; }; + E461A16E152E576700F2044A /* KRLightManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A16D152E576700F2044A /* KRLightManager.cpp */; }; + E461A16F152E576700F2044A /* KRLightManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A16D152E576700F2044A /* KRLightManager.cpp */; }; + E461A175152E5C4800F2044A /* KRLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E461A155152E54F700F2044A /* KRLight.cpp */; }; + E461A176152E5C5600F2044A /* KRPointLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A157152E555400F2044A /* KRPointLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E461A177152E5C6600F2044A /* KRMat4.h in Headers */ = {isa = PBXBuildFile; fileRef = E491017613C99BDC0098455B /* KRMat4.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E461A17A152E5C9100F2044A /* KRMat4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E491017713C99BDC0098455B /* KRMat4.cpp */; }; E46DBE7B1512ACE600D59F86 /* KRMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E49E79FE1512615F009CF99C /* KRMesh.cpp */; }; E46DBE7F1512AF0200D59F86 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E46DBE7D1512AD4900D59F86 /* OpenGL.framework */; }; E46DBE801512AF4600D59F86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E491016413C99B9E0098455B /* Foundation.framework */; }; @@ -94,6 +115,16 @@ E45772F413C9A13C0037BEEA /* ObjectShader.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = ObjectShader.fsh; path = Shaders/ObjectShader.fsh; sourceTree = ""; }; E45772F513C9A13C0037BEEA /* ObjectShader.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; lineEnding = 0; name = ObjectShader.vsh; path = Shaders/ObjectShader.vsh; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.glsl; }; E45772F613C9A13C0037BEEA /* PostShader.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = PostShader.vsh; path = Shaders/PostShader.vsh; sourceTree = ""; }; + E461A151152E54B500F2044A /* KRLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRLight.h; path = Classes/KRLight.h; sourceTree = ""; }; + E461A155152E54F700F2044A /* KRLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRLight.cpp; path = Classes/KRLight.cpp; sourceTree = ""; }; + E461A157152E555400F2044A /* KRPointLight.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KRPointLight.h; path = Classes/KRPointLight.h; sourceTree = ""; }; + E461A158152E557E00F2044A /* KRPointLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRPointLight.cpp; path = Classes/KRPointLight.cpp; sourceTree = ""; }; + E461A15B152E563000F2044A /* KRDirectionalLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRDirectionalLight.h; path = Classes/KRDirectionalLight.h; sourceTree = ""; }; + E461A15E152E565700F2044A /* KRDirectionalLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRDirectionalLight.cpp; path = Classes/KRDirectionalLight.cpp; sourceTree = ""; }; + E461A164152E56C000F2044A /* KRSpotLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRSpotLight.cpp; path = Classes/KRSpotLight.cpp; sourceTree = ""; }; + E461A167152E570500F2044A /* KRSpotLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRSpotLight.h; path = Classes/KRSpotLight.h; sourceTree = ""; }; + E461A16A152E575700F2044A /* KRLightManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRLightManager.h; path = Classes/KRLightManager.h; sourceTree = ""; }; + E461A16D152E576700F2044A /* KRLightManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRLightManager.cpp; path = Classes/KRLightManager.cpp; sourceTree = ""; }; E46DBE7D1512AD4900D59F86 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; }; E46DBE841512B9E200D59F86 /* KREngine-common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "KREngine-common.h"; path = "Classes/KREngine-common.h"; sourceTree = ""; }; E47C25A113F4F65A00FF4370 /* KRShaderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRShaderManager.h; path = Classes/KRShaderManager.h; sourceTree = ""; }; @@ -188,6 +219,68 @@ name = Shaders; sourceTree = ""; }; + E461A170152E598200F2044A /* Resources */ = { + isa = PBXGroup; + children = ( + E461A174152E5A1300F2044A /* Models */, + E461A172152E59BC00F2044A /* Materials */, + E461A171152E599E00F2044A /* Lights */, + E497B949151BCEE900D3DC67 /* KRResource.h */, + E497B94C151BCF2500D3DC67 /* KRResource.cpp */, + E497B94F151BD2CE00D3DC67 /* KRResource+obj.cpp */, + E497B952151BEDA600D3DC67 /* KRResource+fbx.cpp */, + ); + name = Resources; + sourceTree = ""; + }; + E461A171152E599E00F2044A /* Lights */ = { + isa = PBXGroup; + children = ( + E461A151152E54B500F2044A /* KRLight.h */, + E461A155152E54F700F2044A /* KRLight.cpp */, + E461A157152E555400F2044A /* KRPointLight.h */, + E461A158152E557E00F2044A /* KRPointLight.cpp */, + E461A15B152E563000F2044A /* KRDirectionalLight.h */, + E461A15E152E565700F2044A /* KRDirectionalLight.cpp */, + E461A167152E570500F2044A /* KRSpotLight.h */, + E461A164152E56C000F2044A /* KRSpotLight.cpp */, + ); + name = Lights; + sourceTree = ""; + }; + E461A172152E59BC00F2044A /* Materials */ = { + isa = PBXGroup; + children = ( + E491017C13C99BDC0098455B /* KRMaterial.cpp */, + E491017D13C99BDC0098455B /* KRMaterial.h */, + ); + name = Materials; + sourceTree = ""; + }; + E461A173152E59DF00F2044A /* Math */ = { + isa = PBXGroup; + children = ( + E414BAEA14355E5500A668C4 /* KRBoundingVolume.h */, + E414BAEC14355EFF00A668C4 /* KRBoundingVolume.cpp */, + E491017613C99BDC0098455B /* KRMat4.h */, + E491017713C99BDC0098455B /* KRMat4.cpp */, + E491017E13C99BDC0098455B /* KRVector3.h */, + E491017F13C99BDC0098455B /* KRVector3.cpp */, + E497B943151BA93400D3DC67 /* KRVector2.h */, + E497B945151BA99400D3DC67 /* KRVector2.cpp */, + ); + name = Math; + sourceTree = ""; + }; + E461A174152E5A1300F2044A /* Models */ = { + isa = PBXGroup; + children = ( + E49E79FC15126146009CF99C /* KRMesh.h */, + E49E79FE1512615F009CF99C /* KRMesh.cpp */, + ); + name = Models; + sourceTree = ""; + }; E491015613C99B9D0098455B = { isa = PBXGroup; children = ( @@ -238,17 +331,13 @@ E491016E13C99BAE0098455B /* Classes */ = { isa = PBXGroup; children = ( + E461A173152E59DF00F2044A /* Math */, + E461A170152E598200F2044A /* Resources */, E491016F13C99BDC0098455B /* KREngine.mm */, E491017213C99BDC0098455B /* KREngine.h */, - E491017613C99BDC0098455B /* KRMat4.h */, - E491017713C99BDC0098455B /* KRMat4.cpp */, E491017913C99BDC0098455B /* KRModel.cpp */, E491017A13C99BDC0098455B /* KRModel.h */, E491017B13C99BDC0098455B /* KRMaterialManager.cpp */, - E491017C13C99BDC0098455B /* KRMaterial.cpp */, - E491017D13C99BDC0098455B /* KRMaterial.h */, - E491017E13C99BDC0098455B /* KRVector3.h */, - E491017F13C99BDC0098455B /* KRVector3.cpp */, E491018013C99BDC0098455B /* KRTextureManager.cpp */, E491018113C99BDC0098455B /* KRTexture.cpp */, E491018213C99BDC0098455B /* KRModelManager.cpp */, @@ -264,19 +353,11 @@ E414BAE41435558800A668C4 /* KRInstance.cpp */, E414BAE6143557D200A668C4 /* KRScene.h */, E414BAE81435585A00A668C4 /* KRScene.cpp */, - E414BAEA14355E5500A668C4 /* KRBoundingVolume.h */, - E414BAEC14355EFF00A668C4 /* KRBoundingVolume.cpp */, E48B3CBC14393DF5000C50E2 /* KRCamera.h */, E48B3CBF14393E2F000C50E2 /* KRCamera.cpp */, - E49E79FC15126146009CF99C /* KRMesh.h */, - E49E79FE1512615F009CF99C /* KRMesh.cpp */, E46DBE841512B9E200D59F86 /* KREngine-common.h */, - E497B943151BA93400D3DC67 /* KRVector2.h */, - E497B945151BA99400D3DC67 /* KRVector2.cpp */, - E497B949151BCEE900D3DC67 /* KRResource.h */, - E497B94C151BCF2500D3DC67 /* KRResource.cpp */, - E497B94F151BD2CE00D3DC67 /* KRResource+obj.cpp */, - E497B952151BEDA600D3DC67 /* KRResource+fbx.cpp */, + E461A16A152E575700F2044A /* KRLightManager.h */, + E461A16D152E576700F2044A /* KRLightManager.cpp */, ); name = Classes; sourceTree = ""; @@ -339,6 +420,10 @@ E414BAEB14355E5500A668C4 /* KRBoundingVolume.h in Headers */, E48B3CBD14393DF5000C50E2 /* KRCamera.h in Headers */, E497B94A151BCEE900D3DC67 /* KRResource.h in Headers */, + E461A152152E54B500F2044A /* KRLight.h in Headers */, + E461A15C152E563100F2044A /* KRDirectionalLight.h in Headers */, + E461A168152E570700F2044A /* KRSpotLight.h in Headers */, + E461A16B152E575800F2044A /* KRLightManager.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -348,10 +433,16 @@ files = ( E497B948151BB89D00D3DC67 /* KRVector2.h in Headers */, E4D0683F1512A790005FFBEB /* KRVector3.h in Headers */, + E461A177152E5C6600F2044A /* KRMat4.h in Headers */, E497B94B151BCEE900D3DC67 /* KRResource.h in Headers */, E4B2A4391523B027004CB0EC /* KRMaterial.h in Headers */, E46DBE811512AFE600D59F86 /* KRMesh.h in Headers */, E46DBE851512B9FA00D59F86 /* KREngine-common.h in Headers */, + E461A153152E54B500F2044A /* KRLight.h in Headers */, + E461A176152E5C5600F2044A /* KRPointLight.h in Headers */, + E461A15D152E563100F2044A /* KRDirectionalLight.h in Headers */, + E461A169152E570700F2044A /* KRSpotLight.h in Headers */, + E461A16C152E575800F2044A /* KRLightManager.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -456,6 +547,11 @@ E497B946151BA99500D3DC67 /* KRVector2.cpp in Sources */, E497B94D151BCF2500D3DC67 /* KRResource.cpp in Sources */, E497B950151BD2CE00D3DC67 /* KRResource+obj.cpp in Sources */, + E461A156152E54F800F2044A /* KRLight.cpp in Sources */, + E461A159152E557E00F2044A /* KRPointLight.cpp in Sources */, + E461A15F152E565700F2044A /* KRDirectionalLight.cpp in Sources */, + E461A165152E56C000F2044A /* KRSpotLight.cpp in Sources */, + E461A16E152E576700F2044A /* KRLightManager.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -463,6 +559,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E461A17A152E5C9100F2044A /* KRMat4.cpp in Sources */, + E461A175152E5C4800F2044A /* KRLight.cpp in Sources */, E46DBE7B1512ACE600D59F86 /* KRMesh.cpp in Sources */, E4BBBBA71512A6DC00F43B5B /* KRVector3.cpp in Sources */, E4B2A43B1523B02E004CB0EC /* KRMaterial.cpp in Sources */, @@ -471,6 +569,10 @@ E497B94E151BCF2500D3DC67 /* KRResource.cpp in Sources */, E497B951151BD2CE00D3DC67 /* KRResource+obj.cpp in Sources */, E497B954151BEDA600D3DC67 /* KRResource+fbx.cpp in Sources */, + E461A15A152E557E00F2044A /* KRPointLight.cpp in Sources */, + E461A160152E565700F2044A /* KRDirectionalLight.cpp in Sources */, + E461A166152E56C000F2044A /* KRSpotLight.cpp in Sources */, + E461A16F152E576700F2044A /* KRLightManager.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/KREngine/KREngine/Classes/KRDirectionalLight.cpp b/KREngine/KREngine/Classes/KRDirectionalLight.cpp new file mode 100644 index 0000000..b878400 --- /dev/null +++ b/KREngine/KREngine/Classes/KRDirectionalLight.cpp @@ -0,0 +1,26 @@ +// +// KRDirectionalLight.cpp +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#include + +#import "KRDirectionalLight.h" + +KRDirectionalLight::KRDirectionalLight(std::string name) : KRLight(name) +{ + +} + +KRDirectionalLight::~KRDirectionalLight() +{ + +} + +bool KRDirectionalLight::save(const std::string& path) +{ + return true; +} diff --git a/KREngine/KREngine/Classes/KRDirectionalLight.h b/KREngine/KREngine/Classes/KRDirectionalLight.h new file mode 100644 index 0000000..effdafe --- /dev/null +++ b/KREngine/KREngine/Classes/KRDirectionalLight.h @@ -0,0 +1,24 @@ +// +// KRDirectionalLight.h +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#ifndef KREngine_KRDirectionalLight_h +#define KREngine_KRDirectionalLight_h + +#import "KRLight.h" + +class KRDirectionalLight : public KRLight { + +public: + KRDirectionalLight(std::string name); + ~KRDirectionalLight(); + + virtual bool save(const std::string& path); +}; + + +#endif diff --git a/KREngine/KREngine/Classes/KREngine.h b/KREngine/KREngine/Classes/KREngine.h index cb02ba9..6cc0bd9 100644 --- a/KREngine/KREngine/Classes/KREngine.h +++ b/KREngine/KREngine/Classes/KREngine.h @@ -39,6 +39,7 @@ #import "KRMaterialManager.h" #import "KRShaderManager.h" #import "KRModelManager.h" +#import "KRLightManager.h" #import "KRCamera.h" #import "KREngine-common.h" @@ -84,6 +85,7 @@ typedef enum KREngineParameterType {KRENGINE_PARAMETER_INT, KRENGINE_PARAMETER_F KRMaterialManager *m_pMaterialManager; KRShaderManager *m_pShaderManager; KRModelManager *m_pModelManager; + KRLightManager *m_pLightManager; int m_iFrame; diff --git a/KREngine/KREngine/Classes/KREngine.mm b/KREngine/KREngine/Classes/KREngine.mm index 859eab6..8f3a648 100644 --- a/KREngine/KREngine/Classes/KREngine.mm +++ b/KREngine/KREngine/Classes/KREngine.mm @@ -82,6 +82,7 @@ double const PI = 3.141592653589793f; m_pTextureManager = new KRTextureManager(); m_pMaterialManager = new KRMaterialManager(m_pTextureManager, m_pShaderManager); m_pModelManager = new KRModelManager(m_pMaterialManager); + m_pLightManager = new KRLightManager(); if (![self createBuffers] || ![self loadShaders] /*|| ![self loadObjects]*/ ) { @@ -548,6 +549,8 @@ double const PI = 3.141592653589793f; } else if([path hasSuffix: @".mtl"]) { NSLog(@"material: %@", path); m_pMaterialManager->loadFile([path UTF8String]); + } else if([path hasSuffix: @".krlight"]) { + m_pLightManager->loadFile([path UTF8String]); } return TRUE; @@ -575,7 +578,10 @@ double const PI = 3.141592653589793f; m_pShaderManager = NULL; } - + if(m_pLightManager) { + delete m_pLightManager; + m_pLightManager = NULL; + } [self invalidatePostShader]; [self destroyBuffers]; diff --git a/KREngine/KREngine/Classes/KRLight.cpp b/KREngine/KREngine/Classes/KRLight.cpp new file mode 100644 index 0000000..a98043b --- /dev/null +++ b/KREngine/KREngine/Classes/KRLight.cpp @@ -0,0 +1,26 @@ +// +// KRLight.cpp +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#include + +#import "KRLight.h" + +KRLight::KRLight(std::string name) : KRResource(name) +{ + +} + +KRLight::~KRLight() +{ + +} + +std::string KRLight::getExtension() +{ + return "krlight"; +} \ No newline at end of file diff --git a/KREngine/KREngine/Classes/KRLight.h b/KREngine/KREngine/Classes/KRLight.h new file mode 100644 index 0000000..3583ec8 --- /dev/null +++ b/KREngine/KREngine/Classes/KRLight.h @@ -0,0 +1,24 @@ +// +// KRLight.h +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#ifndef KREngine_KRLight_h +#define KREngine_KRLight_h + +#import "KRResource.h" + +class KRLight : public KRResource { +public: + ~KRLight(); + + virtual std::string getExtension(); + virtual bool save(const std::string& path) = 0; +protected: + KRLight(std::string name); +}; + +#endif diff --git a/KREngine/KREngine/Classes/KRLightManager.cpp b/KREngine/KREngine/Classes/KRLightManager.cpp new file mode 100644 index 0000000..f97597f --- /dev/null +++ b/KREngine/KREngine/Classes/KRLightManager.cpp @@ -0,0 +1,26 @@ +// +// KRLightManager.cpp +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#include + +#include "KRLightManager.h" + +KRLightManager::KRLightManager() +{ + +} + +KRLightManager::~KRLightManager() +{ + +} + +bool KRLightManager::loadFile(const char *szPath) +{ + return true; +} diff --git a/KREngine/KREngine/Classes/KRLightManager.h b/KREngine/KREngine/Classes/KRLightManager.h new file mode 100644 index 0000000..c077df0 --- /dev/null +++ b/KREngine/KREngine/Classes/KRLightManager.h @@ -0,0 +1,20 @@ +// +// KRLightManager.h +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#ifndef KREngine_KRLightManager_h +#define KREngine_KRLightManager_h + +class KRLightManager { +public: + KRLightManager(); + ~KRLightManager(); + + bool loadFile(const char *szPath); +}; + +#endif diff --git a/KREngine/KREngine/Classes/KRPointLight.cpp b/KREngine/KREngine/Classes/KRPointLight.cpp new file mode 100644 index 0000000..7ffb8bb --- /dev/null +++ b/KREngine/KREngine/Classes/KRPointLight.cpp @@ -0,0 +1,26 @@ +// +// KRPointLight.cpp +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#include + +#import "KRPointLight.h" + +KRPointLight::KRPointLight(std::string name) : KRLight(name) +{ + +} + +KRPointLight::~KRPointLight() +{ + +} + +bool KRPointLight::save(const std::string& path) +{ + return true; +} \ No newline at end of file diff --git a/KREngine/KREngine/Classes/KRPointLight.h b/KREngine/KREngine/Classes/KRPointLight.h new file mode 100644 index 0000000..c6e04a4 --- /dev/null +++ b/KREngine/KREngine/Classes/KRPointLight.h @@ -0,0 +1,23 @@ +// +// KRPointLight.h +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#ifndef KREngine_KRPointLight_h +#define KREngine_KRPointLight_h + +#import "KRLight.h" + +class KRPointLight : public KRLight { + +public: + KRPointLight(std::string name); + ~KRPointLight(); + + virtual bool save(const std::string& path); +}; + +#endif diff --git a/KREngine/KREngine/Classes/KRResource+fbx.cpp b/KREngine/KREngine/Classes/KRResource+fbx.cpp index 2f31af4..92f1d4c 100644 --- a/KREngine/KREngine/Classes/KRResource+fbx.cpp +++ b/KREngine/KREngine/Classes/KRResource+fbx.cpp @@ -24,6 +24,10 @@ #include "KRResource.h" #include "KRMesh.h" #include "KRMaterial.h" +#include "KRLight.h" +#include "KRPointLight.h" +#include "KRDirectionalLight.h" +#include "KRSpotLight.h" #ifdef IOS_REF #undef IOS_REF @@ -35,6 +39,7 @@ void DestroySdkObjects(KFbxSdkManager* pSdkManager); bool LoadScene(KFbxSdkManager* pSdkManager, KFbxDocument* pScene, const char* pFilename); void LoadNode(std::vector &resources, KFbxGeometryConverter *pGeometryConverter, KFbxNode* pNode); void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeometryConverter, KFbxNode* pNode); +void LoadLight(std::vector &resources, KFbxNode* pNode); std::vector KRResource::LoadFbx(const std::string& path) @@ -72,21 +77,6 @@ std::vector KRResource::LoadFbx(const std::string& path) DestroySdkObjects(lSdkManager); - /* - - KRMesh *new_mesh = new KRMesh(KRResource::GetFileBase(path)); - - std::vector vertices; - std::vector uva; - std::vector normals; - std::vector tangents; - std::vector submesh_lengths; - std::vector submesh_starts; - std::vector material_names; - - new_mesh->LoadData(vertices, uva, normals, tangents, submesh_starts, submesh_lengths, material_names); - resources.push_back(new_mesh); - */ return resources; } @@ -259,6 +249,9 @@ void LoadNode(std::vector &resources, KFbxGeometryConverter *pGeom case KFbxNodeAttribute::eMESH: LoadMesh(resources, pGeometryConverter, pNode); break; + case KFbxNodeAttribute::eLIGHT: + LoadLight(resources, pNode); + break; } @@ -336,156 +329,6 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom // ----====---- Read UVs ----====---- -// for (int l = 0; l < uv_count; ++l) -// { -// KFbxVector2 uv; -// KFbxGeometryElementUV* leUV = pMesh->GetElementUV(l); -// -// switch (leUV->GetMappingMode()) { -// case KFbxGeometryElement::eBY_CONTROL_POINT: -// switch (leUV->GetReferenceMode()) { -// case KFbxGeometryElement::eDIRECT: -// uv = leUV->GetDirectArray().GetAt(lControlPointIndex); -// break; -// case KFbxGeometryElement::eINDEX_TO_DIRECT: -// { -// int id = leUV->GetIndexArray().GetAt(lControlPointIndex); -// uv = leUV->GetDirectArray().GetAt(id); -// } -// break; -// default: -// break; // other reference modes not shown here! -// } -// break; -// -// case KFbxGeometryElement::eBY_POLYGON_VERTEX: -// switch (leUV->GetReferenceMode()) { -// case KFbxGeometryElement::eDIRECT: -// uv = leUV->GetDirectArray().GetAt(source_vertex_id); -// break; -// case KFbxGeometryElement::eINDEX_TO_DIRECT: -// { -// int id = leUV->GetIndexArray().GetAt(source_vertex_id); -// uv = leUV->GetDirectArray().GetAt(id); -// } -// break; -// default: -// break; // other reference modes not shown here! -// } -// break; -// -// -//// case KFbxGeometryElement::eBY_POLYGON_VERTEX: -//// { -//// int lTextureUVIndex = pMesh->GetTextureUVIndex(iPolygon, iVertex); -//// switch (leUV->GetReferenceMode()) -//// { -//// case KFbxGeometryElement::eDIRECT: -//// case KFbxGeometryElement::eINDEX_TO_DIRECT: -//// { -//// uv = leUV->GetDirectArray().GetAt(lTextureUVIndex); -//// } -//// break; -//// default: -//// break; // other reference modes not shown here! -//// } -//// } -//// break; -//// -// -// case KFbxGeometryElement::eBY_POLYGON: // doesn't make much sense for UVs -// case KFbxGeometryElement::eALL_SAME: // doesn't make much sense for UVs -// case KFbxGeometryElement::eNONE: // doesn't make much sense for UVs -// break; -// } -// -// -// -// -// -// if(l == 0) { -// new_uva = KRVector2(uv[0], uv[1]); -// // uva.push_back(KRVector2(uv[0], uv[1])); -// } else if(l == 1) { -// new_uvb = KRVector2(uv[0], uv[1]); -// // uvb.push_back(KRVector2(uv[0], uv[1])); -// } -// } -// -// if(uv_count > 0) { -// uva.push_back(new_uva); -// } -// if(uv_count > 1) { -// uvb.push_back(new_uvb); -// } - - -// KFbxLayerElementArrayTemplate* lUVArray = NULL; -// pMesh->GetTextureUV(&lUVArray, KFbxLayerElement::eDIFFUSE_TEXTURES); -// -// int lCurrentUVIndex = pMesh->GetTextureUVIndex(iPolygon, iVertex, KFbxLayerElement::eDIFFUSE_TEXTURES); -// -// KFbxVector2 uv = lUVArray->GetAt(lCurrentUVIndex); -// new_uva = KRVector2(uv[0], uv[1]); - - -// if(pMesh->GetLayerCount() >= 1) { -// KFbxLayerElementUV* uvs = pMesh->GetLayer(0)->GetUVs(); -// KFbxVector2 uv; -// int index = 0; -// switch (uvs->GetMappingMode()) -// { -// case KFbxLayerElement::eBY_CONTROL_POINT: -// index = pMesh->GetPolygonVertex(iPolygon, iVertex); -// break; -// case KFbxLayerElement::eBY_POLYGON_VERTEX: -// index = source_vertex_id; -// break; -// case KFbxLayerElement::eBY_POLYGON: -// index = iPolygon; -// break; -// } -// -// if (uvs->GetReferenceMode() != KFbxLayerElement::eDIRECT) -// { -// index = uvs->GetIndexArray().GetAt(index); -// } -// -// -// uv = uvs->GetDirectArray().GetAt(index); -// -// new_uva = KRVector2(uv[0], uv[1]); -// } -// -// if(pMesh->GetLayerCount() >= 2) { -// KFbxLayerElementUV* uvs = pMesh->GetLayer(1)->GetUVs(); -// KFbxVector2 uv; -// int index = 0; -// switch (uvs->GetMappingMode()) -// { -// case KFbxLayerElement::eBY_CONTROL_POINT: -// index = pMesh->GetPolygonVertex(iPolygon, iVertex); -// break; -// case KFbxLayerElement::eBY_POLYGON_VERTEX: -// index = source_vertex_id; -// break; -// case KFbxLayerElement::eBY_POLYGON: -// index = iPolygon; -// break; -// } -// -// if (uvs->GetReferenceMode() != KFbxLayerElement::eDIRECT) -// { -// index = uvs->GetIndexArray().GetAt(index); -// } -// -// -// uv = uvs->GetDirectArray().GetAt(index); -// -// new_uva = KRVector2(uv[0], uv[1]); -// } - - KStringList uvNames; pMesh->GetUVSetNames(uvNames); @@ -495,6 +338,7 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom if(pMesh->GetPolygonVertexUV(iPolygon, iVertex, setName, uv)) { new_uva = KRVector2(uv[0], uv[1]); } + uva.push_back(new_uva); } if(uv_count >= 2) { @@ -503,78 +347,8 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom if(pMesh->GetPolygonVertexUV(iPolygon, iVertex, setName, uv)) { new_uvb = KRVector2(uv[0], uv[1]); } - } - - - /* - - for (int iLayer = 0; iLayer < pMesh->GetLayerCount(); iLayer++) - { - KFbxLayerElementUV* uvs = pMesh->GetLayer(iLayer)->GetUVs(); - KFbxVector2 uv; - if (uvs == NULL) continue; - - - switch (uvs->GetMappingMode()) - { - case KFbxLayerElement::eBY_CONTROL_POINT: - //uvs_index_vector[iLayer] = cpIndex; break; - switch (uvs->GetReferenceMode()) - { - case KFbxLayerElement::eDIRECT: - uv = uvs->GetDirectArray().GetAt(cpIndex)); - break; - case KFbxLayerElement::eINDEX_TO_DIRECT: - { - int id = uvs->GetIndexArray().GetAt(cpIndex); - uv = uvs->GetDirectArray().GetAt(id)); - } - break; - default: - break; // other reference modes not shown here! - } - break; - case KFbxLayerElement::eBY_POLYGON_VERTEX: //BUG: This wont work in some FBXs, so we will skip the uvs - { - //int id = fbxmesh->GetTextureUVIndex(lPolygonIndex, iVertex); - int id = lCurrentPolygonIndex + iVertex; - - switch (uvs->GetReferenceMode() ) - { - case KFbxLayerElement::eDIRECT: - break; - case KFbxLayerElement::eINDEX_TO_DIRECT: - //uvs_index_vector[iLayer] = id; - id = uvs->GetIndexArray().GetAt(id); - break; - default: - break; - } - - Display2DVector(header, uvs->GetDirectArray().GetAt(id)); - int numuvs = uvs->GetDirectArray().GetCount(); - assert( id < numuvs ); - } - break; - } - - if(iLayer == 0) { - new_uva = KRVector2(uv[0], uv[1]); - // uva.push_back(KRVector2(uv[0], uv[1])); - } else if(iLayer == 1) { - new_uvb = KRVector2(uv[0], uv[1]); - // uvb.push_back(KRVector2(uv[0], uv[1])); - } - - } - */ - - if(uv_count > 0) { - uva.push_back(new_uva); - } - if(uv_count > 1) { uvb.push_back(new_uvb); - } + } // ----====---- Read Normals ----====---- @@ -778,3 +552,22 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom } +void LoadLight(std::vector &resources, KFbxNode* pNode) { + KFbxLight* pLight = (KFbxLight*) pNode->GetNodeAttribute(); + const char *szName = pNode->GetName(); + switch(pLight->LightType.Get()) { + case KFbxLight::ePOINT: + resources.push_back(new KRPointLight(szName)); + break; + case KFbxLight::eDIRECTIONAL: + resources.push_back(new KRDirectionalLight(szName)); + break; + case KFbxLight::eSPOT: + resources.push_back(new KRSpotLight(szName)); + break; + case KFbxLight::eAREA: + // Not supported yet + break; + } +} + diff --git a/KREngine/KREngine/Classes/KRSpotLight.cpp b/KREngine/KREngine/Classes/KRSpotLight.cpp new file mode 100644 index 0000000..182c1b5 --- /dev/null +++ b/KREngine/KREngine/Classes/KRSpotLight.cpp @@ -0,0 +1,25 @@ +// +// KRSpotLight.cpp +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#include + +#import "KRSpotLight.h" + +KRSpotLight::KRSpotLight(std::string name) : KRLight(name) +{ +} + +KRSpotLight::~KRSpotLight() +{ + +} + +bool KRSpotLight::save(const std::string& path) +{ + return true; +} diff --git a/KREngine/KREngine/Classes/KRSpotLight.h b/KREngine/KREngine/Classes/KRSpotLight.h new file mode 100644 index 0000000..fe7ebcc --- /dev/null +++ b/KREngine/KREngine/Classes/KRSpotLight.h @@ -0,0 +1,23 @@ +// +// KRSpotLight.h +// KREngine +// +// Created by Kearwood Gilbert on 12-04-05. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#ifndef KREngine_KRSpotLight_h +#define KREngine_KRSpotLight_h + +#import "KRLight.h" + +class KRSpotLight : public KRLight { +public: + KRSpotLight(std::string name); + ~KRSpotLight(); + + virtual bool save(const std::string& path); +}; + + +#endif