当前位置: 首页>>代码示例>>C++>>正文


C++ SimpleCamera类代码示例

本文整理汇总了C++中SimpleCamera的典型用法代码示例。如果您正苦于以下问题:C++ SimpleCamera类的具体用法?C++ SimpleCamera怎么用?C++ SimpleCamera使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了SimpleCamera类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: TEST

/* ************************************************************************* */
TEST( SimpleCamera, level2)
{
  // Create a level camera, looking in Y-direction
  Pose2 pose2(0.4,0.3,M_PI/2.0);
  SimpleCamera camera = SimpleCamera::Level(K, pose2, 0.1);

  // expected
  Point3 x(1,0,0),y(0,0,-1),z(0,1,0);
  Rot3 wRc(x,y,z);
  Pose3 expected(wRc,Point3(0.4,0.3,0.1));
  CHECK(assert_equal( camera.pose(), expected));
}
开发者ID:DForger,项目名称:gtsam,代码行数:13,代码来源:testSimpleCamera.cpp

示例2: TEST

/* ************************************************************************* */
TEST( InvDepthFactor, optimize) {

  // landmark 5 meters infront of camera
  Point3 landmark(5, 0, 1);

  Point2 expected_uv = level_camera.project(landmark);

  InvDepthCamera3<Cal3_S2> inv_camera(level_pose, K);
  LieVector inv_landmark(5, 1., 0., 1., 0., 0.);
  LieScalar inv_depth(1./4);

  gtsam::NonlinearFactorGraph graph;
  Values initial;

  InverseDepthFactor::shared_ptr factor(new InverseDepthFactor(expected_uv, sigma,
      Symbol('x',1), Symbol('l',1), Symbol('d',1), K));
  graph.push_back(factor);
  graph.add(PoseConstraint(Symbol('x',1),level_pose));
  initial.insert(Symbol('x',1), level_pose);
  initial.insert(Symbol('l',1), inv_landmark);
  initial.insert(Symbol('d',1), inv_depth);

  LevenbergMarquardtParams lmParams;
  Values result = LevenbergMarquardtOptimizer(graph, initial, lmParams).optimize();
  EXPECT(assert_equal(initial, result, 1e-9));

  /// Add a second camera

  // add a camera 1 meter to the right
  Pose3 right_pose = level_pose * Pose3(Rot3(), Point3(2,0,0));
  SimpleCamera right_camera(right_pose, *K);

  InvDepthCamera3<Cal3_S2> right_inv_camera(right_pose, K);

  Point3 landmark1(6,0,1);
  Point2 right_uv = right_camera.project(landmark1);


  InverseDepthFactor::shared_ptr factor1(new InverseDepthFactor(right_uv, sigma,
      Symbol('x',2), Symbol('l',1),Symbol('d',1),K));
  graph.push_back(factor1);

  graph.add(PoseConstraint(Symbol('x',2),right_pose));

  initial.insert(Symbol('x',2), right_pose);

  // TODO: need to add priors to make this work with
//    Values result2 = optimize<NonlinearFactorGraph>(graph, initial,
//      NonlinearOptimizationParameters(),MULTIFRONTAL, GN);

  Values result2 = LevenbergMarquardtOptimizer(graph, initial, lmParams).optimize();
  Point3 l1_result2 = InvDepthCamera3<Cal3_S2>::invDepthTo3D(
      result2.at<LieVector>(Symbol('l',1)),
      result2.at<LieScalar>(Symbol('d',1)));

  EXPECT(assert_equal(landmark1, l1_result2, 1e-9));
}
开发者ID:gburachas,项目名称:gtsam_pcl,代码行数:58,代码来源:testInvDepthFactor3.cpp

示例3: poses_are_similar

bool RobustViconTracker::poses_are_similar(const SimpleCamera& cam1, const SimpleCamera& cam2, double distanceThreshold, double angleThreshold)
{
  // Calculate the distance between the positions of the two cameras, and the angles between their corresponding camera axes.
  double distance = (cam1.p() - cam2.p()).norm();
  double nAngle = angle_between(cam1.n(), cam2.n());
  double uAngle = angle_between(cam1.u(), cam2.u());
  double vAngle = angle_between(cam1.v(), cam2.v());

  // Check the similarity of the camera poses by comparing the aforementioned distance and angles to suitable thresholds.
  return distance < distanceThreshold && nAngle < angleThreshold && uAngle < angleThreshold && vAngle < angleThreshold;
}
开发者ID:LiutongGenius,项目名称:spaint,代码行数:11,代码来源:RobustViconTracker.cpp

