Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
e1940bb8c2 | |||
c2c59adefc | |||
5c23ff7701 | |||
cedad4f3ea | |||
65792fbff2 | |||
|
b37eba52aa | ||
|
1a90e00fd6 | ||
|
c527d4fa57 | ||
|
2fb62d38ce | ||
|
87ce88c02a | ||
|
f9085722fd | ||
|
51a68240b0 | ||
|
88adf1618e | ||
|
b1a6202a3b | ||
|
40d88cdb9f | ||
|
7dc9fc2f23 | ||
|
586149c770 | ||
|
8fee6a54f3 | ||
|
2a8b371b89 | ||
|
785f2b63d6 | ||
|
15e5d76326 | ||
|
f43623c163 | ||
|
5eebaa294a | ||
301e36e3bb | |||
|
37d81e9c0f | ||
|
00ccfcce4d | ||
|
89c87c6699 | ||
2f4e14d292 | |||
5a65f57ad7 | |||
c294f6e50a |
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
cmake_minimum_required(VERSION 3.18..3.27)
|
||||
project(Collage
|
||||
VERSION 1.0
|
||||
LANGUAGES CXX
|
||||
@@ -11,7 +11,7 @@ include(cmake/CPM.cmake)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME J3ML
|
||||
URL https://git.redacted.cc/josh/j3ml/archive/Release-1.zip
|
||||
URL https://git.redacted.cc/josh/j3ml/archive/Release-3.1.zip
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
@@ -25,10 +25,17 @@ if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
|
||||
message(FATAL_ERROR "In-Source builds are not allowed")
|
||||
endif()
|
||||
|
||||
add_library(Collage SHARED ${SOURCES} ${HEADERS})
|
||||
if (UNIX AND NOT APPLE)
|
||||
add_library(Collage SHARED ${SOURCES} ${HEADERS})
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
add_library(Collage STATIC ${SOURCES} ${HEADERS})
|
||||
endif()
|
||||
|
||||
add_executable(CollageTest main.cpp)
|
||||
|
||||
set_target_properties(Collage PROPERTIES LINKER_LANGUAGE CXX)
|
||||
target_link_libraries(Collage PUBLIC J3ML)
|
||||
target_link_libraries(CollageTest PUBLIC Collage)
|
||||
set_target_properties(CollageTest PROPERTIES LINKER_LANGUAGE CXX)
|
||||
set_target_properties(CollageTest PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
15
README.md
Normal file
15
README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## Collage
|
||||
#### [](http://unlicense.org/)
|
||||
|
||||
Another model loader for Linux & Windows.
|
||||
|
||||
### Supported Formats
|
||||
- Wavefront OBJ
|
||||
- Animated Wavefront OBJ
|
||||
- Collada (maybe)
|
||||
- FBX
|
||||
|
||||
### Building The Demo
|
||||
```bash
|
||||
git clone https://git.redacted.cc/Redacted/Collage.git && cd Collage && mkdir build && cd build && cmake .. && make -j8
|
||||
```
|
2
include/Collage/collage.h
Normal file
2
include/Collage/collage.h
Normal file
@@ -0,0 +1,2 @@
|
||||
#pragma once
|
||||
#include <Collage/types/model.h>
|
10
include/Collage/types/animation.h
Normal file
10
include/Collage/types/animation.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <Collage/types/bone.h>
|
||||
|
||||
struct KeyFrame {
|
||||
unsigned int index;
|
||||
Bone bone;
|
||||
};
|
||||
|
||||
typedef std::vector<KeyFrame> Animation;
|
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <J3ML/LinearAlgebra.h>
|
||||
#include <J3ML/LinearAlgebra.hpp>
|
||||
class Bone {
|
||||
protected:
|
||||
std::string name;
|
||||
@@ -14,7 +14,7 @@ public:
|
||||
const Matrix4x4& getMatrix();
|
||||
void setMatrix(const Matrix4x4& m);
|
||||
void appendChild(const Bone& bone);
|
||||
uint getDepth(); //The "depth" refers to how far in the bone is on the bonemap. For ex, the fingers would be deeper than the elbow.
|
||||
unsigned int getDepth(); //The "depth" refers to how far in the bone is on the bonemap. For ex, the fingers would be deeper than the elbow.
|
||||
Bone* getParent();
|
||||
Bone* getChildByName(const std::string& bName);
|
||||
Bone* getChildByNameRecursive(const std::string& bName);
|
2
include/Collage/types/keyFrame.h
Normal file
2
include/Collage/types/keyFrame.h
Normal file
@@ -0,0 +1,2 @@
|
||||
#pragma once
|
||||
#include <Collage/types/bone.h>
|
@@ -2,10 +2,10 @@
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <J3ML/LinearAlgebra.h>
|
||||
#include <J3ML/LinearAlgebra/Vector3.h>
|
||||
#include<J3ML/Geometry.h>
|
||||
#include <types/textureInfo.h>
|
||||
#include <J3ML/LinearAlgebra.hpp>
|
||||
#include <J3ML/LinearAlgebra/Vector3.hpp>
|
||||
#include<J3ML/Geometry.hpp>
|
||||
#include <Collage/types/textureInfo.h>
|
||||
|
||||
typedef Vector3 Vertex;
|
||||
|
||||
@@ -27,18 +27,16 @@ class SkeletalVertex : public Vertex {
|
||||
};
|
||||
|
||||
class Model {
|
||||
private:
|
||||
void loadOBJ(const std::string& filename);
|
||||
void load(const std::string& file);
|
||||
protected:
|
||||
void load(const std::string& file);
|
||||
void loadOBJ(const std::string& filename);
|
||||
std::vector<Vertex> vertices;
|
||||
std::vector<uint> indices;
|
||||
std::vector<unsigned int> indices;
|
||||
std::vector<TextureInformation> textureInfo;
|
||||
void mapFaces(const FaceIndices& facedata, const std::vector<Vector3>& positions, const std::vector<Vector2>& uvs);
|
||||
public:
|
||||
ModelType type;
|
||||
const std::vector<Vertex>& getVertices();
|
||||
const std::vector<uint>& getIndices();
|
||||
const std::vector<unsigned int>& getIndices();
|
||||
const std::vector<TextureInformation>& getTextureInformation();
|
||||
Model() = default;
|
||||
explicit Model(const std::string& file);
|
||||
@@ -48,5 +46,5 @@ class SkeletalModel : public Model {
|
||||
protected:
|
||||
std::vector<SkeletalVertex> vertices;
|
||||
public:
|
||||
std::vector<SkeletalVertex>& getSkeletalertices();
|
||||
std::vector<SkeletalVertex>& getSkeletalVertices();
|
||||
};
|
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <J3ML/LinearAlgebra.h>
|
||||
#include <J3ML/LinearAlgebra.hpp>
|
||||
|
||||
struct TextureInformation {
|
||||
std::string path;
|
@@ -1,2 +0,0 @@
|
||||
#pragma once
|
||||
#include <types/model.h>
|
@@ -1,10 +0,0 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <types/bone.h>
|
||||
|
||||
struct KeyFrame {
|
||||
uint index;
|
||||
Bone bone;
|
||||
};
|
||||
|
||||
typedef std::vector<KeyFrame> Animation;
|
@@ -1,2 +0,0 @@
|
||||
#pragma once
|
||||
#include <types/bone.h>
|
21
src/obj.cpp
21
src/obj.cpp
@@ -1,9 +1,8 @@
|
||||
#include <iostream>
|
||||
#include <types/model.h>
|
||||
#include <Collage/types/model.h>
|
||||
|
||||
void Model::loadOBJ(const std::string& filename) {
|
||||
std::ifstream file(filename);
|
||||
//if (!file.is_open())
|
||||
std::vector<Vector3> positions;
|
||||
std::vector<Vector2> uvs;
|
||||
TextureInformation tInfo = {};
|
||||
@@ -35,7 +34,6 @@ void Model::loadOBJ(const std::string& filename) {
|
||||
Vector2 textureCoordinate;
|
||||
vertex = positions[vertexIndex[i]];
|
||||
textureCoordinate = uvs[texCoordIndex[i]];
|
||||
|
||||
vertices.push_back(vertex);
|
||||
tInfo.textureCoordinates.push_back(textureCoordinate);
|
||||
indices.push_back(static_cast<unsigned int>(indices.size()));
|
||||
@@ -44,19 +42,4 @@ void Model::loadOBJ(const std::string& filename) {
|
||||
}
|
||||
textureInfo.push_back(tInfo);
|
||||
file.close();
|
||||
};
|
||||
|
||||
// map face of model to positions and texture coords
|
||||
void Model::mapFaces(const FaceIndices& facedata, const std::vector<Vector3>& positions, const std::vector<Vector2>& uvs) {
|
||||
std::vector<Vector2> textureCoordinates;
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
Vector3 vertex;
|
||||
//Vector2 textureCoordinate;
|
||||
vertex = positions[facedata.vertexIndex[i]];
|
||||
//textureCoordinate = uvs[facedata.texCoordIndex[i]];
|
||||
vertices.push_back(vertex);
|
||||
indices.push_back(static_cast<unsigned int>(indices.size()));
|
||||
//textureCoordinates.push_back(textureCoordinate);
|
||||
}
|
||||
textureInfo.push_back({"", textureCoordinates});
|
||||
}
|
||||
};
|
@@ -1,2 +1,2 @@
|
||||
#include <types/animation.h>
|
||||
#include <types/keyFrame.h>
|
||||
#include <Collage/types/animation.h>
|
||||
#include <Collage/types/keyFrame.h>
|
@@ -1,4 +1,4 @@
|
||||
#include <types/bone.h>
|
||||
#include <Collage/types/bone.h>
|
||||
|
||||
const Matrix4x4& Bone::getMatrix() {
|
||||
return matrix;
|
||||
@@ -54,12 +54,12 @@ Bone* Bone::getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
uint Bone::getDepth() {
|
||||
unsigned int Bone::getDepth() {
|
||||
if (isRootBone())
|
||||
return 0;
|
||||
|
||||
Bone* b = parent;
|
||||
uint depth = 1;
|
||||
unsigned int depth = 1;
|
||||
while (b != nullptr && !b->isRootBone()) {
|
||||
b = b->getParent();
|
||||
depth++;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
#include <types/bone.h>
|
||||
#include <Collage/types/bone.h>
|
||||
struct BoneMap {
|
||||
std::vector<Bone> bones;
|
||||
};
|
@@ -1,4 +1,4 @@
|
||||
#include <types/model.h>
|
||||
#include <Collage/types/model.h>
|
||||
|
||||
void Model::load(const std::string& file) {
|
||||
if (file.ends_with(".obj"))
|
||||
@@ -9,7 +9,7 @@ const std::vector<Vector3>& Model::getVertices() {
|
||||
return vertices;
|
||||
}
|
||||
|
||||
const std::vector<uint>& Model::getIndices() {
|
||||
const std::vector<unsigned int>& Model::getIndices() {
|
||||
return indices;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,6 @@ Model::Model(const std::string &file) {
|
||||
load(file);
|
||||
}
|
||||
|
||||
std::vector<SkeletalVertex> &SkeletalModel::getSkeletalertices() {
|
||||
std::vector<SkeletalVertex>& SkeletalModel::getSkeletalVertices() {
|
||||
return vertices;
|
||||
}
|
||||
|
Reference in New Issue
Block a user