- Timestamp:
- 10/17/08 01:08:42 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SkyPreetham.cpp
r3021 r3036 6 6 #include "Camera.h" 7 7 #include "RenderState.h" 8 #include "ShaderProgram.h" 9 #include "Shape.h" 10 #include "Material.h" 8 11 9 12 … … 23 26 24 27 25 static CGprogram sCgSkyProgram = NULL; 26 static CGprogram sCgMrtFragmentSkyDomeProgram = NULL; 27 28 29 static CGparameter sLightDirParam; 30 static CGparameter sThetaSunParam; 31 static CGparameter sZenithColorParam; 32 static CGparameter sAColorParam; 33 static CGparameter sBColorParam; 34 static CGparameter sCColorParam; 35 static CGparameter sDColorParam; 36 static CGparameter sEColorParam; 37 static CGparameter sMultiplierParam; 28 static ShaderProgram *sCgSkyProgram = NULL; 29 static ShaderProgram *sCgMrtFragmentSkyDomeProgram = NULL; 38 30 39 31 ShaderContainer SkyPreetham::sShaders; … … 54 46 void SkyPreetham::InitCG(CGcontext context) 55 47 { 56 ShaderProgram *pr; 57 58 sCgSkyProgram = 59 cgCreateProgramFromFile(context, 60 CG_SOURCE, 61 "src/shaders/sky_preetham.cg", 62 RenderState::sCgVertexProfile, 63 "default_vs", 64 NULL); 65 66 if (sCgSkyProgram != NULL) 48 sCgSkyProgram = new ShaderProgram(context, 49 "src/shaders/sky_preetham.cg", 50 RenderState::sCgVertexProfile, 51 "default_vs"); 52 53 if (sCgSkyProgram->IsValid()) 67 54 { 68 cgGLLoadProgram(sCgSkyProgram); 69 70 sLightDirParam = cgGetNamedParameter(sCgSkyProgram, "lightDir"); 71 sThetaSunParam = cgGetNamedParameter(sCgSkyProgram, "thetaSun"); 72 sZenithColorParam = cgGetNamedParameter(sCgSkyProgram, "zenithColor"); 73 sAColorParam = cgGetNamedParameter(sCgSkyProgram, "aColor"); 74 sBColorParam = cgGetNamedParameter(sCgSkyProgram, "bColor"); 75 sCColorParam = cgGetNamedParameter(sCgSkyProgram, "cColor"); 76 sDColorParam = cgGetNamedParameter(sCgSkyProgram, "dColor"); 77 sEColorParam = cgGetNamedParameter(sCgSkyProgram, "eColor"); 78 79 sMultiplierParam = cgGetNamedParameter(sCgSkyProgram, "multiplier"); 80 81 pr = new ShaderProgram(sCgSkyProgram); 82 sShaders.push_back(pr); 55 sCgSkyProgram->AddParameter("lightDir", 0); 56 sCgSkyProgram->AddParameter("thetaSun", 1); 57 sCgSkyProgram->AddParameter("zenithColor", 2); 58 sCgSkyProgram->AddParameter("aColor", 3); 59 sCgSkyProgram->AddParameter("bColor", 4); 60 sCgSkyProgram->AddParameter("cColor", 5); 61 sCgSkyProgram->AddParameter("dColor", 6); 62 sCgSkyProgram->AddParameter("eColor", 7); 63 sCgSkyProgram->AddParameter("multiplier", 8); 83 64 } 84 65 else 85 66 cerr << "sky program failed to load" << endl; 86 67 68 sShaders.push_back(sCgSkyProgram); 69 87 70 sCgMrtFragmentSkyDomeProgram = 88 cgCreateProgramFromFile(context, 89 CG_SOURCE, 90 "src/shaders/sky_preetham.cg", 91 RenderState::sCgFragmentProfile, 92 "frag_skydome", 93 NULL); 94 95 if (sCgMrtFragmentSkyDomeProgram != NULL) 96 { 97 cgGLLoadProgram(sCgMrtFragmentSkyDomeProgram); 98 //cgGLSetParameter1f(sMaxDepthParam, MAX_DEPTH_CONST / farDist); 99 100 pr = new ShaderProgram(sCgMrtFragmentSkyDomeProgram); 101 sShaders.push_back(pr); 102 } 103 else 71 new ShaderProgram(context, 72 "src/shaders/sky_preetham.cg", 73 RenderState::sCgFragmentProfile, 74 "frag_skydome"); 75 76 // simple shader used for just pushing out the fragments to the mrts 77 if (!sCgMrtFragmentSkyDomeProgram->IsValid()) 104 78 cerr << "fragment skyprogram failed to load" << endl; 79 80 sShaders.push_back(sCgMrtFragmentSkyDomeProgram); 105 81 } 106 82 … … 118 94 { 119 95 CreateSunQuad(); 96 Shape *shape = mSkyDome->GetShape(0); 97 98 Material *mat = shape->GetMaterial(); 99 100 mat->SetFragmentProgram(sCgMrtFragmentSkyDomeProgram); 101 mat->SetVertexProgram(sCgSkyProgram); 120 102 } 121 103 … … 135 117 Vector3 zenithColor; 136 118 vector<Vector3> ABCDE; 119 137 120 ComputeFactors(sunDir, zenithColor, ABCDE, sun_theta); 138 121 … … 149 132 mSkyDome->GetTransform()->SetMatrix(s * m); 150 133 151 cgGLSetParameter3f(sLightDirParam, sunDir.x, sunDir.y, sunDir.z); 152 cgGLSetParameter2f(sThetaSunParam, sun_theta.first, sun_theta.second); 153 cgGLSetParameter3f(sZenithColorParam, zenithColor.x, zenithColor.y, zenithColor.z); 154 155 cgGLSetParameter3f(sAColorParam, ABCDE[0].x, ABCDE[0].y, ABCDE[0].z); 156 cgGLSetParameter3f(sBColorParam, ABCDE[1].x, ABCDE[1].y, ABCDE[1].z); 157 cgGLSetParameter3f(sCColorParam, ABCDE[2].x, ABCDE[2].y, ABCDE[2].z); 158 cgGLSetParameter3f(sDColorParam, ABCDE[3].x, ABCDE[3].y, ABCDE[3].z); 159 cgGLSetParameter3f(sEColorParam, ABCDE[4].x, ABCDE[4].y, ABCDE[4].z); 160 161 if (state->GetRenderPassType() == RenderState::DEFERRED) 162 { 163 cgGLEnableProfile(RenderState::sCgFragmentProfile); 164 cgGLBindProgram(sCgMrtFragmentSkyDomeProgram); 165 166 } 134 GPUProgramParameters *vtxParams = mSkyDome->GetShape(0)->GetMaterial()->GetVertexProgramParameters(); 135 136 vtxParams->SetValue3f(0, sunDir.x, sunDir.y, sunDir.z); 137 vtxParams->SetValue2f(1, sun_theta.first, sun_theta.second); 138 vtxParams->SetValue3f(2, zenithColor.x, zenithColor.y, zenithColor.z); 139 140 vtxParams->SetValue3f(3, ABCDE[0].x, ABCDE[0].y, ABCDE[0].z); 141 vtxParams->SetValue3f(4, ABCDE[1].x, ABCDE[1].y, ABCDE[1].z); 142 vtxParams->SetValue3f(5, ABCDE[2].x, ABCDE[2].y, ABCDE[2].z); 143 vtxParams->SetValue3f(6, ABCDE[3].x, ABCDE[3].y, ABCDE[3].z); 144 vtxParams->SetValue3f(7, ABCDE[4].x, ABCDE[4].y, ABCDE[4].z); 145 167 146 168 147 if (!scaleToRange) 169 148 { 170 149 // use tone mapping 171 cgGLSetParameter1f(sMultiplierParam, 1.0f);150 sCgSkyProgram->SetValue1f(8, 1.0f); 172 151 } 173 152 else 174 153 { 175 154 // no tone mapping => scale 176 cgGLSetParameter1f(sMultiplierParam, 8e-5f);155 sCgSkyProgram->SetValue1f(8, 8e-5f); 177 156 } 178 157 179 158 cgGLEnableProfile(RenderState::sCgVertexProfile); 180 cgGLBindProgram(sCgSkyProgram);181 159 182 160 // Render sky dome. … … 185 163 // Render additively blended sun disc. 186 164 //RenderSunDisk(sunDir, camera); 187 188 cgGLDisableProfile(RenderState::sCgFragmentProfile);189 165 } 190 166 … … 192 168 void SkyPreetham::RenderSunDisk(const Vector3 &sunDir, Camera *camera) 193 169 { 170 #if TODOD 194 171 // Move skybox with camera. 195 172 Vector3 position = camera->GetPosition(); … … 212 189 sunPos *= rotx;; 213 190 214 //sunposition.rotateAroundY(-D().getScene().getLight().getHorizontalOrientation() + 90.0f);215 //sunposition.rotateAroundX(-D().getScene().getLight().getVerticalOrientation());191 sunposition.rotateAroundY(-D().getScene().getLight().getHorizontalOrientation() + 90.0f); 192 sunposition.rotateAroundX(-D().getScene().getLight().getVerticalOrientation()); 216 193 217 194 glMatrixMode(GL_MODELVIEW); … … 222 199 glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); 223 200 224 //Float size = 0.5f + (1.0f - lightdirection.y) * 0.5f;225 226 //mSunEffect->setVariableVector3("LightDiffuseColor", D().getScene().getLight().getDiffuseColor());227 //mSunEffect->setVariableFloat("SunSize", size);228 //mSunEffect->setVariableTexture2D("SunTexture", mSunTexture);229 230 /*mSunEffect->activate();201 Float size = 0.5f + (1.0f - lightdirection.y) * 0.5f; 202 203 mSunEffect->setVariableVector3("LightDiffuseColor", D().getScene().getLight().getDiffuseColor()); 204 mSunEffect->setVariableFloat("SunSize", size); 205 mSunEffect->setVariableTexture2D("SunTexture", mSunTexture); 206 207 mSunEffect->activate(); 231 208 232 209 mSunQuad->render(); 233 210 234 211 mSunEffect->deactivate(); 235 F().getRenderDevice().setDefaultBlendingMode(FRenderDevice::BLENDING_NONE); */212 F().getRenderDevice().setDefaultBlendingMode(FRenderDevice::BLENDING_NONE); 236 213 237 214 glPopMatrix(); 215 #endif 238 216 } 239 217 … … 241 219 void SkyPreetham::CreateSunQuad() 242 220 { 243 /* 221 #if TODO 244 222 mSunQuad = new FVertexBuffer(); 245 223 mSunQuad->setupPrimitiveType(FVertexBuffer::PRIMITIVES_TRIANGLES); … … 263 241 mSunQuad->setIndex(4, 1); 264 242 mSunQuad->setIndex(5, 3); 265 */ 243 #endif 266 244 } 267 245
Note: See TracChangeset
for help on using the changeset viewer.