|
@@ -17,6 +17,8 @@
|
|
|
#include <imgui_impl_opengl3.h>
|
|
#include <imgui_impl_opengl3.h>
|
|
|
|
|
|
|
|
#include <ExternalVTKWidget.h>
|
|
#include <ExternalVTKWidget.h>
|
|
|
|
|
+#include <vtkNamedColors.h>
|
|
|
|
|
+#include <vtkProperty.h>
|
|
|
|
|
|
|
|
#include <glad/gl.h>
|
|
#include <glad/gl.h>
|
|
|
#include <GLFW/glfw3.h>
|
|
#include <GLFW/glfw3.h>
|
|
@@ -113,24 +115,28 @@ int main() {
|
|
|
// config sophiar
|
|
// config sophiar
|
|
|
using namespace sophiar;
|
|
using namespace sophiar;
|
|
|
variable_io var_io;
|
|
variable_io var_io;
|
|
|
-// auto femur_pose_id = var_io.add_variable("femur_in_tracker", VT_transform, VD_Input);
|
|
|
|
|
-// auto tibia_pose_id = var_io.add_variable("tibia_in_tracker", VT_transform, VD_Input);
|
|
|
|
|
|
|
+ auto femur_pose_id = var_io.add_variable("femur_in_tracker", VT_transform, VD_Input);
|
|
|
|
|
+ auto tibia_pose_id = var_io.add_variable("tibia_in_tracker", VT_transform, VD_Input);
|
|
|
auto left_cam_pose_id = var_io.add_variable("left_camera_in_tracker", VT_transform, VD_Input);
|
|
auto left_cam_pose_id = var_io.add_variable("left_camera_in_tracker", VT_transform, VD_Input);
|
|
|
auto right_cam_pose_id = var_io.add_variable("right_camera_in_tracker", VT_transform, VD_Input);
|
|
auto right_cam_pose_id = var_io.add_variable("right_camera_in_tracker", VT_transform, VD_Input);
|
|
|
|
|
|
|
|
// for debug; config sophiar
|
|
// for debug; config sophiar
|
|
|
- auto probe_pose_id = var_io.add_variable("probe_in_tracker", VT_transform, VD_Input);
|
|
|
|
|
|
|
+// auto probe_pose_id = var_io.add_variable("probe_in_tracker", VT_transform, VD_Input);
|
|
|
var_io.connect("127.0.0.1", 5278);
|
|
var_io.connect("127.0.0.1", 5278);
|
|
|
|
|
|
|
|
auto vtk_external = vtkSmartPointer<ExternalVTKWidget>::New();
|
|
auto vtk_external = vtkSmartPointer<ExternalVTKWidget>::New();
|
|
|
|
|
|
|
|
scene_manager scene;
|
|
scene_manager scene;
|
|
|
scene.var_io = &var_io;
|
|
scene.var_io = &var_io;
|
|
|
-// scene.add_actor("femur.stl", femur_pose_id);
|
|
|
|
|
-// scene.add_actor("tibia.stl", tibia_pose_id);
|
|
|
|
|
|
|
+ auto femur_actor = scene.add_actor("femur.stl", femur_pose_id);
|
|
|
|
|
+ auto tibia_actor = scene.add_actor("tibia.stl", tibia_pose_id);
|
|
|
|
|
+
|
|
|
|
|
+ vtkNew<vtkNamedColors> colors;
|
|
|
|
|
+ femur_actor->GetProperty()->SetColor(colors->GetColor4d("orange").GetData());
|
|
|
|
|
+ tibia_actor->GetProperty()->SetColor(colors->GetColor4d("orangered").GetData());
|
|
|
|
|
|
|
|
// for debug;
|
|
// for debug;
|
|
|
- scene.add_actor("/home/tpx/data/stls/GlassProbe_4Ball_3.STL", probe_pose_id);
|
|
|
|
|
|
|
+// scene.add_actor("/home/tpx/data/stls/GlassProbe_4Ball_3.STL", probe_pose_id);
|
|
|
|
|
|
|
|
augment_renderer left_ar, right_ar;
|
|
augment_renderer left_ar, right_ar;
|
|
|
auto left_remap_file = mapped_file{"left_proj.dat", boost::iostreams::mapped_file_base::readonly};
|
|
auto left_remap_file = mapped_file{"left_proj.dat", boost::iostreams::mapped_file_base::readonly};
|
|
@@ -147,8 +153,7 @@ int main() {
|
|
|
right_ar.initialize(&tex_renderer, &right_cam_info);
|
|
right_ar.initialize(&tex_renderer, &right_cam_info);
|
|
|
left_ar.set_background(&camera.left_rgb_image);
|
|
left_ar.set_background(&camera.left_rgb_image);
|
|
|
right_ar.set_background(&camera.right_rgb_image);
|
|
right_ar.set_background(&camera.right_rgb_image);
|
|
|
- left_ar.add_scene(&scene);
|
|
|
|
|
- right_ar.add_scene(&scene);
|
|
|
|
|
|
|
+ augment_renderer::add_scene(&scene);
|
|
|
left_remap_file.close();
|
|
left_remap_file.close();
|
|
|
right_remap_file.close();
|
|
right_remap_file.close();
|
|
|
|
|
|
|
@@ -306,7 +311,7 @@ int main() {
|
|
|
|
|
|
|
|
ImGui::BeginDisabled();
|
|
ImGui::BeginDisabled();
|
|
|
var_io.show_input_variable(left_cam_pose_id);
|
|
var_io.show_input_variable(left_cam_pose_id);
|
|
|
- var_io.show_input_variable(probe_pose_id);
|
|
|
|
|
|
|
+ var_io.show_input_variable(femur_pose_id);
|
|
|
ImGui::EndDisabled();
|
|
ImGui::EndDisabled();
|
|
|
|
|
|
|
|
ImGui::PopID();
|
|
ImGui::PopID();
|
|
@@ -342,8 +347,14 @@ int main() {
|
|
|
// draw frame for streaming
|
|
// draw frame for streaming
|
|
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, output_fbo.fbo);
|
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, output_fbo.fbo);
|
|
|
glViewport(0, 0, output_fbo.tex_width, output_fbo.tex_height);
|
|
glViewport(0, 0, output_fbo.tex_width, output_fbo.tex_height);
|
|
|
- left_ar.render({-1, -1, 1, 2});
|
|
|
|
|
- right_ar.render({0, -1, 1, 2});
|
|
|
|
|
|
|
+ left_ar.render({-0.5 - ar_width_normal / 2, -1, ar_width_normal, 2});
|
|
|
|
|
+ right_ar.render({0.5 - ar_width_normal / 2, -1, ar_width_normal, 2});
|
|
|
|
|
+
|
|
|
|
|
+ // send IDR frame occasionally to prevent broken video frame
|
|
|
|
|
+ static int last_p_count = 0;
|
|
|
|
|
+ if (last_p_count > camera_fps * 5) {
|
|
|
|
|
+ idr_flag.test_and_set();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// encode frame
|
|
// encode frame
|
|
|
output_fbo.download_pixels();
|
|
output_fbo.download_pixels();
|
|
@@ -353,6 +364,7 @@ int main() {
|
|
|
SPDLOG_INFO("IDR frame requested.");
|
|
SPDLOG_INFO("IDR frame requested.");
|
|
|
encoder.refresh();
|
|
encoder.refresh();
|
|
|
idr_flag.clear();
|
|
idr_flag.clear();
|
|
|
|
|
+ last_p_count = 0;
|
|
|
}
|
|
}
|
|
|
encoder.encode_frame(output_fbo.pbo_res, (void **) &info.data, &info.length);
|
|
encoder.encode_frame(output_fbo.pbo_res, (void **) &info.data, &info.length);
|
|
|
SPDLOG_TRACE("Time used: {}ms, length = {}", std::chrono::duration_cast<std::chrono::milliseconds>(
|
|
SPDLOG_TRACE("Time used: {}ms, length = {}", std::chrono::duration_cast<std::chrono::milliseconds>(
|