Commit 9f9fe8d8 by Alisa Jung

started patch detection. compiles, not used yet. stopped because I don't know…

started patch detection. compiles, not used yet. stopped because I don't know what a patch is supposed to do.
parent ce7512e6
...@@ -318,6 +318,39 @@ Subdivision::Tables Subdivision::precomputeTables(Input input) { ...@@ -318,6 +318,39 @@ Subdivision::Tables Subdivision::precomputeTables(Input input) {
return tables; return tables;
} }
void Subdivision::extractPatches(QVector<unsigned int> index_buffer, QVector<Vertex> vertex_buffer, QVector<Subdivision::Patch> &patches){
patches.clear();
for (unsigned int i = 0; i < index_buffer.length()-2; i += 3){
Vertex vx = vertex_buffer[index_buffer[i]];
Vertex vy = vertex_buffer[index_buffer[i+1]];
Vertex vz = vertex_buffer[index_buffer[i+2]];
int countx = 0;
int county = 0;
int countz = 0;
for(unsigned int j = 0; j < index_buffer.length(); j++){
if (j != i && j != i+1 && j != i+2){
if (vx.samePos(vertex_buffer[index_buffer[j]])){
countx++;
}
if (vy.samePos(vertex_buffer[index_buffer[j]])){
county++;
}
if (vz.samePos(vertex_buffer[index_buffer[j]])){
countz++;
}
}
}
if (countx != 5 || county != 5 || countz != 5){
//triangle is irregular
}
}
}
Subdivision::Result Subdivision::runShader(Input input, Tables &tables) { Subdivision::Result Subdivision::runShader(Input input, Tables &tables) {
qDebug()<<"Running compute shader"; qDebug()<<"Running compute shader";
......
...@@ -37,6 +37,12 @@ private: ...@@ -37,6 +37,12 @@ private:
QVector<Vertex> vertex_buffer; QVector<Vertex> vertex_buffer;
}; };
struct Patch
{
QVector<unsigned int> index_buffer;
bool is_regular;
};
QOpenGLFunctions_4_3_Core *f; QOpenGLFunctions_4_3_Core *f;
QOpenGLShaderProgram *edgeShader; QOpenGLShaderProgram *edgeShader;
QOpenGLShaderProgram *vertexShader; QOpenGLShaderProgram *vertexShader;
...@@ -46,6 +52,8 @@ private: ...@@ -46,6 +52,8 @@ private:
Result runShader(Input input, Tables &tables); Result runShader(Input input, Tables &tables);
void runVertexShader(GLuint size, GLuint vb_handle, GLuint vertex_indices_handle, GLuint vertex_offsets_handle, GLuint output_handle); void runVertexShader(GLuint size, GLuint vb_handle, GLuint vertex_indices_handle, GLuint vertex_offsets_handle, GLuint output_handle);
void runEdgeShader(GLuint size, GLuint vb_handle, GLuint edge_indices_handle, GLuint output_handle, GLuint offset); void runEdgeShader(GLuint size, GLuint vb_handle, GLuint edge_indices_handle, GLuint output_handle, GLuint offset);
void extractPatches(QVector<unsigned int> index_buffer, QVector<Vertex> vertex_buffer, QVector<Patch> &patches);
}; };
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment