void Label3D::Render(const matrix4x4f &trans, const RenderData *rd) { //needs alpha test Graphics::Renderer *r = GetRenderer(); r->SetTransform(trans); r->DrawTriangles(m_geometry.Get(), m_material.Get()); }
void Billboard::Render(const matrix4x4f &trans, const RenderData *rd) { Graphics::Renderer *r = GetRenderer(); Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0, 6); const matrix3x3f rot = trans.GetOrient().Transpose(); //some hand-tweaked scaling, to make the lights seem larger from distance const float size = m_size * Graphics::GetFovFactor() * Clamp(trans.GetTranslate().Length() / 500.f, 0.25f, 15.f); const vector3f rotv1 = rot * vector3f(size/2.f, -size/2.f, 0.0f); const vector3f rotv2 = rot * vector3f(size/2.f, size/2.f, 0.0f); va.Add(m_offset-rotv1, vector2f(0.f, 0.f)); //top left va.Add(m_offset-rotv2, vector2f(0.f, 1.f)); //bottom left va.Add(m_offset+rotv2, vector2f(1.f, 0.f)); //top right va.Add(m_offset+rotv2, vector2f(1.f, 0.f)); //top right va.Add(m_offset-rotv2, vector2f(0.f, 1.f)); //bottom left va.Add(m_offset+rotv1, vector2f(1.f, 1.f)); //bottom right r->SetTransform(trans); r->DrawTriangles(&va, m_renderState, m_material.Get()); }
void Face::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; const vector2f texSize = m_texture->GetDescriptor().texSize; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(0.0f, 0.0f)); va.Add(vector3f(x, y+sy, 0.0f), vector2f(0.0f, texSize.y)); va.Add(vector3f(x+sx, y, 0.0f), vector2f(texSize.x, 0.0f)); va.Add(vector3f(x+sx, y+sy, 0.0f), vector2f(texSize.x, texSize.y)); Graphics::Renderer *r = GetContext()->GetRenderer(); s_material->texture0 = m_texture.get(); auto state = GetContext()->GetSkin().GetAlphaBlendState(); r->DrawTriangles(&va, state, s_material.Get(), Graphics::TRIANGLE_STRIP); Single::Draw(); }
void Thruster::Render(const matrix4x4f &trans, const RenderData *rd) { float power = 0.f; power = -dir.Dot(vector3f(rd->linthrust)); if (!linearOnly) { // pitch X // yaw Y // roll Z //model center is at 0,0,0, no need for invSubModelMat stuff const vector3f at = vector3f(rd->angthrust); const vector3f angdir = pos.Cross(dir); const float xp = angdir.x * at.x; const float yp = angdir.y * at.y; const float zp = angdir.z * at.z; if (xp+yp+zp > 0) { if (xp > yp && xp > zp && fabs(at.x) > power) power = fabs(at.x); else if (yp > xp && yp > zp && fabs(at.y) > power) power = fabs(at.y); else if (zp > xp && zp > yp && fabs(at.z) > power) power = fabs(at.z); } } if (power < 0.001f) return; Graphics::Renderer *r = GetRenderer(); r->SetTransform(trans); r->SetBlendMode(Graphics::BLEND_ALPHA_ONE); r->SetDepthWrite(false); m_tMat->diffuse = m_glowMat->diffuse = baseColor * power; //directional fade vector3f cdir = vector3f(trans * -dir).Normalized(); vector3f vdir = vector3f(trans[2], trans[6], -trans[10]).Normalized(); // XXX check this for transition to new colors. m_glowMat->diffuse.a = Easing::Circ::EaseIn(Clamp(vdir.Dot(cdir), 0.f, 1.f), 0.f, 1.f, 1.f) * 255; m_tMat->diffuse.a = 255 - m_glowMat->diffuse.a; r->DrawTriangles(m_tVerts.get(), m_tMat.Get()); r->DrawTriangles(m_glowVerts.get(), m_glowMat.Get()); r->SetBlendMode(Graphics::BLEND_SOLID); r->SetDepthWrite(true); }
void Icon::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(s_texScale.x*(m_texPos.x), s_texScale.y*(m_texPos.y))); va.Add(vector3f(x, y+sy, 0.0f), vector2f(s_texScale.x*(m_texPos.x), s_texScale.y*(m_texPos.y+48))); va.Add(vector3f(x+sx, y, 0.0f), vector2f(s_texScale.x*(m_texPos.x+48), s_texScale.y*(m_texPos.y))); va.Add(vector3f(x+sx, y+sy, 0.0f), vector2f(s_texScale.x*(m_texPos.x+48), s_texScale.y*(m_texPos.y+48))); Graphics::Renderer *r = GetContext()->GetRenderer(); r->SetBlendMode(Graphics::BLEND_ALPHA); s_material->diffuse = m_color; r->DrawTriangles(&va, s_material.Get(), Graphics::TRIANGLE_STRIP); }
void Thruster::Render(const matrix4x4f &trans, const RenderData *rd) { float power = 0.f; power = -dir.Dot(vector3f(rd->linthrust)); if (!linearOnly) { // pitch X // yaw Y // roll Z //model center is at 0,0,0, no need for invSubModelMat stuff const vector3f at = vector3f(rd->angthrust); const vector3f angdir = pos.Cross(dir); const float xp = angdir.x * at.x; const float yp = angdir.y * at.y; const float zp = angdir.z * at.z; if (xp+yp+zp > 0) { if (xp > yp && xp > zp && fabs(at.x) > power) power = fabs(at.x); else if (yp > xp && yp > zp && fabs(at.y) > power) power = fabs(at.y); else if (zp > xp && zp > yp && fabs(at.z) > power) power = fabs(at.z); } } if (power < 0.001f) return; Graphics::Renderer *r = GetRenderer(); r->SetBlendMode(Graphics::BLEND_ADDITIVE); r->SetDepthWrite(false); r->SetTransform(trans); m_tMat->diffuse = baseColor * power; //directional fade /*vector3f cdir(0.f, 0.f, -1.f); vector3f vdir(-trans[2], -trans[6], -trans[10]); m_tMat->diffuse.a = 1.f - Clamp(vdir.Dot(cdir), 0.f, 1.f);*/ r->DrawTriangles(m_tVerts.Get(), m_tMat.Get()); r->SetBlendMode(Graphics::BLEND_SOLID); r->SetDepthWrite(true); }
void Image::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; const vector2f texSize = m_texture->GetDescriptor().texSize; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(0.0f, 0.0f)); va.Add(vector3f(x, y+sy, 0.0f), vector2f(0.0f, texSize.y)); va.Add(vector3f(x+sx, y, 0.0f), vector2f(texSize.x, 0.0f)); va.Add(vector3f(x+sx, y+sy, 0.0f), vector2f(texSize.x, texSize.y)); Graphics::Renderer *r = GetContext()->GetRenderer(); r->SetBlendMode(Graphics::BLEND_ALPHA); r->DrawTriangles(&va, m_material.Get(), Graphics::TRIANGLE_STRIP); }
void Gradient::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_DIFFUSE); va.Add(vector3f(x, y, 0.0f), m_beginColor); va.Add(vector3f(x, y+sy, 0.0f), m_direction == HORIZONTAL ? m_beginColor : m_endColor); va.Add(vector3f(x+sx, y, 0.0f), m_direction == HORIZONTAL ? m_endColor : m_beginColor); va.Add(vector3f(x+sx, y+sy, 0.0f), m_endColor); Graphics::Renderer *r = GetContext()->GetRenderer(); r->SetBlendMode(Graphics::BLEND_ALPHA); r->DrawTriangles(&va, m_material.Get(), Graphics::TRIANGLE_STRIP); Container::Draw(); }