Camera类定义和实现
类声明:
- #pragma once
- #ifndef __CAMERA_HEADER__
- #define __CAMERA_HEADER__
- #include "../utilities/geometry.h"
- class World;
- class Camera {
- public:
- Camera();
- Camera(const Camera& cam);
- ~Camera();
- void set_eye(const Point3& p);
- void set_lookat(const Point3& p);
- void set_up(const Vector3& v);
- void set_roll(const ldouble a);
- void set_exposure_time(const ldouble t);
- void compute_uvw();
- virtual Camera* clone() const = 0;
- virtual void render_scene(World& w) = 0;
- Camera& operator=(const Camera& cam);
- protected:
- Point3 eye, lookat;
- Vector3 up, u, v, w;
- ldouble exposure_time, ra;
- };
- #endif
类实现:
- #include "pch.h"
- #include "camera.h"
- Camera::Camera()
- :eye(0, 0, 1), lookat(0), ra(0), up(0, 1, 0), u(1, 0, 0), v(0, 1, 0), w(0, 0, 1), exposure_time(1) {}
- Camera::Camera(const Camera& cam)
- : eye(cam.eye), lookat(cam.lookat), ra(cam.ra), up(cam.up),
- u(cam.u), v(cam.v), w(cam.w), exposure_time(cam.exposure_time) {}
- Camera::~Camera() {}
- void Camera::set_eye(const Point3& p) {
- eye = p;
- }
- void Camera::set_lookat(const Point3& p) {
- lookat = p;
- }
- void Camera::set_up(const Vector3& v) {
- up = v;
- }
- void Camera::set_roll(const ldouble a) {
- ra = a;
- }
- void Camera::set_exposure_time(const ldouble t) {
- exposure_time = t;
- }
- void Camera::compute_uvw() {
- w = eye - lookat;
- w.normalize();
- u = up ^ w;
- u.normalize();
- v = w ^ u;
- if (eye.x == lookat.x && eye.z == lookat.z && eye.y > lookat.y) { // camera looking vertically down
- u = Vector3(0, 0, 1);
- v = Vector3(1, 0, 0);
- w = Vector3(0, 1, 0);
- }
- if (eye.x == lookat.x && eye.z == lookat.z && eye.y < lookat.y) { // camera looking vertically up
- u = Vector3(1, 0, 0);
- v = Vector3(0, 0, 1);
- w = Vector3(0, -1, 0);
- }
- }
- Camera& Camera::operator=(const Camera& cam) {
- if (this == &cam)
- return *this;
- eye = cam.eye;
- lookat = cam.lookat;
- ra = cam.ra;
- up = cam.up;
- u = cam.u;
- v = cam.v;
- w = cam.w;
- exposure_time = cam.exposure_time;
- return *this;
- }
Camera类定义和实现的更多相关文章
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 几种常用的JS类定义方法
几种常用的JS类定义方法 // 方法1 对象直接量var obj1 = { v1 : "", get_v1 : function() { return ...
- Js 类定义的几种方式
提起面向对象我们就能想到类,对象,封装,继承,多态.在<javaScript高级程序设计>(人民邮电出版社,曹力.张欣译.英文名字是:Professional JavaScript for ...
- android.hardware.Camera类及其标准接口介绍
android.hardware.Camera类及其标准接口介绍,API level 19 http://developer.android.com/reference/android/hardwar ...
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题. 类声明: class Screen: //Screen类的声明 1 类定义: class Screen{ //Scree ...
- C++学了这么多年,你也许不知道为什么类定义要放在.h文件,类实现放在cpp文件。它们如何关联?
原文 http://blog.csdn.net/ithzhang/article/details/8119286 主题 C++ C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类 ...
- YTU 2602: 熟悉题型——类设计( 矩形类定义【C++】)
2602: 熟悉题型--类设计( 矩形类定义[C++]) 时间限制: 1 Sec 内存限制: 128 MB 提交: 183 解决: 119 题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标 ...
- Camera类
Camera类 使用 Camera 类可从连接到运行 Flash Player 的计算机的摄像头中 捕获视频. 使用 Video 类可在本地监视视频. 使用 NetConnection 和 NetS ...
- Objective-c 类接口 (@interface) (类定义)
在Objective-c中如何定义一个类呢?我们可以使用下面的格式进行表示: @interface 类名:父类名{ 变量定义; } 方法定义: @end; 下面给出一个实例: @interface P ...
随机推荐
- 好客租房10-jsx的基本使用
1.1createElement()的问题 1繁琐不简洁 2不直观 无法一眼看出所描述的结构 3不优雅 用户体验不爽 React.createElement("div", ...
- unity---公共模块MonoController
公共模块 如果有很多类使用Update()函数,会导致性能浪费 如果函数统一在一个Update()中执行 代码 上述,需要将脚本挂载到物体上, 故新建了一个管理类MonoMgr Mgr另外的作用 可以 ...
- 记 iTextSharp 剪裁 PDF 指定区域的方法
原文 引用 itextsharp 5.5.13.2 itextsharp.xtra 5.5.13.2 方法 /// <summary> /// 截取pdf文件,例如把A4截出指定的A6区域 ...
- CentOS 7.9 安装 zookeeper-3.7.0
1. 下载 Zookeeper Zookeeper 官网 使用 wget 下载: wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper ...
- MongoDB 分片规则
每日一句 生命本身毫无意义,只有死亡才能让你邃晓人性的真谛! 每日一句 Ideal is the beacon. Without ideal, there is no secure direction ...
- 目标检测复习之Faster RCNN系列
目标检测之faster rcnn系列 paper blogs1: 一文读懂Faster RCNN Faster RCNN理论合集 code: mmdetection Faster rcnn总结: 网络 ...
- 【HEOI2014】大工程<虚树>
虚树 我们每天都用心思索着,这究竟是为了什么呢?我想我也不知道,只是觉得如果人不思考问题就很无聊. 我觉得虚树不是什么数据结构,就是一种技巧或者工具.它能把树中\(k\)个关键点以\(O(klogk) ...
- JAVA - 线程从创建到死亡的几种状态都有哪些?
JAVA - 线程从创建到死亡的几种状态都有哪些? 新建( new ):新创建了一个线程对象. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 sta ...
- CentOS 8.0与CentOS7.0 防火墙端口设置
一,开放端口号 firewall-cmd --zone=public --add-port=8080/tcp --permanent #开启8080端口 firewall-cmd --zone=pu ...
- 02 RESTFul接口和HTTP的幂等性分析
RESTFul接口和HTTP的幂等性分析 REST全称是Representational State Transfer,中文为表述性状态转移,REST指的是一组架构约束条件和原则 RESTful表述的 ...