Open source Star Ruler 2 source code!

This commit is contained in:
Lucas de Vries
2018-07-17 14:15:37 +02:00
commit cc307720ff
4342 changed files with 2365070 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
#include "scene/mesh_node.h"
#include "render/driver.h"
#include "render/render_mesh.h"
#include "render/vertexBuffer.h"
#include "frustum.h"
#include "physics/physics_world.h"
#include "aabbox.h"
#include "main/references.h"
namespace scene {
//Maximum distance away from the camera something can render (according to its scale)
const double MaxRenderDistFactor = 1400.0;
MeshNode::MeshNode(const render::RenderMesh* Mesh, const render::RenderState* Material)
: mesh(Mesh), material(Material) {
if(Material->baseMat != render::MAT_Solid)
setFlag(NF_Transparent, true);
setFlag(NF_AnimOnlyVisible, true);
}
bool MeshNode::preRender(render::RenderDriver& driver) {
auto fromCamera = abs_position + (driver.cam_facing * abs_scale) - driver.cam_pos;
sortDistance = fromCamera.getLength();
if(sortDistance > MaxRenderDistFactor * abs_scale || !driver.getViewFrustum().overlaps(abs_position,abs_scale))
return false;
else
return true;
}
void MeshNode::render(render::RenderDriver& driver) {
if(material->baseMat != render::MAT_Solid)
render::renderVertexBuffers();
driver.setTransformation(transformation);
driver.switchToRenderState(*material);
mesh->selectLOD(sortDistance / abs_scale)->render();
driver.resetTransformation();
}
};