1、这个图是用 Excel画的 简单示意图(单元格边框,视图-->网格线)

 1.1、中间的 正立方体 处于 X/Y/Z轴的中心,边长为2

  ZC:代码中 原版是 人物在 (0,0,5)处,水平夹角180°(即 horizontalAngle为180°[弧度为π]),相当于 人物向后转了(应该是 绕向量(0,1,0)逆时针旋转的)

 1.2、代码为:E:\OpenGL_something\ogl-master\common\controls.cpp 中的 "void computeMatricesFromInputs()"

    // Direction : Spherical(球坐标系) coordinates(协调) to Cartesian(笛卡尔的) coordinates conversion(转换)
glm::vec3 direction(
cos(verticalAngle) * sin(horizontalAngle),
sin(verticalAngle),
cos(verticalAngle) * cos(horizontalAngle)
);

  (1)我的操作现象:我将Camera移动到(0,0,-5)的位置,horizontalAngle的初始值 设为0f,这样便于理解

    鼠标往右移--> horizontalAngle为 负值 且 越来越小(绝对值在变大)

    鼠标往上移--> verticalAngle为 正值 且 越来越大

  (2)效果类似于,CS等的第一人称射击游戏的效果,物体是一直不动的,小键盘↑-->人物往前走-->物体视觉效果上变大,小键盘↓-->人物往后退-->物体视觉效果上变小,小键盘← --> 人物往左移动,小键盘→ --> 人物往右移动,鼠标往哪边动 就是 人物的头往哪边看(光操作鼠标时 人物位置是不动的)

  (3)我的理解:Camera的位置就是坐在电脑前的人的位置,对应变量 position;变量 direction:可以理解成 人物面向的方向,是由 鼠标的移动操作控制的

  (4)我的测试:

   (A)将 “glm::vec3 position = glm::vec3( 0, 0, 5 ); ”改为“glm::vec3 position = glm::vec3( 0, 0, -5 ); ”   

   (B)将“float horizontalAngle = 3.14f;”改为“float horizontalAngle = 0;//3.14f;”。  这样就是 人物从(0, 0, -5)往Z轴正方向看了,不需要转180°(弧度为π),这样稍微便于理解一点

   (C)此时,鼠标往左移 --> horizontalAngle为正值,随着鼠标逐渐往左 horizontalAngle的值逐渐变大;

         鼠标往上移 --> verticalAngle为正值,随着鼠标逐渐往上 verticalAngle的值逐渐变大。

   (D)下面的图,就是从(0, 0, -5)处往Z轴正方向看,然后 鼠标往左上移动:(E:\Project_VS10\OpenGL_ConsoleTest_zz\tutorial06.xlsx)

    

    A就是 在(0, 0, -5)处的人物,目光方向是Z轴正方向,然后 操作鼠标 使人物面向左上方,看向 点G的方向。此时 以点A为中心,线段AG为半径(长度为1),形成一个球体。这里 我们只关心 X&Y&Z轴 正方向的空间区域。

    我根据 代码中,direction的生成公式,反向推断出 horizontalAngle∠EAFverticalAngle∠FAG(∵这样子的 情况 代入代码中的公式正好)。

    我的疑问:我总感觉 horizontalAngle应该是∠HAG,这样理解才对,现在想想 用线段AB的长度来 近似为∠HAG或∠EAF的弧度值 可能差不多?? 查了一下 球坐标系转笛卡尔坐标系 也没怎么看懂...数学不好要人命啊...

    我的验证过程:(cos(verticalAngle) * sin(horizontalAngle))的平方 + sin(verticalAngle)的平方 + (cos(verticalAngle) * cos(horizontalAngle))的平方 是否等于 1*1。我代入了几个值 发现等式是成立的。

    总结:以现在的水平,搞不懂为什么,记住结论吧先

2、WebGL编程指南.pdf    Pdf.P66

3、

4、

5、

