- Timestamp:
- 09/03/08 01:57:45 (16 years ago)
- Location:
- GTP/trunk/App/Demos/Vis/FriendlyCulling
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/default.env
r2892 r2897 10 10 winHeight=768 11 11 camPosition=483.398f 242.364f 186.078f 12 camDirection= 1 0012 camDirection=0 1 0 13 13 useFullScreen=0 14 14 useLODs=1 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Bvh.cpp
r2895 r2897 77 77 mAxis(-1), 78 78 mDepth(0), 79 mLastRenderedFrame(-999),80 79 mFirst(-1), 81 80 mLast(-1), … … 91 90 mPlaneMask[i] = 0; 92 91 mPreferredPlane[i]= 0; 92 mLastRenderedFrame[i] = -1; 93 93 } 94 94 } … … 105 105 { 106 106 mVisibility[i].Reset(); 107 } 108 109 mLastRenderedFrame = -999; 107 mLastRenderedFrame[i] = -1; 108 mPlaneMask[i] = 0; 109 mPreferredPlane[i]= 0; 110 } 110 111 } 111 112 … … 179 180 void Bvh::Init() 180 181 { 181 mCamera = NULL;182 182 mRoot = NULL; 183 183 mVertices = NULL; … … 364 364 365 365 366 void Bvh::InitFrame( )366 void Bvh::InitFrame(Camera *cam) 367 367 { 368 368 // = 0011 1111 which means that at the beginning, all six planes have to frustum culled 369 369 mRoot->mPlaneMask[BvhNode::sCurrentState] = 0x3f; 370 370 371 mCamera->CalcFrustum(sFrustum);371 cam->CalcFrustum(sFrustum); 372 372 sFrustum.CalcNPVertexIndices(sClipPlaneAABBVertexIndices); 373 373 374 374 // store near plane 375 sNearPlane = Plane3( mCamera->GetDirection(), mCamera->GetPosition());375 sNearPlane = Plane3(cam->GetDirection(), cam->GetPosition()); 376 376 } 377 377 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Bvh.h
r2895 r2897 166 166 167 167 ////////////// 168 //-- these membersdefine the current state168 //-- members that define the current state 169 169 170 170 /// stores the visibility related info 171 171 VisibilityInfo mVisibility[NUM_STATES]; 172 173 ///////// 174 //-- used for view frustum culling 175 172 173 /// used for view frustum culling 176 174 int mPlaneMask[NUM_STATES]; 177 175 int mPreferredPlane[NUM_STATES]; 178 176 177 /// when the node was last rendered 178 int mLastRenderedFrame[NUM_STATES]; 179 180 179 181 // the current state 180 182 static int sCurrentState; … … 184 186 185 187 188 /// #leaves under this node 189 int mNumLeaves; 190 191 186 192 //////////// 187 193 //-- rendering related options 188 194 189 /// when the node was last rendered190 int mLastRenderedFrame;191 /// #leaves under this node192 int mNumLeaves;193 195 194 196 // Indices to first and last triangle in the triangle array … … 322 324 } 323 325 326 324 327 int BvhNode::GetLastRenderedFrame() const 325 328 { 326 return mLastRenderedFrame ;329 return mLastRenderedFrame[sCurrentState]; 327 330 } 328 331 … … 330 333 void BvhNode::SetLastRenderedFrame(int lastRenderedFrame) 331 334 { 332 mLastRenderedFrame = lastRenderedFrame;335 mLastRenderedFrame[sCurrentState] = lastRenderedFrame; 333 336 } 334 337 … … 468 471 /** Sets the scene camera 469 472 */ 470 void SetCamera(Camera * camera) { mCamera = camera; }473 //void SetCamera(Camera * camera) { mCamera = camera; } 471 474 472 475 /////////////// … … 516 519 /** Sets frame dependent values 517 520 */ 518 void InitFrame( );521 void InitFrame(Camera *camera); 519 522 /** This gives the orthogonal distance from the viewpoint to the nearest bounding box vertex 520 523 note that negative values can appear because culling is done only afterwards … … 640 643 /// #of entities 641 644 size_t mGeometrySize; 642 643 /// the current camera644 Camera *mCamera;645 645 646 646 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.cpp
r2896 r2897 50 50 static CGparameter sNoiseTexParam; 51 51 static CGparameter sNoiseMultiplierParam; 52 static CGparameter sExpFactorParam; 53 52 static CGparameter sTemporalCoherenceParam; 54 53 55 54 … … 69 68 static CGparameter sNoiseTexGiParam; 70 69 static CGparameter sNoiseMultiplierGiParam; 71 static CGparameter s ExpFactorGiParam;70 static CGparameter sTemporalCoherenceGiParam; 72 71 73 72 … … 299 298 cgGLLoadProgram(sCgSsaoProgram); 300 299 301 // we need size of texture for scaling302 300 sPositionsTexParam = cgGetNamedParameter(sCgSsaoProgram, "positions"); 303 301 sColorsTexParam = cgGetNamedParameter(sCgSsaoProgram, "colors"); … … 308 306 sOldModelViewProjMatrixParam = cgGetNamedParameter(sCgSsaoProgram, "oldModelViewProj"); 309 307 sMaxDepthParam = cgGetNamedParameter(sCgSsaoProgram, "maxDepth"); 310 s ExpFactorParam = cgGetNamedParameter(sCgSsaoProgram, "expFactor");308 sTemporalCoherenceParam = cgGetNamedParameter(sCgSsaoProgram, "temporalCoherence"); 311 309 312 310 sOldTexParam = cgGetNamedParameter(sCgSsaoProgram, "oldTex"); … … 339 337 sOldModelViewProjMatrixGiParam = cgGetNamedParameter(sCgGiProgram, "oldModelViewProj"); 340 338 sMaxDepthGiParam = cgGetNamedParameter(sCgGiProgram, "maxDepth"); 341 s ExpFactorGiParam = cgGetNamedParameter(sCgGiProgram, "expFactor");339 sTemporalCoherenceGiParam = cgGetNamedParameter(sCgGiProgram, "temporalCoherence"); 342 340 343 341 sSamplesGiParam = cgGetNamedParameter(sCgGiProgram, "samples"); … … 437 435 438 436 void DeferredRenderer::Render(FrameBufferObject *fbo, 439 const Matrix4x4 &oldProjViewMatrix, 440 float expFactor, 441 ShadowMap *shadowMap) 442 { 443 437 const Matrix4x4 &oldProjViewMatrix, 438 float expFactor, 439 ShadowMap *shadowMap) 440 { 444 441 // switch roles of old and new fbo 445 442 // the algorihm uses two input fbos, where the one 446 443 // contais the color buffer from the last frame, 447 444 // the other one will be written 445 446 mFboIndex = 2 - mFboIndex; 448 447 //swap(mNewFbo, mOldFbo); 449 mFboIndex = 2 - mFboIndex; 448 450 449 FrameBufferObject::Release(); 451 450 … … 463 462 glLoadIdentity(); 464 463 464 const float offs = 0.5f; 465 glOrtho(-offs, offs, -offs, offs, 0, 1); 466 465 467 glMatrixMode(GL_MODELVIEW); 466 468 glPushMatrix(); 467 469 glLoadIdentity(); 468 469 const float offs = 0.5f;470 glOrtho(-offs, offs, -offs, offs, 0, 1);471 470 472 471 if (shadowMap) … … 557 556 cgGLSetParameter1f(sMaxDepthParam, mScaleFactor); 558 557 558 cgGLSetParameter1f(sTemporalCoherenceParam, (mUseTemporalCoherence && !mRegenerateSamples) ? 255 : 0); 559 559 560 560 if (mUseTemporalCoherence || mRegenerateSamples) … … 570 570 } 571 571 572 cgGLSetParameter1f(sExpFactorParam, mUseTemporalCoherence ? expFactor : 1.0f);573 574 572 Vector3 tl, tr, bl, br; 575 573 ComputeViewVectors(tl, tr, bl, br); … … 782 780 cgGLSetParameter1f(sMaxDepthGiParam, mScaleFactor); 783 781 782 cgGLSetParameter1f(sTemporalCoherenceGiParam, (mUseTemporalCoherence && !mRegenerateSamples) ? 255 : 0); 783 784 784 785 785 if (mUseTemporalCoherence || mRegenerateSamples) … … 787 787 mRegenerateSamples = false; 788 788 cgGLSetParameter1f(sNoiseMultiplierGiParam, RandomValue(3.0f, 17.0f)); 789 cgGLSetParameter1f(sExpFactorGiParam, expFactor);790 789 791 790 // q: should we generate new samples or only rotate the old ones? … … 796 795 } 797 796 798 cgGLSetParameter1f(sExpFactorParam, mUseTemporalCoherence ? expFactor : 1.0f);799 797 800 798 Vector3 tl, tr, bl, br; … … 1004 1002 } 1005 1003 1004 1005 void DeferredRenderer::SetShadingMethod(SHADING_METHOD s) 1006 { 1007 if (s != mShadingMethod) 1008 { 1009 mShadingMethod = s; 1010 mRegenerateSamples = true; 1011 } 1012 } 1013 1006 1014 } // namespace -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.h
r2896 r2897 54 54 void SetSamplingMethod(SAMPLING_METHOD s); 55 55 56 void SetShadingMethod(SHADING_METHOD s) { mShadingMethod = s; }56 void SetShadingMethod(SHADING_METHOD s); 57 57 58 58 protected: … … 86 86 Camera *mCamera; 87 87 88 //FrameBufferObject *mOldFbo;89 //FrameBufferObject *mNewFbo;90 88 FrameBufferObject *mFbo; 91 89 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp
r2848 r2897 148 148 ++ mFrameId; 149 149 150 mBvh->InitFrame( );150 mBvh->InitFrame(mCamera); 151 151 152 152 mStats.Reset(); -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.h
r2802 r2897 76 76 /** Sets the camera. 77 77 */ 78 void SetCamera(Camera *cam) {mCamera = cam;}78 void SetCamera(Camera *cam) { mCamera = cam;} 79 79 /** Sets the render queue. 80 80 */ 81 81 void SetRenderQueue(RenderQueue *rq) {mRenderQueue =rq;} 82 /** Renders a visualization of the hierarchy83 */84 void RenderVisualization();85 82 /** Sets the current render state 86 83 */ … … 133 130 */ 134 131 const SceneEntityContainer &GetVisibleObjects() const { return mVisibleObjects; } 132 /** Returns the current camera. 133 */ 134 Camera *GetCamera() const { return mCamera; } 135 135 136 136 137 protected: -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneQuery.cpp
r2892 r2897 137 137 138 138 orthoCam->SetNear(0.0f); 139 orthoCam->Yaw(.5 * M_PI); 139 140 orthoCam->SetDirection(Vector3(0, 0, -1)); 140 141 … … 155 156 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 156 157 157 glFrontFace(GL_CCW); 158 glCullFace(GL_BACK); 159 160 glEnable(GL_CULL_FACE); 158 glDisable(GL_CULL_FACE); 161 159 162 160 glShadeModel(GL_FLAT); 163 161 glEnable(GL_DEPTH_TEST); 164 162 163 glMatrixMode(GL_MODELVIEW); 164 glPushMatrix(); 165 glLoadIdentity(); 166 165 167 glMatrixMode(GL_PROJECTION); 166 168 glPushMatrix(); 169 glLoadIdentity(); 167 170 168 171 glOrtho(+xlen, -xlen, ylen, -ylen, 0.0f, mSceneBox.Size().z); 169 172 170 173 glMatrixMode(GL_MODELVIEW); 171 glPushMatrix();172 174 173 175 orthoCam->SetupCameraView(); … … 175 177 mDepth = new float[texHeight * texWidth]; 176 178 179 Camera *oldCam = renderer->GetCamera(); 180 renderer->SetCamera(orthoCam); 181 177 182 renderer->RenderScene(); 178 183 184 renderer->SetCamera(oldCam); 185 186 187 glEnable(GL_CULL_FACE); 188 189 glMatrixMode(GL_MODELVIEW); 179 190 glPopMatrix(); 191 180 192 glMatrixMode(GL_PROJECTION); 181 182 193 glPopMatrix(); 183 194 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShadowMapping.cpp
r2894 r2897 79 79 80 80 81 ShadowMap::ShadowMap( int size, const AxisAlignedBox3 &sceneBox, Camera *cam):82 mSceneBox(sceneBox), mSize(size), mCamera(cam) 81 ShadowMap::ShadowMap(Light *light, int size, const AxisAlignedBox3 &sceneBox, Camera *cam): 82 mSceneBox(sceneBox), mSize(size), mCamera(cam), mLight(light) 83 83 { 84 84 mFbo = new FrameBufferObject(size, size, FrameBufferObject::DEPTH_32, true); … … 94 94 { 95 95 DEL_PTR(mFbo); 96 } 97 98 99 100 void ShadowMap::ComputeShadowMap(Light *light, RenderTraverser *traverser) 101 { 102 mLight = light; 103 96 DEL_PTR(mShadowCam); 97 } 98 99 100 void ShadowMap::ComputeShadowMap(RenderTraverser *renderer) 101 { 104 102 const float xlen = Magnitude(mSceneBox.Diagonal() * 0.5f); 105 103 const float ylen = Magnitude(mSceneBox.Diagonal() * 0.5f); 106 104 107 mShadowCam->SetDirection( light->GetDirection());105 mShadowCam->SetDirection(mLight->GetDirection()); 108 106 109 107 // set position so that we can see the whole scene 110 108 Vector3 pos = mSceneBox.Center(); 111 109 112 pos -= light->GetDirection() * Magnitude(mSceneBox.Diagonal() * 0.5f);110 pos -= mLight->GetDirection() * Magnitude(mSceneBox.Diagonal() * 0.5f); 113 111 mShadowCam->SetPosition(pos); 114 112 … … 142 140 glMatrixMode(GL_MODELVIEW); 143 141 glPushMatrix(); 144 145 142 glLoadIdentity(); 146 143 147 144 // setup shadow camera 148 145 mShadowCam->SetupCameraView(); 146 149 147 150 148 ////////////// … … 168 166 //-- render scene into shadow map 169 167 170 traverser->RenderScene(); 168 renderer->RenderScene(); 169 171 170 172 171 glDisable(GL_POLYGON_OFFSET_FILL); -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShadowMapping.h
r2895 r2897 29 29 The shadow map has resolution size * size. 30 30 */ 31 ShadowMap( int size, const AxisAlignedBox3 &sceneBox, Camera *cam);31 ShadowMap(Light *light, int size, const AxisAlignedBox3 &sceneBox, Camera *cam); 32 32 33 33 ~ShadowMap(); 34 34 /** Computes the shadow map 35 35 */ 36 void ComputeShadowMap( Light *light,RenderTraverser *traverser);36 void ComputeShadowMap(RenderTraverser *traverser); 37 37 /** Returns computed shadow texture. 38 38 */ … … 49 49 */ 50 50 int GetSize() const { return mSize; } 51 52 Camera *GetShadowCamera() const { return mShadowCam; } 53 51 54 52 55 protected: -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp
r2896 r2897 83 83 RenderQueue *renderQueue = NULL; 84 84 85 // traverses and renders the hierarchy 86 RenderTraverser *shadowTraverser = NULL; 87 88 85 89 /// these values get scaled with the frame rate 86 90 static float keyForwardMotion = 30.0f; … … 211 215 void MiddleMotion(int x, int y); 212 216 void CalcDecimalPoint(string &str, int d); 213 void ResetTraverser(); 217 218 RenderTraverser *CreateTraverser(Camera *cam); 214 219 215 220 void KeyHorizontalMotion(float shift); … … 427 432 bvh->SetVirtualLeaves(trianglesPerVirtualLeaf); 428 433 429 bvh->SetCamera(camera);434 //bvh->SetCamera(camera); 430 435 431 436 InitCg(); … … 435 440 436 441 // initialize the render traverser 437 ResetTraverser();442 traverser = CreateTraverser(camera); 438 443 439 444 visualization = new Visualization(bvh, camera, NULL, &state); 440 445 446 state.SetRenderType(RenderState::FIXED); 441 447 sceneQuery = new SceneQuery(bvh->GetBox(), traverser); 442 448 … … 691 697 692 698 693 void ResetTraverser()694 { 695 DEL_PTR(traverser);696 699 RenderTraverser *CreateTraverser(Camera *cam) 700 { 701 RenderTraverser *tr; 702 697 703 bvh->ResetNodeClassifications(); 698 704 … … 700 706 { 701 707 case RenderTraverser::CULL_FRUSTUM: 702 tr averser= new FrustumCullingTraverser();708 tr = new FrustumCullingTraverser(); 703 709 break; 704 710 case RenderTraverser::STOP_AND_WAIT: 705 tr averser= new StopAndWaitTraverser();711 tr = new StopAndWaitTraverser(); 706 712 break; 707 713 case RenderTraverser::CHC: 708 tr averser= new CHCTraverser();714 tr = new CHCTraverser(); 709 715 break; 710 716 case RenderTraverser::CHCPLUSPLUS: 711 tr averser= new CHCPlusPlusTraverser();717 tr = new CHCPlusPlusTraverser(); 712 718 break; 713 719 714 720 default: 715 traverser = new FrustumCullingTraverser(); 716 } 717 718 traverser->SetCamera(camera); 719 traverser->SetHierarchy(bvh); 720 traverser->SetRenderQueue(renderQueue); 721 traverser->SetRenderState(&state); 722 traverser->SetUseOptimization(useOptimization); 723 traverser->SetUseRenderQueue(useRenderQueue); 724 traverser->SetVisibilityThreshold(threshold); 725 traverser->SetAssumedVisibleFrames(assumedVisibleFrames); 726 traverser->SetMaxBatchSize(maxBatchSize); 727 traverser->SetUseMultiQueries(useMultiQueries); 728 traverser->SetUseTightBounds(useTightBounds); 729 traverser->SetUseDepthPass(renderType == RenderState::DEPTH_PASS); 730 traverser->SetRenderQueue(renderQueue); 721 tr = new FrustumCullingTraverser(); 722 } 723 724 tr->SetCamera(cam); 725 tr->SetHierarchy(bvh); 726 tr->SetRenderQueue(renderQueue); 727 tr->SetRenderState(&state); 728 tr->SetUseOptimization(useOptimization); 729 tr->SetUseRenderQueue(useRenderQueue); 730 tr->SetVisibilityThreshold(threshold); 731 tr->SetAssumedVisibleFrames(assumedVisibleFrames); 732 tr->SetMaxBatchSize(maxBatchSize); 733 tr->SetUseMultiQueries(useMultiQueries); 734 tr->SetUseTightBounds(useTightBounds); 735 tr->SetUseDepthPass(renderType == RenderState::DEPTH_PASS); 736 tr->SetRenderQueue(renderQueue); 737 738 return tr; 731 739 } 732 740 … … 866 874 } 867 875 868 if (showShadowMap && !shadowMap)869 {870 const float shadowSize = 4096;871 shadowMap = new ShadowMap(shadowSize, bvh->GetBox(), camera);872 }873 876 874 877 // render without shading … … 908 911 case RenderState::DEFERRED: 909 912 910 // change CHC state (must be done for each change of camera) 911 BvhNode::SetCurrentState(1); 912 913 if (showShadowMap && shadowChanged) 913 if (showShadowMap)// && shadowChanged) 914 914 { 915 if (!shadowMap) 916 { 917 const float shadowSize = 4096; 918 shadowMap = new ShadowMap(light, shadowSize, bvh->GetBox(), camera); 919 } 920 921 // change CHC state (must be done for each change of camera) 922 BvhNode::SetCurrentState(1); 923 924 if (!shadowTraverser) 925 shadowTraverser = CreateTraverser(shadowMap->GetShadowCamera()); 926 915 927 shadowChanged = false; 916 928 … … 921 933 922 934 // the scene is rendered withouth any shading 923 shadowMap->ComputeShadowMap( light, traverser);935 shadowMap->ComputeShadowMap(shadowTraverser); 924 936 925 937 // change back state … … 1073 1085 case 32: //space 1074 1086 renderMode = (renderMode + 1) % RenderTraverser::NUM_TRAVERSAL_TYPES; 1075 ResetTraverser(); 1087 1088 DEL_PTR(traverser); 1089 traverser = CreateTraverser(camera); 1090 1091 if (shadowTraverser && shadowMap) 1092 { 1093 DEL_PTR(shadowTraverser); 1094 //shadowTraverser = CreateTraverser(shadowMap->GetShadowCamera()); 1095 } 1096 1076 1097 break; 1077 1098 case 'h': -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg
r2892 r2897 121 121 const uniform float4x4 oldModelViewProj, 122 122 uniform float maxDepth, 123 uniform float expFactor123 uniform float temporalCoherence 124 124 ) 125 125 { … … 167 167 const float depthDif = 1.0f - newDepth / oldDepth; 168 168 169 170 if ((tex.x >= 0.0f) && (tex.x < 1.0f) && 169 float oldWeight = clamp(oldSsao.z, 0, temporalCoherence); 170 float newWeight; 171 172 if ((temporalCoherence > 0.0f) && 173 (tex.x >= 0.0f) && (tex.x < 1.0f) && 171 174 (tex.y >= 0.0f) && (tex.y < 1.0f) && 172 175 (abs(depthDif) < 1e-3f)) 173 176 { 174 OUT.ssao_col.x = new_color.w * expFactor + oldSsao.x * (1.0f - expFactor); 175 OUT.illum_col = new_color * expFactor + oldIllum * (1.0f - expFactor); 177 newWeight = oldWeight + 1; 178 179 //OUT.illum_col = (float4)ao * expFactor + oldCol.x * (1.0f - expFactor); 180 OUT.ssao_col.x = (new_color.w + oldSsao.x * oldWeight) / newWeight; 181 OUT.illum_col = (new_color + oldIllum * oldWeight) / newWeight; 182 183 //OUT.ssao_col.x = new_color.w * expFactor + oldSsao.x * (1.0f - expFactor); 184 //OUT.illum_col = new_color * expFactor + oldIllum * (1.0f - expFactor); 176 185 } 177 186 else 178 187 { 188 newWeight = 0; 189 179 190 OUT.ssao_col.x = new_color.w; 180 191 OUT.illum_col = new_color; 181 192 } 182 193 194 OUT.ssao_col.z = newWeight; 183 195 OUT.ssao_col.w = currentDepth; 184 196 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg
r2893 r2897 114 114 const uniform float4x4 oldModelViewProj, 115 115 uniform float maxDepth, 116 uniform float expFactor116 uniform float temporalCoherence 117 117 ) 118 118 { … … 157 157 const float depthDif = 1.0f - newDepth / oldDepth; 158 158 159 160 if ((tex.x >= 0.0f) && (tex.x < 1.0f) && 159 float oldWeight = clamp(oldCol.z, 0, temporalCoherence); 160 float newWeight; 161 162 if ((temporalCoherence > 0) && 163 (tex.x >= 0.0f) && (tex.x < 1.0f) && 161 164 (tex.y >= 0.0f) && (tex.y < 1.0f) && 162 (abs(depthDif) < 1e- 3f))165 (abs(depthDif) < 1e-4f)) 163 166 { 164 OUT.illum_col = (float4)ao * expFactor + oldCol.x * (1.0f - expFactor); 167 newWeight = oldWeight + 1; 168 169 //OUT.illum_col = (float4)ao * expFactor + oldCol.x * (1.0f - expFactor); 170 OUT.illum_col = (float4)(ao + oldCol.x * oldWeight) / newWeight; 165 171 } 166 172 else 167 173 { 168 174 OUT.illum_col = (float4)ao; 175 newWeight = 0; 169 176 } 170 177 171 //OUT.illum_col.xyz = viewDir; 178 179 OUT.illum_col.z = newWeight; 172 180 OUT.illum_col.w = currentDepth; 173 181 … … 188 196 //OUT.illum_col = ao; 189 197 198 //OUT.illum_col.z = ao.z; 190 199 OUT.illum_col.w = ao.w; 191 200
Note: See TracChangeset
for help on using the changeset viewer.