mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-14 08:04:40 +00:00
Fix for Issue #94 for Cubemap render bug
This commit is contained in:
parent
9ed0f467d8
commit
eb2fd2bf5f
1 changed files with 50 additions and 42 deletions
|
|
@ -1659,59 +1659,67 @@ void ReflectCubeFeatHLSL::processVert( Vector<ShaderComponent*> &componentList,
|
||||||
meta->addStatement( new GenOp( " @ = @;\r\n", outTex, inTex ) );
|
meta->addStatement( new GenOp( " @ = @;\r\n", outTex, inTex ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create cubeTrans
|
||||||
|
bool useInstancing = fd.features[MFT_UseInstancing];
|
||||||
|
Var *cubeTrans = getObjTrans( componentList, useInstancing, meta );
|
||||||
|
|
||||||
// create cubeTrans
|
// cube vert position
|
||||||
Var *cubeTrans = new Var;
|
Var * cubeVertPos = new Var;
|
||||||
cubeTrans->setType( "float3x3" );
|
cubeVertPos->setName( "cubeVertPos" );
|
||||||
cubeTrans->setName( "cubeTrans" );
|
cubeVertPos->setType( "float3" );
|
||||||
cubeTrans->uniform = true;
|
LangElement *cubeVertPosDecl = new DecOp( cubeVertPos );
|
||||||
cubeTrans->constSortPos = cspPrimitive;
|
|
||||||
|
|
||||||
// create cubeEye position
|
meta->addStatement( new GenOp( " @ = mul((float3x3)@, @).xyz;\r\n",
|
||||||
Var *cubeEyePos = new Var;
|
cubeVertPosDecl, cubeTrans, LangElement::find( "position" ) ) );
|
||||||
cubeEyePos->setType( "float3" );
|
|
||||||
cubeEyePos->setName( "cubeEyePos" );
|
|
||||||
cubeEyePos->uniform = true;
|
|
||||||
cubeEyePos->constSortPos = cspPrimitive;
|
|
||||||
|
|
||||||
// cube vert position
|
// cube normal
|
||||||
Var * cubeVertPos = new Var;
|
Var * cubeNormal = new Var;
|
||||||
cubeVertPos->setName( "cubeVertPos" );
|
cubeNormal->setName( "cubeNormal" );
|
||||||
cubeVertPos->setType( "float3" );
|
cubeNormal->setType( "float3" );
|
||||||
LangElement *cubeVertPosDecl = new DecOp( cubeVertPos );
|
LangElement *cubeNormDecl = new DecOp( cubeNormal );
|
||||||
|
|
||||||
meta->addStatement( new GenOp( " @ = mul(@, @).xyz;\r\n",
|
meta->addStatement( new GenOp( " @ = normalize( mul(@, normalize(@)).xyz );\r\n",
|
||||||
cubeVertPosDecl, cubeTrans, LangElement::find( "position" ) ) );
|
cubeNormDecl, cubeTrans, inNormal ) );
|
||||||
|
|
||||||
// cube normal
|
// grab the eye position
|
||||||
Var * cubeNormal = new Var;
|
Var *eyePos = (Var*)LangElement::find( "eyePosWorld" );
|
||||||
cubeNormal->setName( "cubeNormal" );
|
if ( !eyePos )
|
||||||
cubeNormal->setType( "float3" );
|
{
|
||||||
LangElement *cubeNormDecl = new DecOp( cubeNormal );
|
eyePos = new Var( "eyePosWorld", "float3" );
|
||||||
|
eyePos->uniform = true;
|
||||||
|
eyePos->constSortPos = cspPass;
|
||||||
|
}
|
||||||
|
|
||||||
meta->addStatement( new GenOp( " @ = normalize( mul(@, normalize(@)).xyz );\r\n",
|
// cube position
|
||||||
cubeNormDecl, cubeTrans, inNormal ) );
|
Var * cubePos = new Var;
|
||||||
|
cubePos->setName( "cubePos" );
|
||||||
|
cubePos->setType( "float3" );
|
||||||
|
LangElement *cubePosDecl = new DecOp( cubePos );
|
||||||
|
|
||||||
// eye to vert
|
meta->addStatement( new GenOp( " @ = float3( @[0][3], @[1][3], @[2][3] );\r\n",
|
||||||
Var * eyeToVert = new Var;
|
cubePosDecl, cubeTrans, cubeTrans, cubeTrans ) );
|
||||||
eyeToVert->setName( "eyeToVert" );
|
|
||||||
eyeToVert->setType( "float3" );
|
|
||||||
LangElement *e2vDecl = new DecOp( eyeToVert );
|
|
||||||
|
|
||||||
meta->addStatement( new GenOp( " @ = @ - @;\r\n",
|
// eye to vert
|
||||||
e2vDecl, cubeVertPos, cubeEyePos ) );
|
Var * eyeToVert = new Var;
|
||||||
|
eyeToVert->setName( "eyeToVert" );
|
||||||
|
eyeToVert->setType( "float3" );
|
||||||
|
LangElement *e2vDecl = new DecOp( eyeToVert );
|
||||||
|
|
||||||
// grab connector texcoord register
|
meta->addStatement( new GenOp( " @ = @ - ( @ - @ );\r\n",
|
||||||
ShaderConnector *connectComp = dynamic_cast<ShaderConnector *>( componentList[C_CONNECTOR] );
|
e2vDecl, cubeVertPos, eyePos, cubePos ) );
|
||||||
Var *reflectVec = connectComp->getElement( RT_TEXCOORD );
|
|
||||||
reflectVec->setName( "reflectVec" );
|
|
||||||
reflectVec->setStructName( "OUT" );
|
|
||||||
reflectVec->setType( "float3" );
|
|
||||||
reflectVec->mapsToSampler = true;
|
|
||||||
|
|
||||||
meta->addStatement( new GenOp( " @ = reflect(@, @);\r\n", reflectVec, eyeToVert, cubeNormal ) );
|
// grab connector texcoord register
|
||||||
|
ShaderConnector *connectComp = dynamic_cast<ShaderConnector *>( componentList[C_CONNECTOR] );
|
||||||
|
Var *reflectVec = connectComp->getElement( RT_TEXCOORD );
|
||||||
|
reflectVec->setName( "reflectVec" );
|
||||||
|
reflectVec->setStructName( "OUT" );
|
||||||
|
reflectVec->setType( "float3" );
|
||||||
|
reflectVec->mapsToSampler = true;
|
||||||
|
|
||||||
output = meta;
|
meta->addStatement( new GenOp( " @ = reflect(@, @);\r\n", reflectVec, eyeToVert, cubeNormal ) );
|
||||||
|
|
||||||
|
output = meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReflectCubeFeatHLSL::processPix( Vector<ShaderComponent*> &componentList,
|
void ReflectCubeFeatHLSL::processPix( Vector<ShaderComponent*> &componentList,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue