using System; using System.Collections.Generic; using System.Linq; using System.Text; using OpenGL4NET; namespace Semestralka { class Object { string objectName; int countOfVertex; private int vert; int countOfFaces; private int fac; Vector3[] vertex; uint[] index; uint vertexVBO, indexVBO; public Object(string objectName) { this.objectName = objectName; countOfVertex = 0; vert = 0; countOfFaces = 0; fac = 0; } public void setCountOfVertex(int countOfVertex) { this.countOfVertex = countOfVertex; } public void addedVertex() { countOfVertex++; } public void setCountOfFaces(int countOfFaces) { this.countOfFaces = countOfFaces; } public void addedFace() { countOfFaces++; } public void createVertexField() { vertex = new Vector3[countOfVertex]; } public void createIndexFiels() { index = new uint[3 * countOfFaces]; } public void addVertex(float x, float y, float z) { vertex[vert++] = new Vector3(x,y,z); } public void addFace(uint p1, uint p2, uint p3) { index[fac++] = p1; index[fac++] = p2; index[fac++] = p3; } public void createBuffers() { vertexVBO = gl.GenBuffer(); gl.BindBuffer(GL.ARRAY_BUFFER, vertexVBO); gl.BufferData(GL.ARRAY_BUFFER, vertex.Length * 3 * sizeof(float), vertex, GL.STATIC_DRAW); indexVBO = gl.GenBuffer(); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, indexVBO); gl.BufferData(GL.ELEMENT_ARRAY_BUFFER, index.Length * sizeof(uint), index, GL.STATIC_DRAW); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, 0); gl.BindBuffer(GL.ARRAY_BUFFER, 0); } public void render() { //gl.Color3f(1f, 0f, 0f); gl.BindBuffer(GL.ARRAY_BUFFER, vertexVBO); gl.EnableClientState(GL.VERTEX_ARRAY); gl.VertexPointer(3, GL.FLOAT, 3 * sizeof(float), (IntPtr)0); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, indexVBO); gl.DrawElements(GL.TRIANGLES, 24, GL.UNSIGNED_INT, (IntPtr)0); gl.DisableClientState(GL.VERTEX_ARRAY); gl.BindBuffer(GL.ARRAY_BUFFER, 0); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, 0); } public void destroy() { gl.DeleteBuffer(vertexVBO); gl.DeleteBuffer(indexVBO); } public void objectInfo() { Console.WriteLine("Object name: " + objectName + "\ncount of vertex = " + countOfVertex + "\ncount of faces = " + countOfFaces); if (vertex != null) { for (int i = 0; i < vertex.Length; i++) { Console.WriteLine("v" + i + " = " + vertex[i].x + " " + vertex[i].y + " " + vertex[i].z); } } if (index != null) { for (int i = 0; i < index.Length; i++) { Console.WriteLine("f" + (i/3) + " = " + index[i] + " " + index[++i] + " " + index[++i]); } } } } }