Files
2018-07-17 14:15:37 +02:00

61 lines
1.5 KiB
C++

#include "scene/plane_node.h"
#include "render/driver.h"
void shader_plane_minrad(float* value,unsigned short,void*) {
if(auto* node = dynamic_cast<scene::PlaneNode*>(scene::renderingNode))
*value = (float)node->minRad;
else
*value = 0.f;
}
void shader_plane_maxrad(float* value,unsigned short,void*) {
if(auto* node = dynamic_cast<scene::PlaneNode*>(scene::renderingNode))
*value = (float)node->maxRad;
else
*value = 0.f;
}
namespace scene {
PlaneNode::PlaneNode(const render::RenderState* Material, double Size)
: material(Material), minRad(-3.2f), maxRad(3.2f) {
setFlag(NF_NoMatrix, true);
if(Material->baseMat != render::MAT_Solid)
setFlag(NF_Transparent, true);
scale = Size;
}
bool PlaneNode::preRender(render::RenderDriver& driver) {
auto fromCamera = abs_position - driver.cam_pos;
if(fromCamera.dot(driver.cam_facing) > 0) {
sortDistance = fromCamera.getLength();
return true;
}
else {
return false;
}
}
void PlaneNode::render(render::RenderDriver& driver) {
driver.setTransformation(transformation);
driver.switchToRenderState(*material);
vec3d verts[4];
vec3d vsize = vec3d(scale, 0, scale);
vec3d topLeft = abs_position - vsize;
vec3d botRight = abs_position + vsize;
verts[0] = topLeft;
verts[1] = topLeft + vec3d(vsize.x * 2, 0, 0);
verts[2] = botRight;
verts[3] = botRight - vec3d(vsize.x * 2, 0, 0);
vec2f tcs[4] = { vec2f(0,0), vec2f(1,0), vec2f(1,1), vec2f(0,1) };
Color colors[4] = { color, color, color, color };
driver.drawQuad(verts, tcs, colors);
driver.resetTransformation();
}
};