Implemente LookAt and using values from camera for near and far values for depth rendering
parent
7bf244be37
commit
540e0d6db8
|
@ -101,6 +101,22 @@ inline Matrix44f Perspective(float fovy, float aspect,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Matrix44f LookAt(
|
||||||
|
const Vector3f& eye,
|
||||||
|
const Vector3f& poi,
|
||||||
|
const Vector3f& up) {
|
||||||
|
Vector3f d = (poi - eye).normalized();
|
||||||
|
Vector3f s = d.cross(up.normalized());
|
||||||
|
Vector3f u = s.cross(d);
|
||||||
|
|
||||||
|
return Matrix44f(
|
||||||
|
s[0], u[0], -d[0], 0.0f,
|
||||||
|
s[1], u[1], -d[1], 0.0f,
|
||||||
|
s[2], u[2], -d[2], 0.0f,
|
||||||
|
-eye[0], -eye[1], -eye[2], 1.0f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/** Quaternion
|
/** Quaternion
|
||||||
*
|
*
|
||||||
* order: x,y,z,w
|
* order: x,y,z,w
|
||||||
|
|
|
@ -8,9 +8,9 @@ using namespace SimpleMath::GL;
|
||||||
struct Renderer;
|
struct Renderer;
|
||||||
|
|
||||||
static const GLfloat g_vertex_buffer_data[] = {
|
static const GLfloat g_vertex_buffer_data[] = {
|
||||||
-0.9f, -0.9f, 1.0f,
|
-0.7f, -0.9f, 0.0f,
|
||||||
0.9f, -0.9f, -1.0f,
|
0.9f, -0.9f, 0.0f,
|
||||||
0.0f, 0.9f, 0.0f
|
0.0f, 0.9f, 1.0f
|
||||||
};
|
};
|
||||||
|
|
||||||
static const GLfloat g_quad_vertex_buffer_data[] = {
|
static const GLfloat g_quad_vertex_buffer_data[] = {
|
||||||
|
@ -117,7 +117,12 @@ const struct module_api MODULE_API = {
|
||||||
//
|
//
|
||||||
// Camera
|
// Camera
|
||||||
//
|
//
|
||||||
void Camera::updateMatrices() {
|
void Camera::UpdateMatrices() {
|
||||||
|
mViewMatrix = LookAt(eye, poi, up);
|
||||||
|
|
||||||
|
if (orthographic) {
|
||||||
|
mProjectionMatrix = Ortho(-1.0f, 1.0f, -1.0f, 1.0f, near, far);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,9 +183,20 @@ void Renderer::RenderGl() {
|
||||||
if (width != mWidth || height != mHeight)
|
if (width != mWidth || height != mHeight)
|
||||||
Resize(width, height);
|
Resize(width, height);
|
||||||
|
|
||||||
mCamera.mtxProj = Ortho(-1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f);
|
mCamera.eye = Vector3f (0.0f, 0.0f, 1.0f);
|
||||||
|
mCamera.poi = Vector3f (0.0f, 0.0f, 0.0f);
|
||||||
|
mCamera.up = Vector3f (0.0f, 1.0f, 0.0f);
|
||||||
|
mCamera.near = 0.0f;
|
||||||
|
mCamera.far = 1.0f;
|
||||||
|
mCamera.orthographic = true;
|
||||||
|
|
||||||
Matrix44f model_view_projection = mCamera.mtxProj * mCamera.mtxView;
|
mCamera.UpdateMatrices();
|
||||||
|
|
||||||
|
Matrix44f model_matrix = TranslateMat44(0.0f, 0.0f, 0.0f);
|
||||||
|
Matrix44f model_view_projection =
|
||||||
|
model_matrix
|
||||||
|
* mCamera.mViewMatrix
|
||||||
|
* mCamera.mProjectionMatrix;
|
||||||
|
|
||||||
// enable the render target
|
// enable the render target
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget.mFrameBufferId);
|
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget.mFrameBufferId);
|
||||||
|
@ -198,7 +214,6 @@ void Renderer::RenderGl() {
|
||||||
glUseProgram(mDefaultProgram.mProgramId);
|
glUseProgram(mDefaultProgram.mProgramId);
|
||||||
glUniformMatrix4fv(muDefaultModelViewProjection, 1, GL_FALSE, model_view_projection.data());
|
glUniformMatrix4fv(muDefaultModelViewProjection, 1, GL_FALSE, model_view_projection.data());
|
||||||
glUniform4fv(muDefaultColor, 1, Vector4f(1.0f, 0.0f, 0.0f, 1.0f).data());
|
glUniform4fv(muDefaultColor, 1, Vector4f(1.0f, 0.0f, 0.0f, 1.0f).data());
|
||||||
glUniformMatrix4fv(muDefaultModelViewProjection, 1, GL_FALSE, model_view_projection.data());
|
|
||||||
|
|
||||||
glEnableVertexAttribArray(0);
|
glEnableVertexAttribArray(0);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, mMesh.mVertexBuffer);
|
glBindBuffer(GL_ARRAY_BUFFER, mMesh.mVertexBuffer);
|
||||||
|
@ -223,9 +238,7 @@ void Renderer::RenderGui() {
|
||||||
|
|
||||||
bool render_color = false;
|
bool render_color = false;
|
||||||
|
|
||||||
mCamera.mtxProj = Ortho(-1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f);
|
Matrix44f model_view_projection = Matrix44f::Identity();
|
||||||
|
|
||||||
Matrix44f model_view_projection = mCamera.mtxProj * mCamera.mtxView;
|
|
||||||
|
|
||||||
if (render_color) {
|
if (render_color) {
|
||||||
// Render the full screen quad
|
// Render the full screen quad
|
||||||
|
@ -240,8 +253,8 @@ void Renderer::RenderGui() {
|
||||||
glBindTexture(GL_TEXTURE_2D, mRenderTarget.mDepthTexture);
|
glBindTexture(GL_TEXTURE_2D, mRenderTarget.mDepthTexture);
|
||||||
glUniformMatrix4fv(muRenderQuadModelViewProj, 1, GL_FALSE, model_view_projection.data());
|
glUniformMatrix4fv(muRenderQuadModelViewProj, 1, GL_FALSE, model_view_projection.data());
|
||||||
glUniform1i(muRenderQuadTexture, 0);
|
glUniform1i(muRenderQuadTexture, 0);
|
||||||
glUniform1f(muRenderQuadDepthNear, -1.0);
|
glUniform1f(muRenderQuadDepthNear, mCamera.near);
|
||||||
glUniform1f(muRenderQuadDepthFar, 1.0);
|
glUniform1f(muRenderQuadDepthFar, mCamera.far);
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnableVertexAttribArray(0);
|
glEnableVertexAttribArray(0);
|
||||||
|
|
|
@ -24,8 +24,8 @@ struct Camera {
|
||||||
float width;
|
float width;
|
||||||
float height;
|
float height;
|
||||||
|
|
||||||
Matrix44f mtxProj;
|
Matrix44f mProjectionMatrix;
|
||||||
Matrix44f mtxView;
|
Matrix44f mViewMatrix;
|
||||||
|
|
||||||
Camera() :
|
Camera() :
|
||||||
eye {5.f, 4.f, 5.f},
|
eye {5.f, 4.f, 5.f},
|
||||||
|
@ -38,27 +38,27 @@ struct Camera {
|
||||||
width (-1.f),
|
width (-1.f),
|
||||||
height (-1.f),
|
height (-1.f),
|
||||||
|
|
||||||
mtxProj (
|
mProjectionMatrix (
|
||||||
1.f, 0.f, 0.f, 0.f,
|
1.f, 0.f, 0.f, 0.f,
|
||||||
0.f, 1.f, 0.f, 0.f,
|
0.f, 1.f, 0.f, 0.f,
|
||||||
0.f, 0.f, 1.f, 0.f,
|
0.f, 0.f, 1.f, 0.f,
|
||||||
0.f, 0.f, 0.f, 1.f),
|
0.f, 0.f, 0.f, 1.f),
|
||||||
mtxView (
|
mViewMatrix (
|
||||||
1.f, 0.f, 0.f, 0.f,
|
1.f, 0.f, 0.f, 0.f,
|
||||||
0.f, 1.f, 0.f, 0.f,
|
0.f, 1.f, 0.f, 0.f,
|
||||||
0.f, 0.f, 1.f, 0.f,
|
0.f, 0.f, 1.f, 0.f,
|
||||||
0.f, 0.f, 0.f, 1.f)
|
0.f, 0.f, 0.f, 1.f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void updateMatrices();
|
void UpdateMatrices();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Light {
|
struct Light {
|
||||||
Vector3f pos;
|
Vector3f pos;
|
||||||
Vector3f dir;
|
Vector3f dir;
|
||||||
|
|
||||||
float mtxView[16];
|
float mViewMatrix[16];
|
||||||
float mtxProj[16];
|
float mProjectionMatrix[16];
|
||||||
float mtxLight[16];
|
float mtxLight[16];
|
||||||
float mtxShadow[16];
|
float mtxShadow[16];
|
||||||
|
|
||||||
|
@ -73,13 +73,13 @@ struct Light {
|
||||||
Light() :
|
Light() :
|
||||||
pos (Vector3f(0.f, 10.f, 10.f)),
|
pos (Vector3f(0.f, 10.f, 10.f)),
|
||||||
dir (Vector3f(-1.f, -1.f, -1.f)),
|
dir (Vector3f(-1.f, -1.f, -1.f)),
|
||||||
mtxView {
|
mViewMatrix {
|
||||||
1.f, 0.f, 0.f, 0.f,
|
1.f, 0.f, 0.f, 0.f,
|
||||||
0.f, 1.f, 0.f, 0.f,
|
0.f, 1.f, 0.f, 0.f,
|
||||||
0.f, 0.f, 1.f, 0.f,
|
0.f, 0.f, 1.f, 0.f,
|
||||||
0.f, 0.f, 0.f, 1.f
|
0.f, 0.f, 0.f, 1.f
|
||||||
},
|
},
|
||||||
mtxProj {
|
mProjectionMatrix {
|
||||||
1.f, 0.f, 0.f, 0.f,
|
1.f, 0.f, 0.f, 0.f,
|
||||||
0.f, 1.f, 0.f, 0.f,
|
0.f, 1.f, 0.f, 0.f,
|
||||||
0.f, 0.f, 1.f, 0.f,
|
0.f, 0.f, 1.f, 0.f,
|
||||||
|
|
Loading…
Reference in New Issue