今天写了一个自己的Camera:
声明如下:
#include "vector3.h"
#ifndef __Camera_H__
#define __Camera_H__
namespace LearnOpenGL
{
class CCamera
{
public:
CCamera(void);
~CCamera(void);
//绕X轴旋转
void RotatePitch(void);
//绕Y轴旋转
void RotateYaw(void);
//绕Z轴旋转
void RotateRoll(void);
CVector3* position;
CVector3* lookAt;
CVector3* forward;
CVector3* up;
CVector3* right;
//设置当前gluLookAt参数
void SetCamera();
void SetLookAt(CVector3* objectPosition);
private:
//摄像机移动的步长
float step;
public:
// 对键盘事件进行响应:wsad
void KeyPressed(const unsigned char key);
};
}
#endif
其中SetCamera()成员函数用来指定摄像机所处位置,观察点位置和向上的向量,
定义如下:
void LearnOpenGL::CCamera::SetCamera(void)
{
gluLookAt(position->x,position->y,position->z,
lookAt->x,lookAt->y,lookAt->z,
up->x,up->y,up->z);
}
其中触及到了gluLookAt()函数的使用时机问题,以前一直没有注意,
这里着重写一下:
以前只使用gluPerspective()函数时,把定义视口(glViewport())函数和透影函数都放在了ChangeSize()函数中,现在因为要使用gluLookAt()函数,需要进行分解。把透视投影矩阵和gluLookAt()函数专门分出既可。
新的ChangeSize()函数定义如下:
void ChangeSize(int width, int height)
{
winWidth = width;
winHeight = height;
fprintf(stdout,"ChangeSize::/n/n");
glViewport(0,0,width,height);
}
在RenderScene()函数中,清空颜色和深度缓冲后,调用新增加的SetCamera()函数,使得CCamera类对象使以发挥作用。定义如下:
void SetCamera(void)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,winHeight/winHeight,1,2000);
myCamera->SetCamera();
glMatrixMode(GL_VIEWPORT);
}
按照上面的定义,就可以使在CCamera类对象的中gluLookAt()函数发挥作用了。
文章浏览阅读427次。今日内容介绍1、集合2、Iterator迭代器3、增强for循环4、泛型01集合使用的回顾*A:集合使用的回顾*a.ArrayList集合存储5个int类型元素*b.ArrayList集合存储5个Person类型元素package cn.incast.demo01;public class Person { private String name; private int..._18_集合_第1天(collection、迭代器、泛型)_讲义.doc
文章浏览阅读762次。问题:有一个字符数组的内容为:“student a am i”,请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。student a am ii ma a tnedutsi am a student解题思路: 先将创建一个数组,将输入的字符通过gets()存入数组中,然后将数组中所有的单词逆置,再将每一个遇..._gets和getchar的区别
文章浏览阅读120次。这里写目录标题1 Flink简介1.1 什么是Flink1.2 Flink特点二 Flink整体架构1 Flink简介1.1 什么是Flink1.2 Flink特点二 Flink整体架构_rak553+554 flylink
文章浏览阅读507次。日志记录器(Logger)的行为是分等级的。分为 - OFF - FATAL - WARN - INFO - DEBUG - TRACE - ALL Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。 比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志..._log4j.appender.d.threshold没有指定这个可以输出什么级别的日志
文章浏览阅读4.8k次。av_write_frame()error -22 while writing video packet解决方法问题分析解决方法项目码云(Gitee)地址:https://gitee.com/banmajio/RTSPtoRTMP项目github地址:https://github.com/banmajio/RTSPtoRTMP个人博客:banmajio’s blogjavacv使用f..._av_interleaved_write_frame() error -22 while writing interleaved video packe
文章浏览阅读1.6k次。模仿android5上的Reveal实现 大家应该都接触过安卓5吧,上面的按钮点击的时候会出现波纹的动画,那个是新出来的一个reveal,但是在低版本的系统上不支持,只能想办法自己实现了,同样也是看到了任老师的实现方法,自己分析了一会儿后,加上了点自己的见解,分享给大家,demo的源码我已经上传了. 实现的基本原理就是,自定义_@color/reveal_color
文章浏览阅读2.2k次。一 环境准备pc机 1T硬盘 16G内存 vmware workstation 15安装 centos8 操作系统;配置支持虚拟化二 安装 qemu-kvm[root@localhost ~]# yum install qemu-kvmCentOS-8 - AppStream 6.3 kB/s..._warning graphics requested but display is not set. not running virt-viewer.
文章浏览阅读687次。weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的时候,使用weka可以模拟出很好的效果,决定使用哪个模型,然后再继续后续的数据挖掘工作。下面总结一个eclipse中调用weka的Classifier分类器代码的Demo,通过这个实例,可以进一步跟..._weka.classifiers.classifier;
文章浏览阅读372次。利用JDK自带的ThreadMXBean发现程序中出现的死锁。import java.lang.management.ManagementFactory;import java.lang.management.ThreadInfo;import java.lang.management.ThreadMXBean;import java.util.concurrent.TimeUnit;public class FindDeadLock implements Runnable { i_threadmxbean getthreadinfo
文章浏览阅读3k次。今天我设置了CardView的圆角,但是有阴影,很影响美观。后来经过各种搜索,终于找到了解决办法,那就是将CardView作为根布局:<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView ="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk_cardcornerradius 圆角有阴影
文章浏览阅读1.9k次。Json::FastWriter writer的顺序在使用Json::FastWriter writer会改变josn写入时的顺序,这是因为使用jsoncpp创建文件的时候,它是按照字母表给排序过的,在排序的过程中,需要注意大小字母是不做区分的,还得安装后面字母比对做后面的排序。在使用Json::Value root;写入键值时的顺序,通过writer再写回到字符串时,顺序会发生变化:Json::FastWriter writer; //Json::StyledWriter writer;_json::fastwriter
文章浏览阅读123次。这周刚刚开学,事情还是比较多的,。我还是没课就来集训室刷题看题,感觉自己每天都有一些小进步吧,周一满课,上课完全好似一种享受,因为我能从老师的讲述中扩展出我自己的思考,不过看数论题质量不高。周二只有一节空课,去了集训室刷了一道codeforce A。。。一道题刷了整整2小时。。。补上了Atcoder的题目。周三上午看了点之前的知识,晚上打了比赛,虽然有被虐,但是我们的配合还是不错的,感觉比赛时..._中训进步周