Commit 0e9ef934 by Philipp Adolf

Change extractPatches to findRegular

findRegular returns two index buffers, one for regular triangles and one for irregular ones.
parent fa34b503
...@@ -479,15 +479,16 @@ QVector<unsigned int> Subdivision::getPatchIndexBuffer(QVector<unsigned int> ib) ...@@ -479,15 +479,16 @@ QVector<unsigned int> Subdivision::getPatchIndexBuffer(QVector<unsigned int> ib)
return pib; return pib;
} }
/* /**
* TODO: test code, use it * Generates index buffers containing all regular and all irregular triangles in the input index buffer.
* *
* Would probably be a good idea to store both regular and irregular patches. * @param index_buffer Index buffer describing triangles.
* @param vertex_buffer Vertices used by index_buffer.
* @param regular All regular triangles are appended to this index buffer.
* @param irregular All irregular triangles are appended to this index buffer.
*/ */
void Subdivision::extractPatches(QVector<unsigned int> index_buffer, QVector<Vertex> vertex_buffer, QVector<Subdivision::Patch> &patches){ void Subdivision::findRegular(QVector<unsigned int> index_buffer, QVector<Vertex> vertex_buffer, QVector<unsigned int> &regular, QVector<unsigned int> &irregular) {
patches.clear(); for (int i = 0; i < index_buffer.length()-2; i += 3){
for (unsigned int i = 0; i < index_buffer.length()-2; i += 3){
Vertex vx = vertex_buffer[index_buffer[i]]; Vertex vx = vertex_buffer[index_buffer[i]];
Vertex vy = vertex_buffer[index_buffer[i+1]]; Vertex vy = vertex_buffer[index_buffer[i+1]];
Vertex vz = vertex_buffer[index_buffer[i+2]]; Vertex vz = vertex_buffer[index_buffer[i+2]];
...@@ -495,7 +496,7 @@ void Subdivision::extractPatches(QVector<unsigned int> index_buffer, QVector<Ver ...@@ -495,7 +496,7 @@ void Subdivision::extractPatches(QVector<unsigned int> index_buffer, QVector<Ver
int countx = 0; int countx = 0;
int county = 0; int county = 0;
int countz = 0; int countz = 0;
for(unsigned int j = 0; j < index_buffer.length(); j++){ for (int j = 0; j < index_buffer.length(); j++){
if (j != i && j != i+1 && j != i+2){ if (j != i && j != i+1 && j != i+2){
if (vx.samePos(vertex_buffer[index_buffer[j]])){ if (vx.samePos(vertex_buffer[index_buffer[j]])){
countx++; countx++;
...@@ -508,8 +509,14 @@ void Subdivision::extractPatches(QVector<unsigned int> index_buffer, QVector<Ver ...@@ -508,8 +509,14 @@ void Subdivision::extractPatches(QVector<unsigned int> index_buffer, QVector<Ver
} }
} }
} }
if (countx != 5 || county != 5 || countz != 5){ if (countx == 5 && county == 5 && countz == 5){
//triangle is irregular regular.push_back(index_buffer[i]);
regular.push_back(index_buffer[i+1]);
regular.push_back(index_buffer[i+2]);
} else {
irregular.push_back(index_buffer[i]);
irregular.push_back(index_buffer[i+1]);
irregular.push_back(index_buffer[i+2]);
} }
} }
} }
......
...@@ -53,7 +53,7 @@ private: ...@@ -53,7 +53,7 @@ private:
QOpenGLShaderProgram *initComputeShaderProgram(QString &source); QOpenGLShaderProgram *initComputeShaderProgram(QString &source);
Tables precomputeTables(Input input); Tables precomputeTables(Input input);
void extractPatches(QVector<unsigned int> index_buffer, QVector<Vertex> vertex_buffer, QVector<Patch> &patches); void findRegular(QVector<unsigned int> index_buffer, QVector<Vertex> vertex_buffer, QVector<unsigned int> &regular, QVector<unsigned int> &irregular);
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);
......
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