Merge "Map shadow light position globally"
This commit is contained in:
@@ -3201,8 +3201,8 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransform, float casterAlp
|
||||
|
||||
VertexBuffer spotShadowVertexBuffer;
|
||||
ShadowTessellator::tessellateSpotShadow(width, height,
|
||||
getWidth(), getHeight(), casterTransform,
|
||||
spotShadowVertexBuffer);
|
||||
*currentTransform(), getWidth(), getHeight(),
|
||||
casterTransform, spotShadowVertexBuffer);
|
||||
drawVertexBuffer(spotShadowVertexBuffer, &paint);
|
||||
|
||||
return DrawGlInfo::kStatusDrew;
|
||||
|
||||
@@ -85,7 +85,7 @@ void ShadowTessellator::tessellateAmbientShadow(float width, float height,
|
||||
}
|
||||
|
||||
void ShadowTessellator::tessellateSpotShadow(float width, float height,
|
||||
int screenWidth, int screenHeight,
|
||||
const mat4& receiverTransform, int screenWidth, int screenHeight,
|
||||
const mat4& casterTransform, VertexBuffer& shadowVertexBuffer) {
|
||||
const int vertexCount = 4;
|
||||
Vector3 polygon[vertexCount];
|
||||
@@ -101,6 +101,13 @@ void ShadowTessellator::tessellateSpotShadow(float width, float height,
|
||||
#if DEBUG_SHADOW
|
||||
ALOGD("light center %f %f %f", lightCenter.x, lightCenter.y, lightCenter.z);
|
||||
#endif
|
||||
|
||||
// light position (because it's in local space) needs to compensate for receiver transform
|
||||
// TODO: should apply to light orientation, not just position
|
||||
Matrix4 reverseReceiverTransform;
|
||||
reverseReceiverTransform.loadInverse(receiverTransform);
|
||||
reverseReceiverTransform.mapPoint3d(lightCenter);
|
||||
|
||||
const float lightSize = maximal / 8;
|
||||
const int lightVertexCount = 16;
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ public:
|
||||
const mat4& casterTransform, VertexBuffer& shadowVertexBuffer);
|
||||
|
||||
static void tessellateSpotShadow(float width, float height,
|
||||
int screenWidth, int screenHeight,
|
||||
const mat4& receiverTransform, int screenWidth, int screenHeight,
|
||||
const mat4& casterTransform, VertexBuffer& shadowVertexBuffer);
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user