tmp
This commit is contained in:
parent
e161fffc0c
commit
2160dfca34
22 changed files with 339 additions and 157 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
project(GeometryEditor2D)
|
project(3DEditor)
|
||||||
|
|
||||||
### ---------------------- Externals --------------------- ###
|
### ---------------------- Externals --------------------- ###
|
||||||
set(BINDINGS_INCLUDE ../Externals/glfw/include)
|
set(BINDINGS_INCLUDE ../Externals/glfw/include ../Externals)
|
||||||
set(BINDINGS_LIBS glfw Imgui)
|
set(BINDINGS_LIBS glfw Imgui)
|
||||||
|
|
||||||
### ---------------------- Static Library --------------------- ###
|
### ---------------------- Static Library --------------------- ###
|
||||||
|
|
@ -15,8 +15,8 @@ target_link_libraries(${PROJECT_NAME} PUBLIC Graphics Connection Widgets Math Ra
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS})
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS})
|
||||||
|
|
||||||
### -------------------------- Applications -------------------------- ###
|
### -------------------------- Applications -------------------------- ###
|
||||||
add_executable(geomEdit2d ./applications/Entry.cpp)
|
add_executable(edit3d ./applications/Entry.cpp ./applications/SceneLoad.cpp)
|
||||||
target_link_libraries(geomEdit2d ${PROJECT_NAME})
|
target_link_libraries(edit3d ${PROJECT_NAME} Lua ImageIO)
|
||||||
|
|
||||||
file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||||
file(COPY "rsc/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
file(COPY "rsc/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||||
|
|
@ -5,13 +5,18 @@
|
||||||
|
|
||||||
using namespace tp;
|
using namespace tp;
|
||||||
|
|
||||||
|
bool loadMeshes(tp::Scene& scene, const std::string& objetsPath);
|
||||||
|
|
||||||
class EditorGUI : public Application {
|
class EditorGUI : public Application {
|
||||||
public:
|
public:
|
||||||
EditorGUI() {
|
EditorGUI() {
|
||||||
Vec2F renderResolution = { 1000, 1000 };
|
Vec2F renderResolution = { 1000, 1000 };
|
||||||
auto canvas = this->mGraphics->getCanvas();
|
auto canvas = this->mGraphics->getCanvas();
|
||||||
mGui = new EditorWidget<EventHandler, Canvas>(canvas, &geometry, renderResolution);
|
mGui = new EditorWidget<EventHandler, Canvas>(canvas, &geometry, renderResolution);
|
||||||
//
|
|
||||||
|
loadMeshes(geometry, "rsc/scene.obj");
|
||||||
|
|
||||||
|
geometry.mCamera.lookAtPoint({ 0, 0, 0 }, { 3, 3, 2 }, { 0, 0, 1 });
|
||||||
}
|
}
|
||||||
|
|
||||||
~EditorGUI() override { delete mGui; }
|
~EditorGUI() override { delete mGui; }
|
||||||
|
|
@ -24,7 +29,7 @@ public:
|
||||||
void drawFrame(Canvas* canvas) override { mGui->draw(*canvas); }
|
void drawFrame(Canvas* canvas) override { mGui->draw(*canvas); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Geometry geometry;
|
Scene geometry;
|
||||||
EditorWidget<EventHandler, Canvas>* mGui;
|
EditorWidget<EventHandler, Canvas>* mGui;
|
||||||
};
|
};
|
||||||
|
|
||||||
41
3DEditor/applications/SceneLoad.cpp
Normal file
41
3DEditor/applications/SceneLoad.cpp
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include "Scene.hpp"
|
||||||
|
|
||||||
|
#include "obj/OBJ_Loader.h"
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
bool loadMeshes(tp::Scene& scene, const std::string& objetsPath) {
|
||||||
|
using namespace tp;
|
||||||
|
|
||||||
|
objl::Loader Loader;
|
||||||
|
|
||||||
|
if (!Loader.LoadFile(objetsPath.c_str())) {
|
||||||
|
std::cout << "Failed to Load File. May have failed to find it or it was not an .obj file.\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& curMesh : Loader.LoadedMeshes) {
|
||||||
|
scene.mObjects.append(Object());
|
||||||
|
|
||||||
|
auto object = &scene.mObjects.last();
|
||||||
|
|
||||||
|
for (auto& vertex : curMesh.Vertices) {
|
||||||
|
// printf("{ %f, %f, %f }, \n", vertex.Position.X, vertex.Position.Y, vertex.Position.Z);
|
||||||
|
object->mTopology.Points.append(Vec3F{ vertex.Position.X, vertex.Position.Y, vertex.Position.Z });
|
||||||
|
object->mTopology.Normals.append(Vec3F{ vertex.Normal.X, vertex.Normal.Y, vertex.Normal.Z });
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j = 0; j < curMesh.Indices.size(); j += 3) {
|
||||||
|
uint idx1 = (int) curMesh.Indices[j];
|
||||||
|
uint idx2 = (int) curMesh.Indices[j + 1];
|
||||||
|
uint idx3 = (int) curMesh.Indices[j + 2];
|
||||||
|
// printf("{ %i, %i, %i },\n", idx1, idx2, idx3);
|
||||||
|
object->mTopology.Indexes.append({ idx1, idx2, idx3 });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object->mTopology.Normals.size() != object->mTopology.Points.size()) {
|
||||||
|
printf("Logic error loading normals\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return scene.mObjects.size();
|
||||||
|
}
|
||||||
110
3DEditor/private/Render.cpp
Normal file
110
3DEditor/private/Render.cpp
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
#include "Render.hpp"
|
||||||
|
|
||||||
|
#include "GraphicsApi.hpp"
|
||||||
|
|
||||||
|
using namespace tp;
|
||||||
|
|
||||||
|
class ObjectBuffers {
|
||||||
|
public:
|
||||||
|
ObjectBuffers(Object* object) {
|
||||||
|
mObject = (object);
|
||||||
|
|
||||||
|
auto& buff = mObject->mTopology.Points;
|
||||||
|
auto& indices = mObject->mTopology.Indexes;
|
||||||
|
|
||||||
|
glGenVertexArrays(1, &VAO);
|
||||||
|
glGenBuffers(1, &VBO);
|
||||||
|
glGenBuffers(1, &EBO);
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(Vec3F) * buff.size(), buff.getBuff(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Vec3<uhalni>) * indices.size(), indices.getBuff(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), nullptr);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object* mObject = nullptr;
|
||||||
|
|
||||||
|
GLuint VAO = 0;
|
||||||
|
GLuint VBO = 0;
|
||||||
|
GLuint EBO = 0;
|
||||||
|
|
||||||
|
void drawCall() {
|
||||||
|
auto& indices = mObject->mTopology.Indexes;
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glDrawElements(GL_TRIANGLES, indices.size() * 3, GL_UNSIGNED_INT, nullptr);
|
||||||
|
|
||||||
|
// glDrawArrays(GL_TRIANGLES, 0, sizeof(buffer) / (2 * sizeof(float)));
|
||||||
|
|
||||||
|
// glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
~ObjectBuffers() {
|
||||||
|
glDeleteBuffers(1, &VBO);
|
||||||
|
glDeleteVertexArrays(1, &VAO);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Render::Render(Vec2F renderResolution) :
|
||||||
|
mRenderBuffer(renderResolution) {
|
||||||
|
|
||||||
|
mDefaultShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/default.frag", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Render::~Render() {}
|
||||||
|
|
||||||
|
uint4 Render::getRenderBuffer() { return mRenderBuffer.texId(); }
|
||||||
|
|
||||||
|
Vec2F Render::getBufferSize() { return mRenderBuffer.getSize(); }
|
||||||
|
|
||||||
|
void Render::render(const Scene& geometry, Vec2F size) {
|
||||||
|
|
||||||
|
for (auto object : geometry.mObjects) {
|
||||||
|
if (!object->mBuffers) {
|
||||||
|
object->mBuffers = std::make_shared<ObjectBuffers>(&object.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mRenderBuffer.mClearCol = { 0.0f, 0.0f, 0.0f, 0.f };
|
||||||
|
|
||||||
|
mRenderBuffer.beginDraw();
|
||||||
|
mRenderBuffer.clear();
|
||||||
|
|
||||||
|
mDefaultShader.bind();
|
||||||
|
|
||||||
|
Mat4F cameraMat = geometry.mCamera.calculateTransformationMatrix();
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
for (auto object : geometry.mObjects) {
|
||||||
|
|
||||||
|
static auto origin = (GLint) mDefaultShader.getu("Origin");
|
||||||
|
static auto basis = (GLint) mDefaultShader.getu("Basis");
|
||||||
|
static auto camera = (GLint) mDefaultShader.getu("Camera");
|
||||||
|
|
||||||
|
Mat4F basisMat;
|
||||||
|
Vec4F originPoint;
|
||||||
|
|
||||||
|
glUniform4fv(origin, 1, &originPoint[0]);
|
||||||
|
glUniformMatrix4fv(basis, 1, false, &basisMat[0][0]);
|
||||||
|
glUniformMatrix4fv(camera, 1, true, &cameraMat[0][0]);
|
||||||
|
|
||||||
|
object->mBuffers->drawCall();
|
||||||
|
}
|
||||||
|
|
||||||
|
mDefaultShader.unbind();
|
||||||
|
|
||||||
|
mRenderBuffer.endDraw();
|
||||||
|
}
|
||||||
|
|
@ -5,8 +5,9 @@ namespace tp {
|
||||||
template <typename Events, typename Canvas>
|
template <typename Events, typename Canvas>
|
||||||
class ViewportWidget : public Widget<Events, Canvas> {
|
class ViewportWidget : public Widget<Events, Canvas> {
|
||||||
public:
|
public:
|
||||||
explicit ViewportWidget(Canvas* canvas, Geometry* geometry, Vec2F renderResolution) :
|
explicit ViewportWidget(Canvas* canvas, Scene* geometry, Vec2F renderResolution) :
|
||||||
mRender(renderResolution) {
|
mRender(renderResolution) {
|
||||||
|
mGeometry = geometry;
|
||||||
this->createConfig("ViewportWidget");
|
this->createConfig("ViewportWidget");
|
||||||
mImage = canvas->createImageFromTextId(mRender.getRenderBuffer(), mRender.getBufferSize());
|
mImage = canvas->createImageFromTextId(mRender.getRenderBuffer(), mRender.getBufferSize());
|
||||||
mCanvas = canvas;
|
mCanvas = canvas;
|
||||||
|
|
@ -19,18 +20,19 @@ namespace tp {
|
||||||
this->mVisible = areaParent.isOverlap(aArea);
|
this->mVisible = areaParent.isOverlap(aArea);
|
||||||
if (!this->mVisible) return;
|
if (!this->mVisible) return;
|
||||||
|
|
||||||
mRender.render(*mGeometry, this->mArea.size);
|
mGeometry->mCamera.rotate(0.01f, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw(Canvas& canvas) override {
|
void draw(Canvas& canvas) override {
|
||||||
if (!this->mVisible) return;
|
if (!this->mVisible) return;
|
||||||
|
|
||||||
canvas.drawImage(this->mArea, &mImage);
|
mRender.render(*mGeometry, this->mArea.size);
|
||||||
|
canvas.drawImage(this->mArea, &mImage, PI);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Render mRender;
|
Render mRender;
|
||||||
Geometry* mGeometry = nullptr;
|
Scene* mGeometry = nullptr;
|
||||||
Canvas* mCanvas = nullptr;
|
Canvas* mCanvas = nullptr;
|
||||||
Canvas::ImageHandle mImage;
|
Canvas::ImageHandle mImage;
|
||||||
};
|
};
|
||||||
|
|
@ -38,7 +40,7 @@ namespace tp {
|
||||||
template <typename Events, typename Canvas>
|
template <typename Events, typename Canvas>
|
||||||
class EditorWidget : public Widget<Events, Canvas> {
|
class EditorWidget : public Widget<Events, Canvas> {
|
||||||
public:
|
public:
|
||||||
EditorWidget(Canvas* canvas, Geometry* geometry, Vec2F renderResolution) :
|
EditorWidget(Canvas* canvas, Scene* geometry, Vec2F renderResolution) :
|
||||||
mViewport(canvas, geometry, renderResolution) {
|
mViewport(canvas, geometry, renderResolution) {
|
||||||
this->createConfig("EditorWidget");
|
this->createConfig("EditorWidget");
|
||||||
this->addColor("Base", "Base");
|
this->addColor("Base", "Base");
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Geometry.hpp"
|
#include "Scene.hpp"
|
||||||
#include "Rect.hpp"
|
#include "Rect.hpp"
|
||||||
|
|
||||||
#include "FrameBuffer.hpp"
|
#include "FrameBuffer.hpp"
|
||||||
|
|
@ -12,7 +12,7 @@ namespace tp {
|
||||||
explicit Render(Vec2F renderResolution);
|
explicit Render(Vec2F renderResolution);
|
||||||
~Render();
|
~Render();
|
||||||
|
|
||||||
void render(const Geometry& geometry, Vec2F size);
|
void render(const Scene& geometry, Vec2F size);
|
||||||
uint4 getRenderBuffer();
|
uint4 getRenderBuffer();
|
||||||
Vec2F getBufferSize();
|
Vec2F getBufferSize();
|
||||||
|
|
||||||
34
3DEditor/public/Scene.hpp
Normal file
34
3DEditor/public/Scene.hpp
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Topology.hpp"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class ObjectBuffers;
|
||||||
|
|
||||||
|
namespace tp {
|
||||||
|
|
||||||
|
class Object {
|
||||||
|
public:
|
||||||
|
Object() = default;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Topology mTopology;
|
||||||
|
std::shared_ptr<ObjectBuffers> mBuffers;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PointLight {
|
||||||
|
Vec3F pos;
|
||||||
|
halnf fallOut = 1.f;
|
||||||
|
halnf intensity = 1.f;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Scene {
|
||||||
|
public:
|
||||||
|
Scene() = default;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Buffer<Object> mObjects;
|
||||||
|
Buffer<PointLight> mLights;
|
||||||
|
Camera mCamera;
|
||||||
|
};
|
||||||
|
}
|
||||||
112
3DEditor/rsc/scene.obj
Normal file
112
3DEditor/rsc/scene.obj
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
# Blender v3.0.1 OBJ File: 'scene.blend'
|
||||||
|
# www.blender.org
|
||||||
|
mtllib meshes.mtl
|
||||||
|
o Cube
|
||||||
|
v -1.039076 1.039076 1.792917
|
||||||
|
v -1.039076 1.039076 -1.285234
|
||||||
|
v 1.039076 1.039076 1.792917
|
||||||
|
v 1.039076 1.039076 -1.285234
|
||||||
|
v -1.039076 -1.039076 1.792917
|
||||||
|
v -1.039076 -1.039076 -1.285234
|
||||||
|
v 1.039076 -1.039076 1.792917
|
||||||
|
v 1.039076 -1.039076 -1.285234
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 0.375000 0.750000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.375000 0.000000
|
||||||
|
vt 0.375000 0.250000
|
||||||
|
vt 0.625000 0.250000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.125000 0.750000
|
||||||
|
vt 0.375000 0.500000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 1.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 1.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
usemtl Material
|
||||||
|
s off
|
||||||
|
f 1/1/1 3/2/1 7/3/1 5/4/1
|
||||||
|
f 4/5/2 8/6/2 7/7/2 3/2/2
|
||||||
|
f 8/8/3 6/9/3 5/10/3 7/11/3
|
||||||
|
f 6/12/4 8/13/4 4/5/4 2/14/4
|
||||||
|
f 6/9/5 2/14/5 1/1/5 5/10/5
|
||||||
|
o Cube.001
|
||||||
|
v 0.411013 -0.208216 -1.264212
|
||||||
|
v 0.411013 -0.208216 -0.612621
|
||||||
|
v -0.208216 -0.411013 -1.264212
|
||||||
|
v -0.208216 -0.411013 -0.612621
|
||||||
|
v 0.208216 0.411013 -1.264212
|
||||||
|
v 0.208216 0.411013 -0.612621
|
||||||
|
v -0.411013 0.208216 -1.264212
|
||||||
|
v -0.411013 0.208216 -0.612621
|
||||||
|
vt 0.375000 0.000000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.625000 0.250000
|
||||||
|
vt 0.375000 0.250000
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.375000 0.500000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.375000 0.750000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.125000 0.750000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vn 0.3112 -0.9503 0.0000
|
||||||
|
vn -0.9503 -0.3112 0.0000
|
||||||
|
vn -0.3112 0.9503 0.0000
|
||||||
|
vn 0.9503 0.3112 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 0.0000 0.0000 1.0000
|
||||||
|
usemtl None
|
||||||
|
s off
|
||||||
|
f 9/15/6 10/16/6 12/17/6 11/18/6
|
||||||
|
f 11/18/7 12/17/7 16/19/7 15/20/7
|
||||||
|
f 15/20/8 16/19/8 14/21/8 13/22/8
|
||||||
|
f 13/22/9 14/21/9 10/23/9 9/24/9
|
||||||
|
f 11/25/10 15/20/10 13/22/10 9/26/10
|
||||||
|
f 16/19/11 12/27/11 10/28/11 14/21/11
|
||||||
|
o Cube.002
|
||||||
|
v -0.351718 -0.467100 -0.602050
|
||||||
|
v -0.351718 -0.467100 0.049542
|
||||||
|
v -0.800825 0.004996 -0.602050
|
||||||
|
v -0.800825 0.004996 0.049542
|
||||||
|
v 0.120377 -0.017993 -0.602050
|
||||||
|
v 0.120377 -0.017993 0.049542
|
||||||
|
v -0.328730 0.454103 -0.602050
|
||||||
|
v -0.328730 0.454103 0.049542
|
||||||
|
vt 0.375000 0.000000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.625000 0.250000
|
||||||
|
vt 0.375000 0.250000
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.375000 0.500000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.375000 0.750000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.125000 0.750000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vn -0.7245 -0.6892 0.0000
|
||||||
|
vn -0.6892 0.7245 0.0000
|
||||||
|
vn 0.7245 0.6892 0.0000
|
||||||
|
vn 0.6892 -0.7245 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 0.0000 0.0000 1.0000
|
||||||
|
usemtl None
|
||||||
|
s off
|
||||||
|
f 17/29/12 18/30/12 20/31/12 19/32/12
|
||||||
|
f 19/32/13 20/31/13 24/33/13 23/34/13
|
||||||
|
f 23/34/14 24/33/14 22/35/14 21/36/14
|
||||||
|
f 21/36/15 22/35/15 18/37/15 17/38/15
|
||||||
|
f 19/39/16 23/34/16 21/36/16 17/40/16
|
||||||
|
f 24/33/17 20/41/17 18/42/17 22/35/17
|
||||||
7
3DEditor/rsc/shaders/default.frag
Normal file
7
3DEditor/rsc/shaders/default.frag
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#version 330 core
|
||||||
|
|
||||||
|
out vec4 FragColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
FragColor = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1.f);
|
||||||
|
}
|
||||||
11
3DEditor/rsc/shaders/default.vert
Normal file
11
3DEditor/rsc/shaders/default.vert
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#version 330 core
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 Point;
|
||||||
|
|
||||||
|
uniform vec4 Origin;
|
||||||
|
uniform mat4 Basis;
|
||||||
|
uniform mat4 Camera;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = Camera * vec4(Point.xyz, 1.0);
|
||||||
|
}
|
||||||
|
|
@ -24,4 +24,4 @@ add_subdirectory(Widgets)
|
||||||
add_subdirectory(LibraryViewer)
|
add_subdirectory(LibraryViewer)
|
||||||
add_subdirectory(RasterRender)
|
add_subdirectory(RasterRender)
|
||||||
add_subdirectory(Sketch3D)
|
add_subdirectory(Sketch3D)
|
||||||
add_subdirectory(GeometryEditor2D)
|
add_subdirectory(3DEditor)
|
||||||
|
|
@ -1,100 +0,0 @@
|
||||||
#include "Render.hpp"
|
|
||||||
|
|
||||||
#include "GraphicsApi.hpp"
|
|
||||||
|
|
||||||
using namespace tp;
|
|
||||||
|
|
||||||
struct Shape {
|
|
||||||
float buffer[8] = {
|
|
||||||
1, 1, 1, 0, 0, 0, //
|
|
||||||
0, 1, // 1, 1, 0, 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned int indices[6] = { 0, 1, 3, 1, 2, 3 };
|
|
||||||
|
|
||||||
GLuint VAO = 0;
|
|
||||||
GLuint VBO = 0;
|
|
||||||
GLuint EBO = 0;
|
|
||||||
|
|
||||||
Shape() {
|
|
||||||
glGenVertexArrays(1, &VAO);
|
|
||||||
glGenBuffers(1, &VBO);
|
|
||||||
glGenBuffers(1, &EBO);
|
|
||||||
|
|
||||||
glBindVertexArray(VAO);
|
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(buffer), buffer, GL_STATIC_DRAW);
|
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
|
|
||||||
|
|
||||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), nullptr);
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
|
|
||||||
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
glBindVertexArray(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawCall() {
|
|
||||||
const auto numPoints = sizeof(buffer) / (2 * sizeof(float));
|
|
||||||
|
|
||||||
glBindVertexArray(VAO);
|
|
||||||
|
|
||||||
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
|
||||||
auto num = sizeof(indices) / sizeof(indices[0]);
|
|
||||||
glDrawElements(GL_TRIANGLES, num, GL_UNSIGNED_INT, nullptr);
|
|
||||||
|
|
||||||
// glDrawArrays(GL_TRIANGLES, 0, sizeof(buffer) / (2 * sizeof(float)));
|
|
||||||
|
|
||||||
// glBindVertexArray(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
~Shape() {
|
|
||||||
glDeleteBuffers(1, &VBO);
|
|
||||||
glDeleteVertexArrays(1, &VAO);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Render::Render(Vec2F renderResolution) :
|
|
||||||
mRenderBuffer(renderResolution) {
|
|
||||||
|
|
||||||
mDefaultShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/default.frag", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Render::~Render() {}
|
|
||||||
|
|
||||||
uint4 Render::getRenderBuffer() { return mRenderBuffer.texId(); }
|
|
||||||
|
|
||||||
Vec2F Render::getBufferSize() { return mRenderBuffer.getSize(); }
|
|
||||||
|
|
||||||
void Render::render(const Geometry& geometry, Vec2F size) {
|
|
||||||
|
|
||||||
static Shape shape;
|
|
||||||
|
|
||||||
mRenderBuffer.mClearCol = { 0.1f, 0.1f, 0.1f, 1.f };
|
|
||||||
|
|
||||||
mRenderBuffer.beginDraw();
|
|
||||||
mRenderBuffer.clear();
|
|
||||||
|
|
||||||
{
|
|
||||||
mDefaultShader.bind();
|
|
||||||
|
|
||||||
static auto uniform_color = mDefaultShader.getu("Color");
|
|
||||||
static auto uniform_scale = mDefaultShader.getu("Viewport");
|
|
||||||
|
|
||||||
RGBA col = { 0, 0, 1.f, 1.f };
|
|
||||||
RectF viewport = { -1.0f, -1.0f, 3.f, 3.f };
|
|
||||||
viewport.w = viewport.z * (size.y / size.x);
|
|
||||||
|
|
||||||
glUniform4fv(uniform_color, 1, &col.r);
|
|
||||||
glUniform4fv(uniform_scale, 1, &viewport.x);
|
|
||||||
|
|
||||||
shape.drawCall();
|
|
||||||
|
|
||||||
mDefaultShader.unbind();
|
|
||||||
}
|
|
||||||
|
|
||||||
mRenderBuffer.endDraw();
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
namespace tp {
|
|
||||||
class Geometry {
|
|
||||||
public:
|
|
||||||
Geometry() = default;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
#version 330 core
|
|
||||||
|
|
||||||
uniform vec4 Color;
|
|
||||||
|
|
||||||
out vec4 FragColor;
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
FragColor = vec4(1.f);
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
#version 330 core
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 point;
|
|
||||||
|
|
||||||
uniform vec4 Viewport;
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
vec2 transformedPoint = point;
|
|
||||||
|
|
||||||
transformedPoint.x = transformedPoint.x - Viewport.x;
|
|
||||||
transformedPoint.y = transformedPoint.y - Viewport.y;
|
|
||||||
|
|
||||||
transformedPoint.x = transformedPoint.x / Viewport.z;
|
|
||||||
transformedPoint.y = transformedPoint.y / Viewport.w;
|
|
||||||
|
|
||||||
transformedPoint.y = -transformedPoint.y;
|
|
||||||
|
|
||||||
transformedPoint.y = transformedPoint.y * 2;
|
|
||||||
transformedPoint.x = transformedPoint.x * 2;
|
|
||||||
|
|
||||||
gl_Position = vec4(transformedPoint.x - 1, transformedPoint.y + 1, 1.0, 1.0);
|
|
||||||
}
|
|
||||||
|
|
@ -34,7 +34,7 @@ namespace tp {
|
||||||
|
|
||||||
Buffer<Vec3F> Points;
|
Buffer<Vec3F> Points;
|
||||||
Buffer<Vec3F> Normals;
|
Buffer<Vec3F> Normals;
|
||||||
Buffer<Vec3I> Indexes;
|
Buffer<Vec3<uhalni>> Indexes;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TopologyCache {
|
struct TopologyCache {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ project(RayTracer)
|
||||||
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
|
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
|
||||||
file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp" "./applications/*.hpp")
|
file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp" "./applications/*.hpp")
|
||||||
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
|
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ./public/)
|
target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ../Externals/)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Math Connection)
|
target_link_libraries(${PROJECT_NAME} PUBLIC Math Connection)
|
||||||
|
|
||||||
### -------------------------- Applications -------------------------- ###
|
### -------------------------- Applications -------------------------- ###
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ extern "C" {
|
||||||
#include "lualib.h"
|
#include "lualib.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "OBJ_Loader.h"
|
#include "obj/OBJ_Loader.h"
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
|
||||||
|
|
@ -139,7 +139,6 @@ void loadScene(tp::Scene& scene, const std::string& scenePath, tp::RayTracer::Re
|
||||||
// Remove the filename from the path
|
// Remove the filename from the path
|
||||||
fs::path directoryPath = fullPath.remove_filename();
|
fs::path directoryPath = fullPath.remove_filename();
|
||||||
|
|
||||||
|
|
||||||
if (luaL_dofile(L, scenePath.c_str()) != 0) {
|
if (luaL_dofile(L, scenePath.c_str()) != 0) {
|
||||||
lua_close(L);
|
lua_close(L);
|
||||||
printf("Cant open scene script.\n");
|
printf("Cant open scene script.\n");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue