-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into chapulina/6/marker_point_color
- Loading branch information
Showing
23 changed files
with
2,719 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) | ||
project(ignition-rendering-wide-angle-camera) | ||
find_package(ignition-rendering7 REQUIRED) | ||
|
||
include_directories(SYSTEM | ||
${PROJECT_BINARY_DIR} | ||
) | ||
|
||
if (APPLE OR UNIX) | ||
find_package(GLUT REQUIRED) | ||
include_directories(SYSTEM ${GLUT_INCLUDE_DIRS}) | ||
link_directories(${GLUT_LIBRARY_DIRS}) | ||
|
||
find_package(OpenGL REQUIRED) | ||
include_directories(SYSTEM ${OpenGL_INCLUDE_DIRS}) | ||
link_directories(${OpenGL_LIBRARY_DIRS}) | ||
|
||
set(TARGET_THIRD_PARTY_DEPENDS | ||
${TARGET_THIRD_PARTY_DEPENDS} | ||
${OPENGL_LIBRARIES} | ||
${GLUT_LIBRARIES} | ||
) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") | ||
endif() | ||
|
||
if (NOT APPLE) | ||
find_package(GLEW REQUIRED) | ||
include_directories(SYSTEM ${GLEW_INCLUDE_DIRS}) | ||
link_directories(${GLEW_LIBRARY_DIRS}) | ||
|
||
set(TARGET_THIRD_PARTY_DEPENDS | ||
${TARGET_THIRD_PARTY_DEPENDS} | ||
${GLEW_LIBRARIES} | ||
) | ||
endif() | ||
|
||
if (WIN32) | ||
find_package(FreeGLUT REQUIRED) | ||
set(TARGET_THIRD_PARTY_DEPENDS ${TARGET_THIRD_PARTY_DEPENDS} FreeGLUT::freeglut) | ||
endif() | ||
|
||
add_executable(wide_angle_camera Main.cc GlutWindow.cc) | ||
|
||
target_link_libraries(wide_angle_camera | ||
${IGNITION-RENDERING_LIBRARIES} | ||
${TARGET_THIRD_PARTY_DEPENDS} | ||
) | ||
|
||
if (WIN32) | ||
set_target_properties(wide_angle_camera | ||
PROPERTIES | ||
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} | ||
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR} | ||
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR} | ||
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${PROJECT_BINARY_DIR} | ||
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${PROJECT_BINARY_DIR} | ||
) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,232 @@ | ||
/* | ||
* Copyright (C) 2021 Open Source Robotics Foundation | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
|
||
#if __APPLE__ | ||
#include <OpenGL/gl.h> | ||
#include <OpenGL/OpenGL.h> | ||
#include <GLUT/glut.h> | ||
#elif _WIN32 | ||
#define NOMINMAX | ||
#include <windows.h> | ||
#include <GL/glew.h> | ||
#include <GL/glu.h> | ||
#include <GL/glut.h> | ||
#include "Wingdi.h" | ||
#else | ||
#include <GL/glew.h> | ||
#include <GL/gl.h> | ||
#include <GL/glut.h> | ||
#endif | ||
|
||
#if !defined(__APPLE__) && !defined(_WIN32) | ||
#include <GL/glx.h> | ||
#endif | ||
|
||
#include <mutex> | ||
|
||
#include <ignition/common/Console.hh> | ||
#include <ignition/rendering/Image.hh> | ||
#include <ignition/rendering/Scene.hh> | ||
#include <ignition/rendering/WideAngleCamera.hh> | ||
|
||
#include "GlutWindow.hh" | ||
|
||
#define KEY_ESC 27 | ||
#define KEY_TAB 9 | ||
|
||
////////////////////////////////////////////////// | ||
unsigned int imgw = 0; | ||
unsigned int imgh = 0; | ||
|
||
std::vector<ir::CameraPtr> g_cameras; | ||
ir::CameraPtr g_camera; | ||
ir::CameraPtr g_currCamera; | ||
unsigned int g_cameraIndex = 0; | ||
ir::ImagePtr g_image; | ||
ignition::common::ConnectionPtr g_connection; | ||
|
||
bool g_initContext = false; | ||
|
||
#if __APPLE__ | ||
CGLContextObj g_context; | ||
CGLContextObj g_glutContext; | ||
#elif _WIN32 | ||
HGLRC g_context = 0; | ||
HDC g_display = 0; | ||
HGLRC g_glutContext = 0; | ||
HDC g_glutDisplay = 0; | ||
#else | ||
GLXContext g_context; | ||
Display *g_display; | ||
GLXDrawable g_drawable; | ||
GLXContext g_glutContext; | ||
Display *g_glutDisplay; | ||
GLXDrawable g_glutDrawable; | ||
#endif | ||
|
||
double g_offset = 0.0; | ||
|
||
////////////////////////////////////////////////// | ||
void displayCB() | ||
{ | ||
#if __APPLE__ | ||
CGLSetCurrentContext(g_context); | ||
#elif _WIN32 | ||
if (!wglMakeCurrent(g_display, g_context)) | ||
{ | ||
std::cerr << "Error callcing wglMakeCurrent" << '\n'; | ||
exit(-1); | ||
} | ||
#else | ||
if (g_display) | ||
{ | ||
glXMakeCurrent(g_display, g_drawable, g_context); | ||
} | ||
#endif | ||
|
||
g_cameras[g_cameraIndex]->Update(); | ||
|
||
#if __APPLE__ | ||
CGLSetCurrentContext(g_glutContext); | ||
#elif _WIN32 | ||
wglMakeCurrent(g_glutDisplay, g_glutContext); | ||
#else | ||
glXMakeCurrent(g_glutDisplay, g_glutDrawable, g_glutContext); | ||
#endif | ||
|
||
unsigned char *data = g_image->Data<unsigned char>(); | ||
|
||
glClearColor(0.5, 0.5, 0.5, 1); | ||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | ||
glPixelZoom(1, -1); | ||
glRasterPos2f(-1, 1); | ||
glDrawPixels(imgw, imgh, GL_RGB, GL_UNSIGNED_BYTE, data); | ||
|
||
glutSwapBuffers(); | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void idleCB() | ||
{ | ||
glutPostRedisplay(); | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void keyboardCB(unsigned char _key, int, int) | ||
{ | ||
if (_key == KEY_ESC || _key == 'q' || _key == 'Q') | ||
{ | ||
exit(0); | ||
} | ||
else if (_key == KEY_TAB) | ||
{ | ||
g_cameraIndex = (g_cameraIndex + 1) % g_cameras.size(); | ||
} | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void OnNewWideAngleFrame(const void *_data, | ||
unsigned int _width, unsigned int _height, | ||
unsigned int _channels, | ||
const std::string &/*_format*/) | ||
{ | ||
unsigned char *data = g_image->Data<unsigned char>(); | ||
memcpy(data, _data,_width * _height * _channels); | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void initCamera(ir::CameraPtr _camera) | ||
{ | ||
g_camera = _camera; | ||
imgw = g_camera->ImageWidth(); | ||
imgh = g_camera->ImageHeight(); | ||
ir::Image image = g_camera->CreateImage(); | ||
g_image = std::make_shared<ir::Image>(image); | ||
|
||
ir::WideAngleCameraPtr wideAngleCamera = | ||
std::dynamic_pointer_cast<ir::WideAngleCamera>( | ||
g_camera); | ||
|
||
// connect to new image event | ||
g_connection = wideAngleCamera->ConnectNewWideAngleFrame( | ||
std::bind(OnNewWideAngleFrame, | ||
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, | ||
std::placeholders::_4, std::placeholders::_5)); | ||
|
||
// update the camera once | ||
g_camera->Update(); | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void initContext() | ||
{ | ||
glutInitDisplayMode(GLUT_DOUBLE); | ||
glutInitWindowPosition(0, 0); | ||
glutInitWindowSize(imgw, imgh); | ||
glutCreateWindow("Wide Angle Camera"); | ||
glutDisplayFunc(displayCB); | ||
glutIdleFunc(idleCB); | ||
glutKeyboardFunc(keyboardCB); | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void printUsage() | ||
{ | ||
std::cout << "===============================" << std::endl; | ||
std::cout << " TAB - Switch render engines " << std::endl; | ||
std::cout << " ESC - Exit " << std::endl; | ||
std::cout << "===============================" << std::endl; | ||
} | ||
|
||
////////////////////////////////////////////////// | ||
void run(std::vector<ir::CameraPtr> _cameras) | ||
{ | ||
if (_cameras.empty()) | ||
{ | ||
ignerr << "No cameras found. Scene will not be rendered" << std::endl; | ||
return; | ||
} | ||
|
||
#if __APPLE__ | ||
g_context = CGLGetCurrentContext(); | ||
#elif _WIN32 | ||
g_context = wglGetCurrentContext(); | ||
g_display = wglGetCurrentDC(); | ||
#else | ||
g_context = glXGetCurrentContext(); | ||
g_display = glXGetCurrentDisplay(); | ||
g_drawable = glXGetCurrentDrawable(); | ||
#endif | ||
|
||
g_cameras = _cameras; | ||
initCamera(_cameras[0]); | ||
initContext(); | ||
printUsage(); | ||
|
||
#if __APPLE__ | ||
g_glutContext = CGLGetCurrentContext(); | ||
#elif _WIN32 | ||
g_glutContext = wglGetCurrentContext(); | ||
g_glutDisplay = wglGetCurrentDC(); | ||
#else | ||
g_glutDisplay = glXGetCurrentDisplay(); | ||
g_glutDrawable = glXGetCurrentDrawable(); | ||
g_glutContext = glXGetCurrentContext(); | ||
#endif | ||
|
||
glutMainLoop(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright (C) 2021 Open Source Robotics Foundation | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
#ifndef IGNITION_RENDERING_EXAMPLES_WIDE_ANGLE_CAMERA_GLUTWINDOW_HH_ | ||
#define IGNITION_RENDERING_EXAMPLES_WIDE_ANGLE_CAMERA_GLUTWINDOW_HH_ | ||
|
||
#include <vector> | ||
#include "ignition/rendering/RenderTypes.hh" | ||
|
||
namespace ir = ignition::rendering; | ||
|
||
/// \brief Run the demo and render the scene from the cameras | ||
/// \param[in] _cameras Cameras in the scene | ||
void run(std::vector<ir::CameraPtr> _cameras); | ||
|
||
#endif |
Oops, something went wrong.