Allow changing the fov and render distance
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 4m30s
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 4m30s
This commit is contained in:
39
src/JGL.cpp
39
src/JGL.cpp
@@ -529,7 +529,46 @@ namespace JGL {
|
||||
|
||||
}
|
||||
|
||||
//The 3D projection.
|
||||
std::vector<GLfloat> perspective(float fov, float aspect, float nearPlane, float farPlane) {
|
||||
std::vector<float> result(16);
|
||||
float f = 1.0f / tan(fov * 0.5f * M_PI / 180.0f);
|
||||
result[0] = f / aspect;
|
||||
result[5] = f;
|
||||
result[10] = (farPlane + nearPlane) / (nearPlane - farPlane);
|
||||
result[11] = -1.0f;
|
||||
result[14] = (2.0f * farPlane * nearPlane) / (nearPlane - farPlane);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool j3d_initialized = false;
|
||||
float j3d_far_plane = 0;
|
||||
float j3d_fov = 0;
|
||||
|
||||
void J3D::Init(const J3ML::LinearAlgebra::Vector2& window_size, float fov, float far_plane) {
|
||||
wS = window_size;
|
||||
j3d_far_plane = far_plane;
|
||||
j3d_fov = fov;
|
||||
j3d_initialized = true;
|
||||
}
|
||||
|
||||
void J3D::ChangeFOV(float fov) {
|
||||
j3d_fov = fov;
|
||||
}
|
||||
|
||||
void J3D::ChangeFarPlane(float far_plane) {
|
||||
j3d_far_plane = far_plane;
|
||||
}
|
||||
|
||||
void J3D::Begin() {
|
||||
if (!j3d_initialized)
|
||||
throw std::runtime_error("You have to run J3D::Init before rendering 3D elements.");
|
||||
|
||||
auto aspect = (float) wS.x / (float) wS.y;
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glMultMatrixf(perspective(j3d_fov, aspect, 0.001, j3d_far_plane).data());
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
//Get what the draw color was before we did anything.
|
||||
glGetFloatv(GL_CURRENT_COLOR, oldColor);
|
||||
|
Reference in New Issue
Block a user