changed 3D rendering

added pan/zoom gesture
This commit is contained in:
2018-02-04 17:02:14 +01:00
parent 3b62f23c0e
commit 076c0e9157
32 changed files with 446 additions and 484 deletions

View File

@@ -6,6 +6,7 @@
#include "misc/Cube.h"
#include "MV3DElement.h"
#include "misc/Shader.h"
#include "misc/TriangleData.h"
class MV3DElementStair : public MV3DElement {
@@ -25,11 +26,7 @@ protected:
/** repaint me */
void render(const RenderSettings& rs) override {
//glDisable(GL_CULL_FACE);
std::vector<float> vertices;
std::vector<float> normals;
TriangleData data;
const std::vector<Floorplan::StairPart> parts = stair->getParts();
const std::vector<Floorplan::Quad3> quads = Floorplan::getQuads(parts, floor);
@@ -46,66 +43,26 @@ protected:
Point3 n = Math::normal(p1,p2);
if (n.z < 0) {n = -n;}
vertices.insert(vertices.end(), {quad.p1.x, quad.p1.y, quad.p1.z});
vertices.insert(vertices.end(), {quad.p2.x, quad.p2.y, quad.p2.z});
vertices.insert(vertices.end(), {quad.p3.x, quad.p3.y, quad.p3.z});
// upper side
data.addTriangle(quad.p1, quad.p2, quad.p3, n);
data.addTriangle(quad.p3, quad.p4, quad.p1, n);
vertices.insert(vertices.end(), {quad.p3.x, quad.p3.y, quad.p3.z});
vertices.insert(vertices.end(), {quad.p4.x, quad.p4.y, quad.p4.z});
vertices.insert(vertices.end(), {quad.p1.x, quad.p1.y, quad.p1.z});
normals.insert(normals.end(), {n.x, n.y, n.z});
normals.insert(normals.end(), {n.x, n.y, n.z});
normals.insert(normals.end(), {n.x, n.y, n.z});
normals.insert(normals.end(), {n.x, n.y, n.z});
normals.insert(normals.end(), {n.x, n.y, n.z});
normals.insert(normals.end(), {n.x, n.y, n.z});
// lower side
data.addTriangle(quad.p2, quad.p1, quad.p3, -n);
data.addTriangle(quad.p4, quad.p3, quad.p1, -n);
}
rs.shader->bind();
rs.shader->setModelMatrix(QMatrix4x4());
rs.shader->setColor(1.0, 0.55, 0.55);
rs.shader->setVertices(vertices.data());
rs.shader->setNormals(normals.data());
glDrawArrays(GL_TRIANGLES, 0, vertices.size()/3);
rs.shader->setVertices(data.getVertices().data());
rs.shader->setNormals(data.getNormals().data());
glDrawArrays(GL_TRIANGLES, 0, data.getVertices().size()/3);
rs.shader->unsetVertices();
rs.shader->unsetNormals();
rs.shader->release();
/*
TODO_GL
//glColor3f(1.0, 0.55, 0.55);
glColor3f(0.3, 0.3, 0.3);
glBegin(GL_QUADS);
const std::vector<Floorplan::StairPart> parts = stair->getParts();
const std::vector<Floorplan::Quad3> quads = Floorplan::getQuads(parts, floor);
for (int i = 0; i < (int) parts.size(); ++i) {
//const Floorplan::StairPart& part = parts[i];
const Floorplan::Quad3& quad = quads[i];
//const Floorplan::Quad3 quad = part.getQuad(floor);
const Point3 p1 = quad.p2-quad.p1;
const Point3 p2 = quad.p4-quad.p1;
Point3 n = Math::normal(p1,p2);
if (n.z < 0) {n = -n;}
glNormal3f(n.x, n.z, n.z);
glVertex3f(quad.p1.x, quad.p1.z, quad.p1.y);
glVertex3f(quad.p2.x, quad.p2.z, quad.p2.y);
glVertex3f(quad.p3.x, quad.p3.z, quad.p3.y);
glVertex3f(quad.p4.x, quad.p4.z, quad.p4.y);
}
glEnd();
glEnable(GL_CULL_FACE);
*/
}
bool isTransparent() const override {