Compare commits
5 Commits
c25ed1949d
...
e9f1f49416
| Author | SHA1 | Date | |
|---|---|---|---|
| e9f1f49416 | |||
| fda88a906b | |||
| 5fd5eb892b | |||
| 6abcaeb0d1 | |||
| a422e5cfa2 |
107
dev/shells.nix
107
dev/shells.nix
@@ -2,28 +2,109 @@
|
|||||||
|
|
||||||
perSystem = { config, system, pkgs, self', inputs', ... }: {
|
perSystem = { config, system, pkgs, self', inputs', ... }: {
|
||||||
|
|
||||||
devShells.default = pkgs.mkShellNoCC {
|
devShells = {
|
||||||
|
bash = pkgs.mkShellNoCC {
|
||||||
|
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
clang
|
clang
|
||||||
|
|
||||||
glfw
|
glfw
|
||||||
glew
|
glew
|
||||||
|
|
||||||
sdl3
|
sdl3
|
||||||
|
|
||||||
curl
|
curl
|
||||||
glm
|
glm
|
||||||
nlohmann_json
|
nlohmann_json
|
||||||
stb
|
stb
|
||||||
|
|
||||||
gamenetworkingsockets
|
gamenetworkingsockets
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
nvim-bash = pkgs.mkShellNoCC {
|
||||||
|
|
||||||
|
packages = with pkgs; [
|
||||||
|
clang
|
||||||
|
|
||||||
|
glfw
|
||||||
|
glew
|
||||||
|
|
||||||
|
sdl3
|
||||||
|
|
||||||
|
curl
|
||||||
|
glm
|
||||||
|
nlohmann_json
|
||||||
|
stb
|
||||||
|
|
||||||
|
gamenetworkingsockets
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
exec nvim
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
zsh = pkgs.mkShellNoCC {
|
||||||
|
|
||||||
|
packages = with pkgs; [
|
||||||
|
clang
|
||||||
|
|
||||||
|
glfw
|
||||||
|
glew
|
||||||
|
|
||||||
|
sdl3
|
||||||
|
|
||||||
|
curl
|
||||||
|
glm
|
||||||
|
nlohmann_json
|
||||||
|
stb
|
||||||
|
|
||||||
|
gamenetworkingsockets
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
export SHELL=$(realpath `which zsh`)
|
||||||
|
exec zsh
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
nvim-zsh = pkgs.mkShellNoCC {
|
||||||
|
|
||||||
|
packages = with pkgs; [
|
||||||
|
clang
|
||||||
|
|
||||||
|
glfw
|
||||||
|
glew
|
||||||
|
|
||||||
|
sdl3
|
||||||
|
|
||||||
|
curl
|
||||||
|
glm
|
||||||
|
nlohmann_json
|
||||||
|
stb
|
||||||
|
|
||||||
|
gamenetworkingsockets
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
export SHELL=$(realpath `which zsh`)
|
||||||
|
exec nvim
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
default = self'.devShells.bash;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,17 +5,40 @@
|
|||||||
|
|
||||||
#include "extratools.h"
|
#include "extratools.h"
|
||||||
|
|
||||||
|
#include "utils/Renderer/RenderTarget.h"
|
||||||
|
|
||||||
namespace Archimedes {
|
namespace Archimedes {
|
||||||
|
|
||||||
class Object {
|
class Object {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Object() {};
|
Object(RenderTarget rt) : mesh(rt) {};
|
||||||
|
|
||||||
|
Object(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, glm::mat4 t)
|
||||||
|
: mesh(vb, ia, vl, s), worldTransform(t) {}
|
||||||
|
|
||||||
|
Object() {}
|
||||||
|
|
||||||
~Object() {};
|
~Object() {};
|
||||||
|
|
||||||
|
///scales an object absolutely
|
||||||
|
void scaleTo() {}
|
||||||
|
void scaleRel() {}
|
||||||
|
|
||||||
|
void moveTo() {}
|
||||||
|
void moveRel() {}
|
||||||
|
|
||||||
|
void rotateTo() {}
|
||||||
|
void rotateRel() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
glm::vec3 position = glm::vec3(0);
|
||||||
|
glm::vec3 rotation = glm::vec3(0);
|
||||||
|
|
||||||
glm::mat4 worldTransform = glm::mat4(1.0f);
|
glm::mat4 worldTransform = glm::mat4(1.0f);
|
||||||
|
|
||||||
|
RenderTarget mesh;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,13 @@ namespace Archimedes {
|
|||||||
class Renderer {
|
class Renderer {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
enum class RenderMode {
|
||||||
|
Triangles,
|
||||||
|
Lines,
|
||||||
|
Points
|
||||||
|
};
|
||||||
|
|
||||||
int w, h;
|
int w, h;
|
||||||
|
|
||||||
glm::vec4 clearColor = { 0.0f, 0.0f, 0.0f, 1.0f };
|
glm::vec4 clearColor = { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||||
@@ -37,7 +44,7 @@ namespace Archimedes {
|
|||||||
|
|
||||||
virtual void useRenderTarget(RenderTarget& rt) = 0;
|
virtual void useRenderTarget(RenderTarget& rt) = 0;
|
||||||
|
|
||||||
virtual void draw(const RenderTarget&) = 0;
|
virtual void draw(const RenderTarget& rt, RenderMode mode = RenderMode::Triangles) = 0;
|
||||||
|
|
||||||
virtual Renderer* getRendererImpl() = 0;
|
virtual Renderer* getRendererImpl() = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ namespace Archimedes {
|
|||||||
return rt;
|
return rt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void useRenderTarget(RenderTarget& rt) override {
|
void useRenderTarget(RenderTarget& rt) override {
|
||||||
|
|
||||||
glGenVertexArrays(1, &rt.vertexArray.id);
|
glGenVertexArrays(1, &rt.vertexArray.id);
|
||||||
@@ -202,7 +203,7 @@ namespace Archimedes {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void draw(const RenderTarget& rt) override {
|
void draw(const RenderTarget& rt, RenderMode mode) override {
|
||||||
|
|
||||||
glUseProgram(rt.shader.id);
|
glUseProgram(rt.shader.id);
|
||||||
|
|
||||||
@@ -218,7 +219,17 @@ namespace Archimedes {
|
|||||||
|
|
||||||
glBindVertexArray(rt.vertexArray.id);
|
glBindVertexArray(rt.vertexArray.id);
|
||||||
|
|
||||||
glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
switch(mode) {
|
||||||
|
case RenderMode::Triangles:
|
||||||
|
glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||||
|
case RenderMode::Lines:
|
||||||
|
glDrawElements(GL_LINES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||||
|
case RenderMode::Points:
|
||||||
|
glDrawElements(GL_POINTS, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|||||||
54
src/modules/Archimedes-Modules/Sandbox/JObject.h
Normal file
54
src/modules/Archimedes-Modules/Sandbox/JObject.h
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#include "pch.hpp"
|
||||||
|
|
||||||
|
#include "Object.h"
|
||||||
|
|
||||||
|
namespace Archimedes {
|
||||||
|
|
||||||
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
class JObject {
|
||||||
|
|
||||||
|
public:
|
||||||
|
JObject(std::string path) {
|
||||||
|
|
||||||
|
std::ifstream file(path);
|
||||||
|
if (!file.is_open()) goodJSON = false;
|
||||||
|
document = json::parse(file);
|
||||||
|
file.close();
|
||||||
|
templates = document["Templates"];
|
||||||
|
objects = document["Objects"];
|
||||||
|
setup = document["Set Up"];
|
||||||
|
cameras = document["Cameras"];
|
||||||
|
lights = document["Lights"];
|
||||||
|
actions = document["Actions"];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValid() const { return goodJSON; }
|
||||||
|
|
||||||
|
std::vector<Object> buildObjects() {
|
||||||
|
|
||||||
|
std::vector<Object> v;
|
||||||
|
|
||||||
|
|
||||||
|
for (json::const_iterator it = templates.cbegin(); it != templates.cend(); it++)
|
||||||
|
{
|
||||||
|
json element = *it;
|
||||||
|
std::string name = element["name"];
|
||||||
|
std::string type = element["type"];
|
||||||
|
if (type == "CIRCLE") {}
|
||||||
|
if (type == "SQUARE") {}
|
||||||
|
if (type == "RECTANGLE") {}
|
||||||
|
if (type == "POLYGON") {}
|
||||||
|
if (type == "TEXT") {}
|
||||||
|
}
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
bool goodJSON = true;
|
||||||
|
|
||||||
|
json document, templates, objects, setup, cameras, lights, actions;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -86,20 +86,42 @@ void Sandbox::onLoad() {
|
|||||||
|
|
||||||
void Sandbox::run() {
|
void Sandbox::run() {
|
||||||
|
|
||||||
static float scale = 100.0f;
|
static float scale = 1.0f;
|
||||||
|
|
||||||
static glm::vec3 pos(0), rot(0);
|
static glm::vec3 pos(0), rot(0);
|
||||||
|
|
||||||
static glm::vec3 camPos(0.0f, 0.0f, 3.0f), camRot(0.0f, 0.0f, 0.0f);
|
static glm::vec3 camPos(0.0f, 0.0f, 3.0f), camRot(0.0f, glm::pi<float>(), 0.0f);
|
||||||
|
|
||||||
static glm::mat4 orthoCamera, perspCamera, cameraTransform;
|
static glm::mat4 orthoCamera, perspCamera, cameraTransform;
|
||||||
|
|
||||||
|
std::vector<glm::vec3> otf = {
|
||||||
|
glm::vec3(0.5f, 0.5f, 0.0f),
|
||||||
|
glm::vec3(-0.5f, -0.5f, 0.0f),
|
||||||
|
|
||||||
|
glm::vec3(-0.5f, 0.5f, 0.0f),
|
||||||
|
glm::vec3(0.5f, -0.5f, 0.0f)
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
cameraTransform = glm::mat4(1.0f);
|
cameraTransform = glm::mat4(1.0f);
|
||||||
cameraTransform = glm::translate(cameraTransform, camPos);
|
cameraTransform = glm::translate(cameraTransform, camPos);
|
||||||
cameraTransform = glm::rotate(cameraTransform, camRot.x, glm::vec3(1.0f, 0.0f, 0.0f));
|
cameraTransform = glm::rotate(cameraTransform, camRot.x, glm::vec3(1.0f, 0.0f, 0.0f));
|
||||||
cameraTransform = glm::rotate(cameraTransform, camRot.y, glm::vec3(0.0f, 1.0f, 0.0f));
|
cameraTransform = glm::rotate(cameraTransform, camRot.y, glm::vec3(0.0f, 1.0f, 0.0f));
|
||||||
cameraTransform = glm::rotate(cameraTransform, camRot.z, glm::vec3(0.0f, 0.0f, 1.0f));
|
cameraTransform = glm::rotate(cameraTransform, camRot.z, glm::vec3(0.0f, 0.0f, 1.0f));
|
||||||
|
*/
|
||||||
|
|
||||||
|
cameraTransform = glm::lookAt(
|
||||||
|
camPos,
|
||||||
|
camPos + glm::normalize(glm::vec3(glm::sin(camRot.y) * glm::cos(camRot.x), glm::sin(camRot.x), glm::cos(camRot.y) * glm::cos(camRot.x))),
|
||||||
|
glm::vec3(0.0f, 1.0f, 0.0f)
|
||||||
|
);
|
||||||
|
/*
|
||||||
|
cameraTransform = glm::lookAt(
|
||||||
|
camPos,
|
||||||
|
glm::vec3(0.0f, 0.0f, 0.0f),
|
||||||
|
glm::vec3(0.0f, 1.0f, 0.0f)
|
||||||
|
);
|
||||||
|
*/
|
||||||
int w, h;
|
int w, h;
|
||||||
window->getSize(w, h);
|
window->getSize(w, h);
|
||||||
|
|
||||||
@@ -124,7 +146,8 @@ void Sandbox::run() {
|
|||||||
//gridTransform = glm::scale(gridTransform, glm::vec3(800.0f));
|
//gridTransform = glm::scale(gridTransform, glm::vec3(800.0f));
|
||||||
|
|
||||||
|
|
||||||
cubeTransform = orthoCamera * cubeTransform;
|
//cubeTransform = orthoCamera * cubeTransform;
|
||||||
|
cubeTransform = perspCamera * cubeTransform;
|
||||||
|
|
||||||
//gridTransform = orthoCamera * gridTransform;
|
//gridTransform = orthoCamera * gridTransform;
|
||||||
|
|
||||||
@@ -137,7 +160,7 @@ void Sandbox::run() {
|
|||||||
|
|
||||||
//window->getRenderer()->draw(grid);
|
//window->getRenderer()->draw(grid);
|
||||||
window->getRenderer()->draw(cube);
|
window->getRenderer()->draw(cube);
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
@@ -154,25 +177,25 @@ void Sandbox::run() {
|
|||||||
|
|
||||||
ImGui::Text("Properties");
|
ImGui::Text("Properties");
|
||||||
|
|
||||||
ImGui::SliderFloat("pitch", &rot.x, -3.14159265359f, 3.14159265359f);
|
ImGui::SliderFloat("pitch", &rot.x, -glm::pi<float>(), glm::pi<float>());
|
||||||
ImGui::SliderFloat("yaw", &rot.y, -3.14159265359f, 3.14159265359f);
|
ImGui::SliderFloat("yaw", &rot.y, -glm::pi<float>(), glm::pi<float>());
|
||||||
ImGui::SliderFloat("roll", &rot.z, -3.14159265359f, 3.14159265359f);
|
ImGui::SliderFloat("roll", &rot.z, -glm::pi<float>(), glm::pi<float>());
|
||||||
|
|
||||||
ImGui::SliderFloat("scale", &scale, 0.1f, 1000.0f);
|
ImGui::SliderFloat("scale", &scale, 0.1f, 10.0f);
|
||||||
|
|
||||||
ImGui::SliderFloat("x", &pos.x, -100.0f, 100.0f);
|
ImGui::SliderFloat("x", &pos.x, -10.0f, 10.0f);
|
||||||
ImGui::SliderFloat("y", &pos.y, -100.0f, 100.0f);
|
ImGui::SliderFloat("y", &pos.y, -10.0f, 10.0f);
|
||||||
ImGui::SliderFloat("z", &pos.z, -100.0f, 100.0f);
|
ImGui::SliderFloat("z", &pos.z, -10.0f, 10.0f);
|
||||||
|
|
||||||
ImGui::Text("Camera Properties");
|
ImGui::Text("Camera Properties");
|
||||||
|
|
||||||
ImGui::SliderFloat("c_pitch", &camRot.x, -3.14159265359f, 3.14159265359f);
|
ImGui::SliderFloat("c_pitch", &camRot.x, -glm::pi<float>(), glm::pi<float>());
|
||||||
ImGui::SliderFloat("c_yaw", &camRot.y, -3.14159265359f, 3.14159265359f);
|
ImGui::SliderFloat("c_yaw", &camRot.y, 0, 2 * glm::pi<float>());
|
||||||
ImGui::SliderFloat("c_roll", &camRot.z, -3.14159265359f, 3.14159265359f);
|
ImGui::SliderFloat("c_roll", &camRot.z, -glm::pi<float>(), glm::pi<float>());
|
||||||
|
|
||||||
ImGui::SliderFloat("c_x", &camPos.x, -100.0f, 100.0f);
|
ImGui::SliderFloat("c_x", &camPos.x, -10.0f, 10.0f);
|
||||||
ImGui::SliderFloat("c_y", &camPos.y, -100.0f, 100.0f);
|
ImGui::SliderFloat("c_y", &camPos.y, -10.0f, 10.0f);
|
||||||
ImGui::SliderFloat("c_z", &camPos.z, -100.0f, 100.0f);
|
ImGui::SliderFloat("c_z", &camPos.z, -10.0f, 10.0f);
|
||||||
|
|
||||||
|
|
||||||
if(ImGui::Button("Reset Window Size")) {
|
if(ImGui::Button("Reset Window Size")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user