Increase precision in renderable plane projection.

This commit is contained in:
Kalle Bladin
2016-08-16 00:49:41 -04:00
parent fb7104fbed
commit c55872d5f4
4 changed files with 21 additions and 29 deletions

View File

@@ -26,15 +26,13 @@ uniform float time;
uniform sampler2D texture1;
in vec2 vs_st;
in vec4 vs_position;
in vec4 vs_positionScreenSpace;
#include "PowerScaling/powerScaling_fs.hglsl"
#include "fragment.glsl"
Fragment getFragment()
{
vec4 position = vs_position;
float depth = pscDepth(position);
vec4 diffuse;
if (gl_FrontFacing)
diffuse = texture(texture1, vs_st);
@@ -44,6 +42,7 @@ Fragment getFragment()
Fragment frag;
frag.color = diffuse;
frag.depth = depth;
frag.depth = vs_positionScreenSpace.w;
return frag;
}

View File

@@ -24,26 +24,25 @@
#version __CONTEXT__
uniform mat4 ViewProjection;
uniform mat4 ModelTransform;
uniform mat4 modelViewProjectionTransform;
layout(location = 0) in vec4 in_position;
layout(location = 1) in vec2 in_st;
out vec2 vs_st;
out vec4 vs_position;
out vec4 vs_positionScreenSpace;
out float s;
#include "PowerScaling/powerScaling_vs.hglsl"
void main()
{
vec4 tmp = in_position;
vec4 position = pscTransform(tmp, ModelTransform);
vec4 position = vec4(in_position.xyz * pow(10, in_position.w), 1);
vec4 positionClipSpace = modelViewProjectionTransform * position;
vs_position = tmp;
vs_st = in_st;
position = ViewProjection * position;
gl_Position = z_normalization(position);
// Write output
vs_positionScreenSpace = z_normalization(positionClipSpace);
gl_Position = vs_positionScreenSpace;
vs_st = in_st;
}

View File

@@ -549,10 +549,6 @@ void RenderableFov::render(const RenderData& data) {
_drawFOV = false;
// setup the data to the shader
//_programObject->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
//_programObject->setUniform("ModelTransform", glm::translate(glm::mat4(1), glm::vec3(data.positionVec3)) );
//setPscUniforms(*_programObject.get(), data.camera, data.position);
// Model transform and view transform needs to be in double precision
glm::dmat4 modelTransform =
glm::translate(glm::dmat4(1.0), data.positionVec3) * // Translation

View File

@@ -131,20 +131,18 @@ void RenderablePlaneProjection::render(const RenderData& data) {
if (!_hasImage || (_moving && !active))
return;
glm::mat4 transform = glm::mat4(1.0);
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
transform[i][j] = static_cast<float>(_stateMatrix[i][j]);
}
}
// Activate shader
_shader->activate();
_shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix());
_shader->setUniform("ModelTransform", transform);
setPscUniforms(*_shader.get(), data.camera, data.position);
glm::dmat4 modelTransform =
glm::translate(glm::dmat4(1.0), data.positionVec3) * // Translation
glm::dmat4(_stateMatrix);
glm::mat4 modelViewProjectionTransform =
data.camera.projectionMatrix() *
glm::mat4(data.camera.combinedViewMatrix() *
modelTransform);
_shader->setUniform("modelViewProjectionTransform", modelViewProjectionTransform);
ghoul::opengl::TextureUnit unit;
unit.activate();