示例4: Pose3

#include <boost/assign.hpp>
#include <boost/assign/std/vector.hpp>

using namespace std;
using namespace gtsam;
using namespace boost::assign;

// Some common constants
static const boost::shared_ptr<Cal3_S2> sharedCal = //
    boost::make_shared<Cal3_S2>(1500, 1200, 0, 640, 480);

// Looking along X-axis, 1 meter above ground plane (x-y)
static const Rot3 upright = Rot3::Ypr(-M_PI / 2, 0., -M_PI / 2);
static const Pose3 pose1 = Pose3(upright, gtsam::Point3(0, 0, 1));
SimpleCamera camera1(pose1, *sharedCal);

// landmark ~5 meters infront of camera
static const Point3 landmark(5, 0.5, 1.2);

// 1. Project two landmarks into two cameras and triangulate
Point2 z1 = camera1.project(landmark);

//******************************************************************************
TEST( triangulation, TriangulationFactor ) {

  Key pointKey(1);
  SharedNoiseModel model;
  typedef TriangulationFactor<SimpleCamera> Factor;
  Factor factor(camera1, z1, model, pointKey);
开发者ID:haidai,项目名称:gtsam,代码行数:29,代码来源:testTriangulationFactor.cpp

示例5: SimpleCamera

bool SceneParser::addCamera(struct basicxmlnode * cameraNode, Scene * scene){
	if (!cameraNode) {
		std::cout << "SceneParser::addCamera: empty camera node\n";
		return false;
	}

	if (std::string(cameraNode->tag) != "Camera") {
		return false;
	}

	// read resolution (mandatory attributes!)
	int resolutionX;
	int resolutionY;
	char * attributeValue;
	if (attributeValue = getattributevaluebyname(cameraNode, "resolutionX")) {
		if (!stringToNumber<int>(resolutionX, attributeValue)) {
			return false;
		}
	}
	else {
		std::cerr << "SceneParser::addCamera: no resolution provided!" << "\n";
		return false;
	}
	if (attributeValue = getattributevaluebyname(cameraNode, "resolutionY")) {
		if (!stringToNumber<int>(resolutionY, attributeValue)) {
			return false;
		}
	}
	else {
		std::cerr << "SceneParser::addCamera: no resolution provided!" << "\n";
		return false;
	}

	// instanciate camera
	SimpleCamera* camera = new SimpleCamera(resolutionX, resolutionY);
	Vector3 position;
	Vector3 direction;
	Vector3 up;
	float angle = 70;

	// read user specified values
	if (attributeValue = getattributevaluebyname(cameraNode, "position")) {
		if (!stringToVector3<double>(position, attributeValue)) {
			delete(camera);
			return false;
		}
        camera->setPosition(position);
	}

	if (attributeValue = getattributevaluebyname(cameraNode, "direction")) {
		if (!stringToVector3<double>(direction, attributeValue)) {
			delete(camera);
			return false;
		}
		else if (attributeValue = getattributevaluebyname(cameraNode, "up")) {
			if (!stringToVector3<double>(up, attributeValue)) {
				delete(camera);
				return false;
			}
			camera->setOrientation(direction, up);
		}
		else {
			std::cout << "SceneParser::addCamera: direction specified without up\n";
			delete(camera);
			return false;
		}
	}
	else if (attributeValue = getattributevaluebyname(cameraNode, "up")) {
		std::cout << "SceneParser::addCamera: up specified without direction\n";
		delete(camera);
		return false;
	}
	
	if (attributeValue = getattributevaluebyname(cameraNode, "angle")) {
		if (!stringToNumber<float>(angle, attributeValue)) {
			delete(camera);
			return false;
		}
		camera->setOpeningAngle(angle);
	}
	

	// add camera to scene
	scene->setCamera(camera);

	std::cout << "SceneParser::addCamera: added camera\n";

	return true;
}
开发者ID:fasterthanlime,项目名称:IntroGraphics-Ex2,代码行数:89,代码来源:SceneParser.cpp

示例6: calculate_pixel

bool calculate_pixel(float x, float y, task_detail_t *task, batch_blob_t *datablob, pixel_data_t *pixel)
{	
	// Clear pixel
	Pxf::Math::Vec3f fpixel(0.0f, 0.0f, 0.0f);
	fpixel.r = 0.0f;
	fpixel.g = 0.0f;
	fpixel.b = 0.0f;
	
	SimpleCamera* cam = (SimpleCamera*) datablob->cam;

	// Center ray
	Vec3f screen_coords(-1.0f + x, 1.0f - y,0.0f);
	ray_t cray;
	cray.o = Vec3f(0.0f,0.0f,1.41421356f);
	cray.o += cam->GetPos();

	Quaternion orientation = (*cam->GetOrientation());
	Normalize(orientation);

	//screen_coords = orientation * screen_coords;
	//Normalize(screen_coords);
	screen_coords += cam->GetPos();

	/*
	if (!calc_multisample_ray(&cray, datablob, &fpixel, 0.001f, 0))
	{
		Pxf::Message("calculate_pixel", "Ray shooting failed!");
		return false;
	}*/

	// find closest primitive
	for(int pixel_x = 0; pixel_x < datablob->samples_per_pixel; ++pixel_x)
	{
		for(int pixel_y = 0; pixel_y < datablob->samples_per_pixel; ++pixel_y)
		{
			// Offset ray
			ray_t ray = cray;
			Vec3f new_screen_coords = screen_coords;
			
			// TODO: Make sampling more non-uniform
			//new_screen_coords.x += (1.0f / ((float)datablob->pic_w * (float)datablob->samples_per_pixel)) * (float)pixel_x;
			//new_screen_coords.y += (1.0f / ((float)datablob->pic_h * (float)datablob->samples_per_pixel)) * (float)pixel_y;
			
			new_screen_coords.x += (0.5f / ((float)datablob->pic_w)) * (datablob->samples[rand() % 255] * 2.0f - 1.0f);
			new_screen_coords.y += (0.5f / ((float)datablob->pic_h)) * (datablob->samples[rand() % 255] * 2.0f - 1.0f);
			ray.d = new_screen_coords - cray.o;
			ray.d = orientation * ray.d;
			Normalize(ray.d);
			
			// Calc direct light
			Pxf::Math::Vec3f light_contrib;
			if (!calc_ray_contrib(&ray, datablob, &light_contrib, 0))
			{
				Pxf::Message("calculate_pixel", "Light calculations failed!");
				return false;
			}
			fpixel += light_contrib;
			
		}
	}
	
	fpixel /= datablob->samples_per_pixel * datablob->samples_per_pixel;
	
	fpixel.x = Pxf::Math::Clamp(fpixel.x, 0.0f, 1.0f);
	fpixel.y = Pxf::Math::Clamp(fpixel.y, 0.0f, 1.0f);
	fpixel.z = Pxf::Math::Clamp(fpixel.z, 0.0f, 1.0f);
		
	pixel->r = (unsigned char)(fpixel.r * 255.0f);
	pixel->g = (unsigned char)(fpixel.g * 255.0f);
	pixel->b = (unsigned char)(fpixel.b * 255.0f);	
	
	return true;
}
开发者ID:pxf,项目名称:pxf-tech2,代码行数:73,代码来源:Renderer.cpp

示例7: landmark

/* ************************************************************************* */
TEST( InvDepthFactor, Project4) {

  // landmark 4m to the left and 1m up from camera
  // inv depth landmark xyz at origion
  Point3 landmark(1, 4, 2);
  Point2 expected = level_camera.project(landmark);

  InvDepthCamera3<Cal3_S2> inv_camera(level_pose, K);
  Vector5 diag_landmark((Vector(5) << 0., 0., 0., atan(4.0/1), atan(2./sqrt(1.+16.))).finished());
  double inv_depth(1./sqrt(1.+16.+4.));
  Point2 actual = inv_camera.project(diag_landmark, inv_depth);
  EXPECT(assert_equal(expected, actual));
}
开发者ID:exoter-rover,项目名称:slam-gtsam,代码行数:14,代码来源:testInvDepthCamera3.cpp

示例8: resetCamera

	virtual void resetCamera(float camDist, float pitch, float yaw, float camPosX,float camPosY, float camPosZ)
	{
		m_camera.setCameraDistance(camDist);
		m_camera.setCameraPitch(pitch);
		m_camera.setCameraYaw(yaw);
		m_camera.setCameraTargetPosition(camPosX,camPosY,camPosZ);
		m_camera.setAspectRatio((float)m_swWidth/(float)m_swHeight);
		m_camera.update();

	}
开发者ID:GYGit,项目名称:bullet3,代码行数:10,代码来源:main_tinyrenderer_single_example.cpp

示例9: setUpAxis

	virtual void setUpAxis(int axis)
	{
		m_upAxis = axis;
		m_camera.setCameraUpAxis(axis);
		m_camera.update();
	}
开发者ID:GYGit,项目名称:bullet3,代码行数:6,代码来源:main_tinyrenderer_single_example.cpp

示例10: render

	virtual void render(const btDiscreteDynamicsWorld* rbWorld) 
	{
		//clear the color buffer
		TGAColor clearColor;
		clearColor.bgra[0] = 255;
		clearColor.bgra[1] = 255;
		clearColor.bgra[2] = 255;
		clearColor.bgra[3] = 255;
		
		clearBuffers(clearColor);
	
		
		ATTRIBUTE_ALIGNED16(btScalar modelMat[16]);
		ATTRIBUTE_ALIGNED16(float viewMat[16]);
		ATTRIBUTE_ALIGNED16(float projMat[16]);

		m_camera.getCameraProjectionMatrix(projMat);
		m_camera.getCameraViewMatrix(viewMat);
		
		btVector3 lightDirWorld(-5,200,-40);
		switch (m_upAxis)
		{
		case 1:
    			lightDirWorld = btVector3(-50.f,100,30);
    		break;
		case 2:
				lightDirWorld = btVector3(-50.f,30,100);
				break;
		default:{}
		};
		
		lightDirWorld.normalize();
		
		
		for (int i=0;i<rbWorld->getNumCollisionObjects();i++)
		{
			btCollisionObject* colObj = rbWorld->getCollisionObjectArray()[i];
			int colObjIndex = colObj->getUserIndex();
			int shapeIndex = colObj->getCollisionShape()->getUserIndex();
			if (colObjIndex>=0 && shapeIndex>=0)
			{
				
				TinyRenderObjectData* renderObj = 0;
				
				int* cptr = m_swInstances[colObjIndex];
				if (cptr)
				{
					int c = *cptr;
					TinyRenderObjectData** sptr = m_swRenderObjects[c];
					if (sptr)
					{
						renderObj = *sptr;
						//sync the object transform
						const btTransform& tr = colObj->getWorldTransform();
						tr.getOpenGLMatrix(modelMat);
				
						for (int i=0;i<4;i++)
						{
							for (int j=0;j<4;j++)
							{
								
								renderObj->m_projectionMatrix[i][j] = projMat[i+4*j];
								renderObj->m_modelMatrix[i][j] = modelMat[i+4*j];
								renderObj->m_viewMatrix[i][j] = viewMat[i+4*j];
								renderObj->m_localScaling = colObj->getCollisionShape()->getLocalScaling();
								renderObj->m_lightDirWorld = lightDirWorld;
							}
						}
						TinyRenderer::renderObject(*renderObj);
					}
				}
			}
		}
		
		
		static int counter=0;
		counter++;
		if ((counter&7)==0)
		{
			
			char filename[1024];
			sprintf(filename,"framebuf%d.tga",counter);
			m_rgbColorBuffer.flip_vertically();
			getFrameBuffer().write_tga_file(filename,true);
		}
		float color[4] = {1,1,1,1};
		
	}
开发者ID:GYGit,项目名称:bullet3,代码行数:88,代码来源:main_tinyrenderer_single_example.cpp


注:本文中的SimpleCamera类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。