unique_ptr<RenderableObject> RenderableObject::quad(int startX, int startY, int width, int height, const glm::vec4 &color, GLenum primitive) { glm::vec3 mi(startX, startY, 0.0f); glm::vec3 ma(startX + width, startY + height, 0.0f); vector<glm::vec3> vertices; vector<glm::vec3> normals; vector<glm::vec3> texCoords; float d = 0.1; vertices.push_back(glm::vec3(mi.x, mi.y, d)); vertices.push_back(glm::vec3(mi.x, ma.y, d)); vertices.push_back(glm::vec3(ma.x, ma.y, d)); vertices.push_back(glm::vec3(ma.x, mi.y, d)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); texCoords.push_back(glm::vec3(0.0f, 0.0f, 0.0f)); texCoords.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); texCoords.push_back(glm::vec3(1.0f, 1.0f, 0.0f)); texCoords.push_back(glm::vec3(1.0f, 0.0f, 0.0f)); // Indices vector<GLuint> indices ={ 0, 1, 2, 0, 2, 3 }; uint nrVertices = vertices.size(); vector<RenderableObject::Vertex> attrData(nrVertices); for(uint i=0; i<nrVertices; ++i) { glm::vec3 v = vertices[i]; glm::vec3 n = normals[i]; glm::vec3 t = texCoords[i]; attrData[i].Position = v; attrData[i].Normal = n; attrData[i].Color = color; attrData[i].TexCoords = glm::vec4(t.x, t.y, 0.0f, 0.0f); } unique_ptr<RenderableObject> vbo(new RenderableObject); vbo->setData(attrData, indices, primitive); return vbo; }
void EC_DynamicComponent::DeserializeFromBinary(kNet::DataDeserializer& source, AttributeChange::Type change) { u8 num_attributes = source.Read<u8>(); std::vector<DeserializeData> deserializedAttributes; for(uint i = 0; i < num_attributes; ++i) { std::string id = source.ReadString(); std::string typeName = source.ReadString(); std::string value = source.ReadString(); DeserializeData attrData(id.c_str(), typeName.c_str(), value.c_str()); deserializedAttributes.push_back(attrData); } DeserializeCommon(deserializedAttributes, change); }
unique_ptr<RenderableObject> RenderableObject::sphere(float radius, int iterations, const glm::vec4 &color, GLenum primitive) { vector<FACET3> f((int)pow(4.0, iterations)); int n = CreateUnitSphere(f, iterations); vector<glm::vec3> vertices; vector<glm::vec3> normals; for(int i=0; i<n; ++i) { FACET3& facet = f[i]; vertices.push_back(facet.p1 * radius); vertices.push_back(facet.p2 * radius); vertices.push_back(facet.p3 * radius); facet.p1 = glm::normalize(facet.p1); facet.p2 = glm::normalize(facet.p2); facet.p3 = glm::normalize(facet.p3); normals.push_back(facet.p1); normals.push_back(facet.p2); normals.push_back(facet.p3); } uint nrVertices = vertices.size(); vector<RenderableObject::Vertex> attrData(nrVertices); for(uint i=0; i<nrVertices; ++i) { glm::vec3 v = vertices[i]; glm::vec3 n = normals[i]; attrData[i].Position = v; attrData[i].Normal = n; attrData[i].Color = color; } unique_ptr<RenderableObject> vbo(new RenderableObject); vbo->setData(attrData, primitive); return vbo; }
unique_ptr<RenderableObject> RenderableObject::quadLines(int startX, int startY, int width, int height, const glm::vec4 &color) { glm::vec3 mi(startX, startY, 0.0f); glm::vec3 ma(startX + width, startY + height, 0.0f); vector<glm::vec3> vertices; vector<glm::vec3> normals; float d = 0.1; vertices.push_back(glm::vec3(mi.x, mi.y, d)); vertices.push_back(glm::vec3(mi.x, ma.y, d)); vertices.push_back(glm::vec3(mi.x, ma.y, d)); vertices.push_back(glm::vec3(ma.x, ma.y, d)); vertices.push_back(glm::vec3(ma.x, ma.y, d)); vertices.push_back(glm::vec3(ma.x, mi.y, d)); vertices.push_back(glm::vec3(ma.x, mi.y, d)); vertices.push_back(glm::vec3(mi.x, mi.y, d)); uint nrVertices = vertices.size(); vector<RenderableObject::Vertex> attrData(nrVertices); for(uint i=0; i<nrVertices; ++i) { glm::vec3 v = vertices[i]; attrData[i].Position = v; attrData[i].Color = color; } unique_ptr<RenderableObject> vbo(new RenderableObject); vbo->setData(attrData, GL_LINES); return vbo; }
unique_ptr<RenderableObject> RenderableObject::box(const glm::vec3 &mi, const glm::vec3 &ma, const glm::vec4 &color, GLenum primitive) { vector<glm::vec3> vertices; vector<glm::vec3> normals; // Face 1 vertices.push_back(glm::vec3(mi.x, ma.y, mi.z)); vertices.push_back(glm::vec3(mi.x, ma.y, ma.z)); vertices.push_back(glm::vec3(ma.x, ma.y, ma.z)); vertices.push_back(glm::vec3(ma.x, ma.y, mi.z)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f)); // Face 2 vertices.push_back(glm::vec3(mi.x, mi.y, mi.z)); vertices.push_back(glm::vec3(ma.x, mi.y, mi.z)); vertices.push_back(glm::vec3(ma.x, mi.y, ma.z)); vertices.push_back(glm::vec3(mi.x, mi.y, ma.z)); normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f)); normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f)); // Face 3 vertices.push_back(glm::vec3(mi.x, mi.y, mi.z)); vertices.push_back(glm::vec3(mi.x, ma.y, mi.z)); vertices.push_back(glm::vec3(ma.x, ma.y, mi.z)); vertices.push_back(glm::vec3(ma.x, mi.y, mi.z)); normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f)); normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f)); normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f)); normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f)); // Face 4 vertices.push_back(glm::vec3(mi.x, mi.y, ma.z)); vertices.push_back(glm::vec3(ma.x, mi.y, ma.z)); vertices.push_back(glm::vec3(ma.x, ma.y, ma.z)); vertices.push_back(glm::vec3(mi.x, ma.y, ma.z)); normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f)); normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f)); normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f)); normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f)); // Face 5 vertices.push_back(glm::vec3(mi.x, mi.y, mi.z)); vertices.push_back(glm::vec3(mi.x, mi.y, ma.z)); vertices.push_back(glm::vec3(mi.x, ma.y, ma.z)); vertices.push_back(glm::vec3(mi.x, ma.y, mi.z)); normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f)); normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f)); normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f)); normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f)); // Face 6 vertices.push_back(glm::vec3(ma.x, mi.y, mi.z)); vertices.push_back(glm::vec3(ma.x, ma.y, mi.z)); vertices.push_back(glm::vec3(ma.x, ma.y, ma.z)); vertices.push_back(glm::vec3(ma.x, mi.y, ma.z)); normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f)); normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f)); normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f)); normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f)); // Indices vector<GLuint> indices ={ 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15 }; uint nrVertices = vertices.size(); vector<RenderableObject::Vertex> attrData(nrVertices); for(uint i=0; i<nrVertices; ++i) { glm::vec3 v = vertices[i]; glm::vec3 n = normals[i]; attrData[i].Position = v; attrData[i].Normal = n; attrData[i].Color = color; } unique_ptr<RenderableObject> vbo(new RenderableObject); vbo->setData(attrData, indices, primitive); return vbo; }