OpenGL.tutorial06键盘和鼠标的更多相关文章

  1. winform中键盘和鼠标事件的捕捉和重写(转)

    在 编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时, 希望无论当前哪个控件获得焦点,当用户按上.下.左. ...

  2. C#键盘钩子 鼠标钩子

    最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...

  3. 【转】Unity3D的输入(Input)——键盘和鼠标

    http://blog.csdn.net/lingyun_blog/article/details/41451565 Unity3D使用input类控制用户的输入,输入包括了用户键盘,鼠标,触摸,重力 ...

  4. C# 判断系统空闲(键盘、鼠标不操作一段时间)

    利用windows API函数 GetLastInputInfo()来判断系统空闲 //添加引用 using System.Runtime.InteropServices; // 创建结构体用于返回捕 ...

  5. C#获取键盘和鼠标操作的时间的类

    /// /// 创建结构体用于返回捕获时间 /// [StructLayout(LayoutKind.Sequential)] struct LASTINPUTINFO { /// /// 设置结构体 ...

  6. WPF 中模拟键盘和鼠标操作

    转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...

  7. PhiloGL学习(3)——程序员的法宝—键盘、鼠标

    前言 上一篇文章中介绍了如何让对象动起来,本文介绍如何让场景响应我们的鼠标和键盘以控制场景的缩放及对象的转动和移动等. 一. 原理分析 有了上一篇文章的基础,我们已经知道了如何让场景和对象动起来.本文 ...

  8. DX11 Without DirectX SDK--05 键盘和鼠标输入

    回到 DirectX11--使用Windows SDK来进行开发 提供键鼠输入可以说是一个游戏的必备要素.在这里,我们不使用DirectInput,因为Windws SDK本身就不提供该头文件.这里我 ...

  9. DirectX11 With Windows SDK--05 键盘和鼠标输入

    前言 提供键鼠输入可以说是一个游戏的必备要素.在这里,我们不使用DirectInput,而是使用Windows的消息处理机制,不过要从头开始实现会让事情变得很复杂.DXTK提供了鼠标输入的Mouse. ...

随机推荐

  1. 增长中的时间序列存储(Scaling Time Series Data Storage) - Part I

    本文摘译自 Netflix TechBlog : Scaling Time Series Data Storage - Part I 重点:扩容.缓存.冷热分区.分块. 时序数据 - 会员观看历史 N ...

  2. OI养老专题02:约瑟夫问题求幸存者

    如题.人数为n(1<=n<=30000),共k(1<=k<=30000)组数据,所报的数m恒为2,只要求输出幸存者. 如果你还不知道什么是约瑟夫问题...——https://w ...

  3. 北京大学Cousera学习笔记--7-计算导论与C语言基础--基本数据类型&变量&常量

    1.整形数据 1.基本型(int 4B).短整型(short 2B).长整型(long 4B)  VC环境下 sizeof运算符用于计算某种类型的对象在内存中所占的字节数 ,用法:size(int) ...

  4. 一个比较难忘的BUG

    本学期开设了软件测试课程,在课上有讨论到bug,想到bug,真是很令人头疼的东西,相信每个程序都多多少少会有几个头疼的bug. 初学java时写过一个字符串判断的循环,之前学的C++字符类型用“==” ...

  5. Python模拟ICMP包

    主要使用Scapy来完成 基础环境 VM1(192.168.1.226) | | VM2(192.168.1.125) vm1封装icmp包发给vm2 vm1脚本: #! /usr/bin/env p ...

  6. 异步 async & await

    1 什么是异步 异步的另外一种含义是计算机多线程的异步处理.与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程. 2 异步场景 l  不 ...

  7. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  8. angular4 使用swiper 首次加载问题(一)

    angular 在使用外部插件swiper 还是有不少小坑的,下面来聊一聊.angular在使用swiper 的一些坑 一开始觉得使用外部引入的方式比较好,就在外部定义了.简单快捷方便, 但是在开发后 ...

  9. Hadoop HDFS, YARN ,MAPREDUCE,MAPREDUCE ON YARN

    HDFS 系统架构图 NameNode 是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等.NameNode将 ...

  10. python locust 性能测试:HttpSession

    官网解释:用于在请求之间执行Web请求和保留(会话)cookie的类(以便能够登录和退出网站):记录每个请求,以便locust可以显示统计信息: from locust import TaskSet, ...