use per-mesh color instead of per-vertex
This commit is contained in:
parent
b3d4899546
commit
89342b1c5e
@ -11,15 +11,12 @@ MeshView::MeshView(const MeshProcessor &mesh_processor, QOpenGLShaderProgram &pr
|
|||||||
n_vertices(mesh_processor.mesh.n_vertices()),
|
n_vertices(mesh_processor.mesh.n_vertices()),
|
||||||
mesh_processor(mesh_processor) {
|
mesh_processor(mesh_processor) {
|
||||||
const MyMesh &mesh = mesh_processor.mesh;
|
const MyMesh &mesh = mesh_processor.mesh;
|
||||||
QVector<GLfloat> vertices(n_vertices * 6);
|
QVector<GLfloat> vertices(n_vertices * 3);
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for (const VertexHandle it : mesh.vertices()) {
|
for (const VertexHandle it : mesh.vertices()) {
|
||||||
vertices[6*i + 0] = mesh.point(it)[0];
|
vertices[3*i + 0] = mesh.point(it)[0];
|
||||||
vertices[6*i + 1] = mesh.point(it)[1];
|
vertices[3*i + 1] = mesh.point(it)[1];
|
||||||
vertices[6*i + 2] = mesh.point(it)[2];
|
vertices[3*i + 2] = mesh.point(it)[2];
|
||||||
vertices[6*i + 3] = mesh.color.red();
|
|
||||||
vertices[6*i + 4] = mesh.color.green();
|
|
||||||
vertices[6*i + 5] = mesh.color.blue();
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
QVector<GLuint> indices(n_faces * 3);
|
QVector<GLuint> indices(n_faces * 3);
|
||||||
@ -39,15 +36,13 @@ MeshView::MeshView(const MeshProcessor &mesh_processor, QOpenGLShaderProgram &pr
|
|||||||
vertex_buffer.create();
|
vertex_buffer.create();
|
||||||
vertex_buffer.bind();
|
vertex_buffer.bind();
|
||||||
vertex_buffer.setUsagePattern(QOpenGLBuffer::StreamDraw);
|
vertex_buffer.setUsagePattern(QOpenGLBuffer::StreamDraw);
|
||||||
vertex_buffer.allocate(vertices.constData(), n_vertices * 6 * sizeof (GLfloat));
|
vertex_buffer.allocate(vertices.constData(), n_vertices * 3 * sizeof (GLfloat));
|
||||||
index_buffer.create();
|
index_buffer.create();
|
||||||
index_buffer.bind();
|
index_buffer.bind();
|
||||||
index_buffer.setUsagePattern(QOpenGLBuffer::StreamDraw);
|
index_buffer.setUsagePattern(QOpenGLBuffer::StreamDraw);
|
||||||
index_buffer.allocate(indices.constData(), n_faces * 3 * sizeof (GLuint));
|
index_buffer.allocate(indices.constData(), n_faces * 3 * sizeof (GLuint));
|
||||||
program.setAttributeBuffer("pos", GL_FLOAT, 0, 3, 6 * sizeof (GLfloat));
|
program.setAttributeBuffer("pos", GL_FLOAT, 0, 3);
|
||||||
program.enableAttributeArray("pos");
|
program.enableAttributeArray("pos");
|
||||||
program.setAttributeBuffer("col", GL_FLOAT, 3 * sizeof (GLfloat), 3, 6 * sizeof (GLfloat));
|
|
||||||
program.enableAttributeArray("col");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,6 +65,7 @@ void MeshView::paint(QOpenGLShaderProgram &program) {
|
|||||||
qFatal("Failed to get OpenGL 2.1 functions");
|
qFatal("Failed to get OpenGL 2.1 functions");
|
||||||
|
|
||||||
program.setUniformValue("model", mesh.transform);
|
program.setUniformValue("model", mesh.transform);
|
||||||
|
program.setUniformValue("col", mesh.color.redF(), mesh.color.greenF(), mesh.color.blueF());
|
||||||
|
|
||||||
{QOpenGLVertexArrayObject::Binder binder(&vao);
|
{QOpenGLVertexArrayObject::Binder binder(&vao);
|
||||||
/* Mesh */
|
/* Mesh */
|
||||||
|
@ -19,7 +19,7 @@ struct MyTraits : public OpenMesh::DefaultTraits {
|
|||||||
class MyMesh : public OpenMesh::TriMesh_ArrayKernelT<MyTraits> {
|
class MyMesh : public OpenMesh::TriMesh_ArrayKernelT<MyTraits> {
|
||||||
public:
|
public:
|
||||||
QMatrix4x4 transform;
|
QMatrix4x4 transform;
|
||||||
QColor color;
|
QColor color = {127, 127, 127};
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef MyMesh::FaceHandle FaceHandle;
|
typedef MyMesh::FaceHandle FaceHandle;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
varying vec3 frag_col;
|
uniform vec3 col;
|
||||||
|
|
||||||
uniform vec3 wf_col;
|
uniform vec3 wf_col;
|
||||||
uniform bool wireframe;
|
uniform bool wireframe;
|
||||||
uniform float alpha;
|
uniform float alpha;
|
||||||
@ -8,6 +7,5 @@ void main() {
|
|||||||
if (wireframe)
|
if (wireframe)
|
||||||
gl_FragColor = vec4(wf_col, alpha);
|
gl_FragColor = vec4(wf_col, alpha);
|
||||||
else
|
else
|
||||||
// gl_FragColor = vec4(frag_col, alpha);
|
gl_FragColor = vec4(col, alpha);
|
||||||
gl_FragColor = vec4(.5, .5, .5, alpha);
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
attribute vec3 pos;
|
attribute vec3 pos;
|
||||||
attribute vec3 col;
|
|
||||||
|
|
||||||
varying vec3 frag_col;
|
|
||||||
|
|
||||||
uniform mat4 proj;
|
uniform mat4 proj;
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
@ -9,5 +6,4 @@ uniform mat4 model;
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = proj * view * model * vec4(pos, 1.0);
|
gl_Position = proj * view * model * vec4(pos, 1.0);
|
||||||
frag_col = col;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user