Commit 2e7a899f by Kai Westerkamp

Revert "torus update"

This reverts commit 6ee50809. Added 12 Patch start
parent 749bd796
...@@ -14,47 +14,35 @@ v 0.5 0 0.5 ...@@ -14,47 +14,35 @@ v 0.5 0 0.5
v 0 0.5 0.5 v 0 0.5 0.5
v -0.5 0 0.5 v -0.5 0 0.5
v 0 -0.5 0.5 v 0 -0.5 0.5
f 1 6 2
vn 0 0 -1 f 1 5 6
vn 0 0 1 f 2 7 3
vn -0.5 -0.5 0 f 2 6 7
vn 0.5 0.5 0 f 3 8 4
vn 0.5 -0.5 0 f 3 7 8
vn -0.5 0.5 0 f 4 5 1
f 4 8 5
f 5 14 6
f 1//1 2//1 6//1 f 5 13 14
f 1//1 6//1 5//1 f 6 15 7
f 2//1 3//1 7//1 f 6 14 15
f 2//1 7//1 6//1 f 7 16 8
f 3//1 4//1 8//1 f 7 15 16
f 3//1 8//1 7//1 f 8 13 5
f 4//1 1//1 5//1 f 8 16 13
f 4//1 5//1 8//1 f 13 10 14
f 13 9 10
f 5//3 6//3 14//3 f 14 11 15
f 5//3 14//3 13//3 f 14 10 11
f 6//5 7//5 15//5 f 15 12 16
f 6//5 15//5 14//5 f 15 11 12
f 7//4 8//4 16//4 f 16 9 13
f 7//4 16//4 15//4 f 16 12 9
f 8//6 5//6 13//6 f 9 2 10
f 8//6 13//6 16//6 f 9 1 2
f 10 3 11
f 13//2 14//2 10//2 f 10 2 3
f 13//2 10//2 9//2 f 11 4 12
f 14//2 15//2 11//2 f 11 3 4
f 14//2 11//2 10//2 f 12 1 9
f 15//2 16//2 12//2 f 12 4 1
f 15//2 12//2 11//2
f 16//2 13//2 9//2
f 16//2 9//2 12//2
f 9//4 10//4 2//4
f 9//4 2//4 1/4
f 10//6 11//6 3//6
f 10//6 3//6 2//6
f 11//3 12//3 4//3
f 11//3 4//3 3//3
f 12//5 9//5 1//5
f 12//5 1//5 4//5
v 1 0 -0.5
v 0 1 -0.5
v -1 0 -0.5
v 0 -1 -0.5
v 0.5 0 -0.5
v 0 0.5 -0.5
v -0.5 0 -0.5
v 0 -0.5 -0.5
v 1 0 0.5
v 0 1 0.5
v -1 0 0.5
v 0 -1 0.5
v 0.5 0 0.5
v 0 0.5 0.5
v -0.5 0 0.5
v 0 -0.5 0.5
vn 0 0 -1
vn 0 0 1
vn -0.5 -0.5 0
vn 0.5 0.5 0
vn 0.5 -0.5 0
vn -0.5 0.5 0
f 1//1 2//1 6//1
f 1//1 6//1 5//1
f 2//1 3//1 7//1
f 2//1 7//1 6//1
f 3//1 4//1 8//1
f 3//1 8//1 7//1
f 4//1 1//1 5//1
f 4//1 5//1 8//1
f 5//3 6//3 14//3
f 5//3 14//3 13//3
f 6//5 7//5 15//5
f 6//5 15//5 14//5
f 7//4 8//4 16//4
f 7//4 16//4 15//4
f 8//6 5//6 13//6
f 8//6 13//6 16//6
f 13//2 14//2 10//2
f 13//2 10//2 9//2
f 14//2 15//2 11//2
f 14//2 11//2 10//2
f 15//2 16//2 12//2
f 15//2 12//2 11//2
f 16//2 13//2 9//2
f 16//2 9//2 12//2
f 9//4 10//4 2//4
f 9//4 2//4 1/4
f 10//6 11//6 3//6
f 10//6 3//6 2//6
f 11//3 12//3 4//3
f 11//3 4//3 3//3
f 12//5 9//5 1//5
f 12//5 1//5 4//5
...@@ -5,8 +5,8 @@ MainWidget::MainWidget(Camera *cam) ...@@ -5,8 +5,8 @@ MainWidget::MainWidget(Camera *cam)
this->cam = cam; this->cam = cam;
startTime = QTime::currentTime(); startTime = QTime::currentTime();
rotTime = QTime::currentTime(); rotTime = QTime::currentTime();
wireframe = false; wireframe = true;
rotation = true; rotation = false;
subdivision = new Subdivision(this); subdivision = new Subdivision(this);
subdivLevel = 0; subdivLevel = 0;
} }
...@@ -110,7 +110,7 @@ void MainWidget::initializeGL(){ ...@@ -110,7 +110,7 @@ void MainWidget::initializeGL(){
subdivision->init(); subdivision->init();
//loadNewMesh( "../Models/demon_head.3ds"); //loadNewMesh( "../Models/demon_head.3ds");
loadNewMesh( "../Models/box.obj"); loadNewMesh( "../Models/torus.obj");
} }
void MainWidget::loadNewMesh(){ void MainWidget::loadNewMesh(){
......
...@@ -21,15 +21,40 @@ Mesh::MeshEntry::MeshEntry() ...@@ -21,15 +21,40 @@ Mesh::MeshEntry::MeshEntry()
void Mesh::MeshEntry::init(QOpenGLFunctions_4_3_Core *f,QVector<Vertex>& Vertices, void Mesh::MeshEntry::init(QOpenGLFunctions_4_3_Core *f,QVector<Vertex>& Vertices,
QVector<unsigned int>& Indices){ QVector<unsigned int>& Indices){
this->f = f; this->f = f;
numIndex = Indices.size();
f->glGenBuffers(1, &VB_handle); f->glGenBuffers(1, &VB_handle);
f->glBindBuffer(GL_ARRAY_BUFFER, VB_handle); f->glBindBuffer(GL_ARRAY_BUFFER, VB_handle);
f->glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * Vertices.size(), &Vertices[0], GL_STATIC_DRAW); f->glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * Vertices.size(), &Vertices[0], GL_STATIC_DRAW);
//for(int i = 0; i < Vertices.length(); i++){
// qDebug()<<"V:"<<i<<Vertices[i];
//}
QVector<unsigned int> Indices2;
for(int i = 0; i < Indices.length(); i+=3){
// qDebug()<<"T:"<<Indices[i]<<Indices[i+1]<<Indices[i+2];
Indices2.push_back(0);//0
Indices2.push_back(0);//1
Indices2.push_back(0);//2
Indices2.push_back(Indices[i]);//3
Indices2.push_back(0);//4
Indices2.push_back(0);//5
Indices2.push_back(Indices[i+1]);//6
Indices2.push_back(Indices[i+2]);//7
Indices2.push_back(0);//8
Indices2.push_back(0);//9
Indices2.push_back(0);//10
Indices2.push_back(0);//11
}
numIndex = Indices2.size();
f->glGenBuffers(1, &IB_handle); f->glGenBuffers(1, &IB_handle);
f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IB_handle); f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IB_handle);
f->glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * numIndex, &Indices[0], GL_STATIC_DRAW); f->glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * numIndex, &Indices2[0], GL_STATIC_DRAW);
indices = Indices; indices = Indices;
vertices = Vertices; vertices = Vertices;
...@@ -47,20 +72,20 @@ void Mesh::MeshEntry::init(QOpenGLFunctions_4_3_Core *f,QVector<Vertex>& Vertice ...@@ -47,20 +72,20 @@ void Mesh::MeshEntry::init(QOpenGLFunctions_4_3_Core *f,QVector<Vertex>& Vertice
} }
} }
void Mesh::MeshEntry::update(GLuint VB, QVector<Vertex>& Vertices, QVector<unsigned int>& Indices){ void Mesh::MeshEntry::update(GLuint VB, QVector<Vertex>& Vertices, QVector<unsigned int>& Indices){
numIndex = Indices.size(); numIndex = Indices.size();
indices = Indices; indices = Indices;
vertices = Vertices; vertices = Vertices;
f->glDeleteBuffers(1, &IB_handle); f->glDeleteBuffers(1, &IB_handle);
f->glGenBuffers(1, &IB_handle); f->glGenBuffers(1, &IB_handle);
f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IB_handle); f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IB_handle);
f->glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * numIndex, &Indices[0], GL_STATIC_DRAW); f->glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * numIndex, &Indices[0], GL_STATIC_DRAW);
f->glDeleteBuffers(1, &VB_handle); f->glDeleteBuffers(1, &VB_handle);
VB_handle = VB; VB_handle = VB;
} }
Mesh::MeshEntry::~MeshEntry() Mesh::MeshEntry::~MeshEntry()
{ {
...@@ -111,6 +136,7 @@ Mesh::Mesh(QOpenGLFunctions_4_3_Core *f,QString fileName) ...@@ -111,6 +136,7 @@ Mesh::Mesh(QOpenGLFunctions_4_3_Core *f,QString fileName)
//aiProcess_JoinIdenticalVertices | //aiProcess_JoinIdenticalVertices |
//aiProcess_SortByPType | //aiProcess_SortByPType |
// ? aiProcess_FlipUVs | // ? aiProcess_FlipUVs |
aiProcess_JoinIdenticalVertices |
aiProcess_Triangulate aiProcess_Triangulate
); );
...@@ -393,11 +419,9 @@ void Mesh::renderNode(QOpenGLShaderProgram *shader, Node &node, QMatrix4x4 V,QMa ...@@ -393,11 +419,9 @@ void Mesh::renderNode(QOpenGLShaderProgram *shader, Node &node, QMatrix4x4 V,QMa
QMatrix4x4 MV = V*M; QMatrix4x4 MV = V*M;
QMatrix4x4 MVP = P*MV; QMatrix4x4 MVP = P*MV;
QMatrix3x3 normalMat = MV.normalMatrix();
shader->setUniformValue("MVP",MVP); shader->setUniformValue("MVP",MVP);
shader->setUniformValue("MV",MV); shader->setUniformValue("MV",MV);
shader->setUniformValue("N",normalMat);
for (int i = 0 ; i < node.meshes.size() ; i++) { for (int i = 0 ; i < node.meshes.size() ; i++) {
int index = node.meshes[i]; int index = node.meshes[i];
...@@ -414,7 +438,7 @@ void Mesh::renderMesh(QOpenGLShaderProgram *shader, int index, int subdivision) ...@@ -414,7 +438,7 @@ void Mesh::renderMesh(QOpenGLShaderProgram *shader, int index, int subdivision)
{ {
int MaterialIndex = entries[index].materialIndex; int MaterialIndex = entries[index].materialIndex;
if (MaterialIndex < materials.size()) { if (MaterialIndex < materials.size()) {
// qDebug()<<materials[MaterialIndex].Diffuse<<materials[MaterialIndex].Specular<<materials[MaterialIndex].Shininess<<materials[MaterialIndex].hasTexture; // qDebug()<<materials[MaterialIndex].Diffuse<<materials[MaterialIndex].Specular<<materials[MaterialIndex].Shininess<<materials[MaterialIndex].hasTexture;
shader->setUniformValue("materialInfo.Diffuse",materials[MaterialIndex].Diffuse); shader->setUniformValue("materialInfo.Diffuse",materials[MaterialIndex].Diffuse);
shader->setUniformValue("materialInfo.Specular",materials[MaterialIndex].Specular); shader->setUniformValue("materialInfo.Specular",materials[MaterialIndex].Specular);
...@@ -429,12 +453,10 @@ void Mesh::renderMesh(QOpenGLShaderProgram *shader, int index, int subdivision) ...@@ -429,12 +453,10 @@ void Mesh::renderMesh(QOpenGLShaderProgram *shader, int index, int subdivision)
// Draw Vertex Array // Draw Vertex Array
f->glBindBuffer(GL_ARRAY_BUFFER, entries[index].VB_handle); f->glBindBuffer(GL_ARRAY_BUFFER, entries[index].VB_handle);
f->glVertexAttribPointer(positionIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); f->glVertexAttribPointer(positionIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
f->glVertexAttribPointer(normalIndex, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid*)16); //3*4+4
f->glVertexAttribPointer(uvIndex, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid*)32); // 12+4+12+4
f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, entries[index].IB_handle); f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, entries[index].IB_handle);
f->glPatchParameteri(GL_PATCH_VERTICES, 3); f->glPatchParameteri(GL_PATCH_VERTICES, 12);
f->glDrawElements(GL_PATCHES, entries[index].numIndex, GL_UNSIGNED_INT, 0); f->glDrawElements(GL_PATCHES, entries[index].numIndex, GL_UNSIGNED_INT, 0);
} }
......
...@@ -3,7 +3,6 @@ layout(location = 0) out vec3 color; ...@@ -3,7 +3,6 @@ layout(location = 0) out vec3 color;
in vec3 gCamPosition; in vec3 gCamPosition;
in vec3 gCamNormal; in vec3 gCamNormal;
in vec2 gUV;
in vec3 gTriDistance; in vec3 gTriDistance;
in vec3 gPatchDistance; in vec3 gPatchDistance;
...@@ -25,18 +24,15 @@ uniform Material materialInfo; ...@@ -25,18 +24,15 @@ uniform Material materialInfo;
vec3 phong(vec3 lightPos){ vec3 phong(vec3 lightPos){
vec3 dcolor = materialInfo.Diffuse; vec3 dcolor = materialInfo.Diffuse;
vec3 dcolor2 = texture2D(colorTexture,gUV).xyz;
if(materialInfo.hasTexture){
dcolor = dcolor2;
}
vec3 V = normalize(-gCamPosition); vec3 V = normalize(-gCamPosition);
vec3 N = normalize(gCamNormal); vec3 N = normalize(gCamNormal);
vec3 L = normalize(lightPos-gCamPosition); vec3 L = normalize(lightPos-gCamPosition);
vec3 R = normalize(reflect(-L,N)); vec3 R = normalize(reflect(-L,N));
float diffuse = max(dot(L,N),0.0); float diffuse = max(dot(L,N),0.0);
diffuse = abs(dot(L,N));
float specular = pow(max(dot(R,V),0.0),materialInfo.Shininess); float specular = pow(max(dot(R,V),0.0),materialInfo.Shininess);
//return vec3(diffuse ); //return vec3(diffuse );
...@@ -67,7 +63,7 @@ void addWireframe(){ ...@@ -67,7 +63,7 @@ void addWireframe(){
void main() void main()
{ {
color = phong(LightPos); color = phong(LightPos);
// color = abs(normalize(gCamNormal)); //color = abs(normalize(gCamNormal));
addWireframe(); addWireframe();
......
...@@ -3,13 +3,9 @@ ...@@ -3,13 +3,9 @@
layout (triangles) in; layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out; layout (triangle_strip, max_vertices = 3) out;
in vec2 teUV[3];
out vec2 gUV;
in vec3 teCamPosition[3]; in vec3 teCamPosition[3];
out vec3 gCamPosition; out vec3 gCamPosition;
in vec3 teCamNormal[3];
out vec3 gCamNormal; out vec3 gCamNormal;
out vec3 gTriDistance; out vec3 gTriDistance;
...@@ -26,28 +22,23 @@ void main(void) ...@@ -26,28 +22,23 @@ void main(void)
//normal = cross(teCamPosition[1]-teCamPosition[0],teCamPosition[2]-teCamPosition[0]); //normal = cross(teCamPosition[1]-teCamPosition[0],teCamPosition[2]-teCamPosition[0]);
gTriDistance = vec3(1, 0, 0); gTriDistance = vec3(1, 0, 0);
gUV = teUV[0];
gCamPosition = teCamPosition[0]; gCamPosition = teCamPosition[0];
gCamNormal = teCamNormal[0]; gCamNormal = normal;
//gCamNormal = normal;
gPatchDistance = tePatchDistance[0]; gPatchDistance = tePatchDistance[0];
gl_Position = gl_in[0].gl_Position; gl_Position = gl_in[0].gl_Position;
EmitVertex(); EmitVertex();
gTriDistance = vec3(0, 1, 0); gTriDistance = vec3(0, 1, 0);
gUV = teUV[1];
gCamPosition = teCamPosition[1]; gCamPosition = teCamPosition[1];
gCamNormal = teCamNormal[1]; gCamNormal = normal;
//gCamNormal = normal;
gPatchDistance = tePatchDistance[1]; gPatchDistance = tePatchDistance[1];
gl_Position = gl_in[1].gl_Position; gl_Position = gl_in[1].gl_Position;
EmitVertex(); EmitVertex();
gTriDistance = vec3(0, 0, 1); gTriDistance = vec3(0, 0, 1);
gUV = teUV[2];
gCamPosition = teCamPosition[2]; gCamPosition = teCamPosition[2];
gCamNormal = teCamNormal[2]; gCamNormal = normal;
// gCamNormal = normal;
gPatchDistance = tePatchDistance[2]; gPatchDistance = tePatchDistance[2];
gl_Position = gl_in[2].gl_Position; gl_Position = gl_in[2].gl_Position;
EmitVertex(); EmitVertex();
......
#version 430 #version 430
layout(vertices = 3) out; layout(vertices = 12) out;
in vec3 vPosition[]; in vec3 vPosition[];
out vec3 tcPosition[]; out vec3 tcPosition[];
in vec3 vNormal[];
out vec3 tcNormal[];
in vec2 vUV[];
out vec2 tcUV[];
uniform vec3 CamPos;
void main() void main()
{ {
tcPosition[gl_InvocationID] = vPosition[gl_InvocationID]; tcPosition[gl_InvocationID] = vPosition[gl_InvocationID];
tcNormal[gl_InvocationID] = vNormal[gl_InvocationID];
tcUV[gl_InvocationID] = vUV[gl_InvocationID];
float tesselation = 1.0; float tesselation = 1.0;
......
...@@ -4,40 +4,39 @@ layout(triangles, equal_spacing, cw) in; ...@@ -4,40 +4,39 @@ layout(triangles, equal_spacing, cw) in;
in vec3 tcPosition[]; in vec3 tcPosition[];
out vec3 teCamPosition; out vec3 teCamPosition;
in vec3 tcNormal[];
out vec3 teCamNormal;
in vec2 tcUV[];
out vec2 teUV;
out vec3 tePatchDistance; out vec3 tePatchDistance;
uniform mat4x4 MV; uniform mat4x4 MV;
uniform mat4x4 MVP; uniform mat4x4 MVP;
uniform mat3x3 N;
void main() void main()
{ {
vec3 p0 = tcPosition[0];
vec3 p1 = tcPosition[1];
vec3 p2 = tcPosition[2];
vec3 p3 = tcPosition[3];
vec3 p4 = tcPosition[4];
vec3 p5 = tcPosition[5];
vec3 p6 = tcPosition[6];
vec3 p7 = tcPosition[7];
vec3 p8 = tcPosition[8];
vec3 p9 = tcPosition[9];
vec3 p10 = tcPosition[10];
vec3 p11 = tcPosition[11];
tePatchDistance = gl_TessCoord.xyz; tePatchDistance = gl_TessCoord.xyz;
vec3 p0 = gl_TessCoord.x * tcPosition[0]; vec3 d0 = gl_TessCoord.x * p3;
vec3 p1 = gl_TessCoord.y * tcPosition[1]; vec3 d1 = gl_TessCoord.y * p6;
vec3 p2 = gl_TessCoord.z * tcPosition[2]; vec3 d2 = gl_TessCoord.z * p7;
vec4 pos = vec4((p0 + p1 + p2),1); vec4 pos = vec4((d0 + d1 + d2),1);
teCamPosition = vec4(MV*pos).xyz; teCamPosition = vec4(MV*pos).xyz;
gl_Position = MVP * pos; gl_Position = MVP * pos;
vec3 n0 = gl_TessCoord.x * tcNormal[0];
vec3 n1 = gl_TessCoord.y * tcNormal[1];
vec3 n2 = gl_TessCoord.z * tcNormal[2];
teCamNormal = N*(n0 + n1 + n2);
vec2 u0 = gl_TessCoord.x * tcUV[0];
vec2 u1 = gl_TessCoord.y * tcUV[1];
vec2 u2 = gl_TessCoord.z * tcUV[2];
teUV = (u0 + u1 + u2);
} }
#version 430 #version 430
layout(location = 0) in vec3 Position; layout(location = 0) in vec3 Position;
layout(location = 1) in vec3 Normal;
layout(location = 2) in vec2 UV;
out vec3 vPosition; out vec3 vPosition;
out vec3 vNormal;
out vec2 vUV;
void main(void) void main(void)
{ {
//transofrmation im tesselation evaluation , einfach nur durchreichen //transofrmation im tesselation evaluation , einfach nur durchreichen
vPosition.xyz = Position.xyz; vPosition.xyz = Position.xyz;
vNormal.xyz = Normal.xyz;
vUV = UV;
} }
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