Trying to setup correctly the projection matrix for all the different cases...

This commit is contained in:
Sam Gateau 2015-02-23 16:47:43 -08:00
parent 687c76a6f8
commit 04a39275ef
6 changed files with 14 additions and 13 deletions

View file

@ -492,7 +492,7 @@ void Avatar::renderBody(ViewFrustum* renderFrustum, RenderMode renderMode, bool
RenderArgs args; RenderArgs args;
args._viewFrustum = renderFrustum; args._viewFrustum = renderFrustum;
_skeletonModel.render(1.0f, modelRenderMode, &args); _skeletonModel.render(1.0f, modelRenderMode, &args);
renderAttachments(renderMode); renderAttachments(renderMode, &args);
} }
} }
getHead()->render(1.0f, renderFrustum, modelRenderMode, postLighting); getHead()->render(1.0f, renderFrustum, modelRenderMode, postLighting);
@ -522,11 +522,11 @@ void Avatar::simulateAttachments(float deltaTime) {
} }
} }
void Avatar::renderAttachments(RenderMode renderMode) { void Avatar::renderAttachments(RenderMode renderMode, RenderArgs* args) {
Model::RenderMode modelRenderMode = (renderMode == SHADOW_RENDER_MODE) ? Model::RenderMode modelRenderMode = (renderMode == SHADOW_RENDER_MODE) ?
Model::SHADOW_RENDER_MODE : Model::DEFAULT_RENDER_MODE; Model::SHADOW_RENDER_MODE : Model::DEFAULT_RENDER_MODE;
foreach (Model* model, _attachmentModels) { foreach (Model* model, _attachmentModels) {
model->render(1.0f, modelRenderMode); model->render(1.0f, modelRenderMode, args);
} }
} }

View file

@ -227,7 +227,7 @@ protected:
virtual bool shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const; virtual bool shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const;
void simulateAttachments(float deltaTime); void simulateAttachments(float deltaTime);
virtual void renderAttachments(RenderMode renderMode); virtual void renderAttachments(RenderMode renderMode, RenderArgs* args);
virtual void updateJointMappings(); virtual void updateJointMappings();

View file

@ -1097,7 +1097,7 @@ void MyAvatar::renderBody(ViewFrustum* renderFrustum, RenderMode renderMode, boo
RenderArgs args; RenderArgs args;
args._viewFrustum = renderFrustum; args._viewFrustum = renderFrustum;
_skeletonModel.render(1.0f, modelRenderMode, &args); _skeletonModel.render(1.0f, modelRenderMode, &args);
renderAttachments(renderMode); renderAttachments(renderMode, &args);
} }
// Render head so long as the camera isn't inside it // Render head so long as the camera isn't inside it
@ -1902,9 +1902,9 @@ void MyAvatar::onToggleRagdoll() {
} }
} }
void MyAvatar::renderAttachments(RenderMode renderMode) { void MyAvatar::renderAttachments(RenderMode renderMode, RenderArgs* args) {
if (Application::getInstance()->getCamera()->getMode() != CAMERA_MODE_FIRST_PERSON || renderMode == MIRROR_RENDER_MODE) { if (Application::getInstance()->getCamera()->getMode() != CAMERA_MODE_FIRST_PERSON || renderMode == MIRROR_RENDER_MODE) {
Avatar::renderAttachments(renderMode); Avatar::renderAttachments(renderMode, args);
return; return;
} }
const FBXGeometry& geometry = _skeletonModel.getGeometry()->getFBXGeometry(); const FBXGeometry& geometry = _skeletonModel.getGeometry()->getFBXGeometry();
@ -1914,7 +1914,7 @@ void MyAvatar::renderAttachments(RenderMode renderMode) {
for (int i = 0; i < _attachmentData.size(); i++) { for (int i = 0; i < _attachmentData.size(); i++) {
const QString& jointName = _attachmentData.at(i).jointName; const QString& jointName = _attachmentData.at(i).jointName;
if (jointName != headJointName && jointName != "Head") { if (jointName != headJointName && jointName != "Head") {
_attachmentModels.at(i)->render(1.0f, modelRenderMode); _attachmentModels.at(i)->render(1.0f, modelRenderMode, args);
} }
} }
} }

View file

@ -187,7 +187,7 @@ signals:
void transformChanged(); void transformChanged();
protected: protected:
virtual void renderAttachments(RenderMode renderMode); virtual void renderAttachments(RenderMode renderMode, RenderArgs* args);
private: private:
float _turningKeyPressTime; float _turningKeyPressTime;

View file

@ -96,15 +96,16 @@ vec3 evalLightmappedColor(float shadowAttenuation, vec3 normal, vec3 diffuse, ve
Light light = getLight(); Light light = getLight();
//vec3 fragNormal = vec3(invViewMat * vec4(normal, 0.0)); vec3 fragNormal = vec3(invViewMat * vec4(normal, 0.0));
// float diffuseDot = dot(fragNormal, getLightDirection(light)); float diffuseDot = dot(fragNormal, -getLightDirection(light));
float diffuseDot = dot(normal, getLightDirection(light)); // float diffuseDot = dot(normal, getLightDirection(light));
// need to catch normals perpendicular to the projection plane hence the magic number for the threshold // need to catch normals perpendicular to the projection plane hence the magic number for the threshold
// it should be just 0, but we have innacurracy so we need to overshoot // it should be just 0, but we have innacurracy so we need to overshoot
const float PERPENDICULAR_THRESHOLD = -0.005; const float PERPENDICULAR_THRESHOLD = -0.005;
float facingLight = step(PERPENDICULAR_THRESHOLD, diffuseDot); float facingLight = step(PERPENDICULAR_THRESHOLD, diffuseDot);
//float facingLight = step(PERPENDICULAR_THRESHOLD, diffuseDot);
// evaluate the shadow test but only relevant for light facing fragments // evaluate the shadow test but only relevant for light facing fragments
float lightAttenuation = (1 - facingLight) + facingLight * shadowAttenuation; float lightAttenuation = (1 - facingLight) + facingLight * shadowAttenuation;

View file

@ -680,7 +680,7 @@ bool Model::render(float alpha, RenderMode mode, RenderArgs* args) {
// render the attachments // render the attachments
foreach (Model* attachment, _attachments) { foreach (Model* attachment, _attachments) {
attachment->render(alpha, mode); attachment->render(alpha, mode, args);
} }
if (_meshStates.isEmpty()) { if (_meshStates.isEmpty()) {
return false; return false;