3D Editor treaks
This commit is contained in:
parent
0b279163de
commit
822c60d839
27 changed files with 254 additions and 124 deletions
|
|
@ -19,5 +19,6 @@ file(GLOB APP_SOURCES "./applications/*.cpp")
|
|||
add_executable(3DEditorApp ${APP_SOURCES})
|
||||
target_link_libraries(3DEditorApp ${PROJECT_NAME})
|
||||
|
||||
file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||
file(COPY "rsc/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||
file(COPY "../RasterRender/rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||
file(COPY "../Graphics/rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||
file(COPY "../3DScene/rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||
|
|
|
|||
|
|
@ -37,4 +37,4 @@ void Editor::denoise() {
|
|||
if (device.getError(errorMessage) != oidn::Error::None) {
|
||||
std::cerr << "Error: " << errorMessage << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,10 @@ Editor::Editor() {
|
|||
void Editor::renderViewport() {
|
||||
switch (mRenderType) {
|
||||
case RenderType::RASTER:
|
||||
mRasterRenderer.render(mScene, mScene.mRenderSettings.size);
|
||||
mRasterRenderer.beginRender(mScene, mScene.mRenderSettings.size);
|
||||
mRasterRenderer.renderDefault(mScene);
|
||||
if (mActive) mRasterRenderer.renderOutline(mScene.mCamera, *mActive);
|
||||
mRasterRenderer.endRender();
|
||||
break;
|
||||
|
||||
case RenderType::PATH_TRACER:
|
||||
|
|
@ -54,6 +57,7 @@ uint4 Editor::getViewportTexID() {
|
|||
|
||||
void Editor::loadDefaults() {
|
||||
mScene.load("rsc/scene/script.lua");
|
||||
mResetCamera = mScene.mCamera;
|
||||
}
|
||||
|
||||
void Editor::setViewportSize(const Vec2F& size) {
|
||||
|
|
@ -73,6 +77,7 @@ Editor::~Editor() {
|
|||
}
|
||||
|
||||
void Editor::renderPathFrame() {
|
||||
mScene.updateCache();
|
||||
mPathRenderer.render(mScene, mPathTracerBuffers, mScene.mRenderSettings);
|
||||
sendBuffersToGPU();
|
||||
}
|
||||
|
|
@ -116,5 +121,20 @@ void Editor::navigationZoom(halnf factor) {
|
|||
}
|
||||
|
||||
void Editor::navigationReset() {
|
||||
mScene.mCamera.lookAtPoint({ 0, 0, 0 }, { 1, 5, 1 }, { 0, 0, 1 });
|
||||
}
|
||||
mScene.mCamera = mResetCamera;
|
||||
// mScene.mCamera.lookAtPoint({ 0, 0, 0 }, { 1, 5, 1 }, { 0, 0, 1 });
|
||||
}
|
||||
|
||||
void Editor::selectObject(const Vec2F& screenPos) {
|
||||
mScene.updateCache();
|
||||
|
||||
auto dir = (mScene.mCamera.project(screenPos) - mScene.mCamera.getPos()).normalize();
|
||||
Ray ray = Ray( dir, mScene.mCamera.getPos() );
|
||||
|
||||
auto rayCastData = mScene.castRay(ray, 1000);
|
||||
mActive = rayCastData.obj;
|
||||
}
|
||||
|
||||
Object* Editor::getActiveObject() { return mActive; }
|
||||
|
||||
Scene* Editor::getScene() { return &mScene; }
|
||||
|
|
@ -28,6 +28,10 @@ namespace tp {
|
|||
void navigationZoom(halnf factor);
|
||||
void navigationReset();
|
||||
|
||||
void selectObject(const Vec2F& screenPos);
|
||||
Object* getActiveObject();
|
||||
|
||||
Scene* getScene();
|
||||
|
||||
private:
|
||||
void sendBuffersToGPU();
|
||||
|
|
@ -36,6 +40,8 @@ namespace tp {
|
|||
private:
|
||||
Scene mScene;
|
||||
|
||||
Camera mResetCamera;
|
||||
|
||||
RenderType mRenderType = RenderType::RASTER;
|
||||
|
||||
RasterRender mRasterRenderer;
|
||||
|
|
@ -43,5 +49,7 @@ namespace tp {
|
|||
|
||||
RayTracer::OutputBuffers mPathTracerBuffers;
|
||||
uint4 mPathRenderTexture = 0;
|
||||
|
||||
Object* mActive = nullptr;
|
||||
};
|
||||
}
|
||||
|
|
@ -66,11 +66,13 @@ namespace tp {
|
|||
mNavigationOrbit.setText("Orbit");
|
||||
mNavigationZoom.setText("Zoom");
|
||||
mNavigationReset.setText("Reset");
|
||||
mNavigationSelect.setText("Select");
|
||||
|
||||
mNavigationMenu.addToMenu(&mNavigationPan);
|
||||
mNavigationMenu.addToMenu(&mNavigationOrbit);
|
||||
mNavigationMenu.addToMenu(&mNavigationZoom);
|
||||
mNavigationMenu.addToMenu(&mNavigationReset);
|
||||
mNavigationMenu.addToMenu(&mNavigationSelect);
|
||||
|
||||
mNavigationMenu.setText("Navigation");
|
||||
}
|
||||
|
|
@ -85,30 +87,39 @@ namespace tp {
|
|||
mNavigationOrbit.setAction( [this]() { mNavigationType = ORBIT; });
|
||||
mNavigationPan.setAction( [this]() { mNavigationType = PAN; });
|
||||
mNavigationZoom.setAction( [this](){ mNavigationType = ZOOM; });
|
||||
mNavigationSelect.setAction( [this](){ mNavigationType = SELECT; });
|
||||
mNavigationReset.setAction( [this]() { mEditor->navigationReset(); });
|
||||
}
|
||||
|
||||
void process(const EventHandler& events) override {
|
||||
DockWidget::process(events);
|
||||
|
||||
auto pointer = events.getPointer();
|
||||
auto pointerPrev = events.getPointerPrev();
|
||||
if (auto obj = mEditor->getActiveObject()) { // dummy rotate active object
|
||||
auto rotator = obj->mTopology.Basis.rotatorDir({1, 1, 1}, 0.1);
|
||||
obj->mTopology.Basis = rotator * obj->mTopology.Basis;
|
||||
}
|
||||
|
||||
mEditor->getScene()->updateCache();
|
||||
|
||||
const auto& activeArea = mViewport.getArea();
|
||||
|
||||
auto pointer = events.getPointer();
|
||||
auto pointerPrev = events.getPointerPrev();
|
||||
auto pointerRelative = (((pointer - activeArea.pos) / activeArea.size) - 0.5f) * 2;
|
||||
|
||||
if (activeArea.isInside(pointer) && events.isDown(InputID::MOUSE1)) {
|
||||
switch (mNavigationType) {
|
||||
case ORBIT: mEditor->navigationOrbit(events.getPointerDelta() / activeArea.size * 3); break;
|
||||
|
||||
case PAN:
|
||||
{
|
||||
auto pointerRelative = (((pointer - activeArea.pos) / activeArea.size) - 0.5f) * 2;
|
||||
auto prevPointerRelative = (((pointerPrev - activeArea.pos) / activeArea.size) - 0.5f) * 2;
|
||||
mEditor->navigationPan(prevPointerRelative, pointerRelative);
|
||||
}
|
||||
break;
|
||||
|
||||
case ZOOM: mEditor->navigationZoom(1 + (events.getPointerDelta().y / activeArea.size.y)); break;
|
||||
case SELECT: mEditor->selectObject(pointerRelative * -1); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -129,13 +140,14 @@ namespace tp {
|
|||
ButtonWidget mRenderDeNoise;
|
||||
|
||||
// Navigation
|
||||
enum NavigationType { ORBIT, PAN, ZOOM } mNavigationType = ORBIT;
|
||||
enum NavigationType { SELECT, ORBIT, PAN, ZOOM } mNavigationType = ORBIT;
|
||||
|
||||
FloatingMenu mNavigationMenu;
|
||||
ButtonWidget mNavigationPan;
|
||||
ButtonWidget mNavigationOrbit;
|
||||
ButtonWidget mNavigationZoom;
|
||||
ButtonWidget mNavigationReset;
|
||||
ButtonWidget mNavigationSelect;
|
||||
|
||||
RGBA mBaseColor;
|
||||
};
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,20 +0,0 @@
|
|||
# Blender MTL File: 'scene.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl Material
|
||||
Ns 323.999994
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.800000 0.800000 0.800000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.450000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl None
|
||||
Ns 500
|
||||
Ka 0.8 0.8 0.8
|
||||
Kd 0.8 0.8 0.8
|
||||
Ks 0.8 0.8 0.8
|
||||
d 1
|
||||
illum 2
|
||||
|
|
@ -1,112 +0,0 @@
|
|||
# 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
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
Meshes = "meshes.obj"
|
||||
|
||||
Camera = {
|
||||
pos = { 0.5, 4.5, 0.2 },
|
||||
size_x = 600,
|
||||
size_y = 800,
|
||||
}
|
||||
|
||||
Lights = {
|
||||
{
|
||||
pos = { -0.5, 3.5, 1 },
|
||||
intensity = 1
|
||||
},
|
||||
{
|
||||
pos = { 0, 0, 1 },
|
||||
intensity = 0.5
|
||||
},
|
||||
}
|
||||
|
||||
RenderSettings = {
|
||||
depth = 1,
|
||||
spray = 1,
|
||||
multisampling = 1,
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main() {
|
||||
FragColor = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1.f);
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#version 330 core
|
||||
|
||||
layout(location = 0) in vec3 Point;
|
||||
|
||||
uniform vec4 Origin;
|
||||
uniform mat4 Basis;
|
||||
uniform mat4 Camera;
|
||||
|
||||
void main() {
|
||||
vec4 transformed = (Basis * vec4(Point.xyz, 1.0)) + Origin;
|
||||
gl_Position = Camera * transformed;
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main() {
|
||||
FragColor = vec4(1, 0, 0, 1.f);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue