龙书笔记(1)

2023-11-16

1.下载 DirectX 9.0 和 DirectX 9.0 SDK,前者的安装很简单,后者要记住安装的目录

SDK/Documentation 有chm的查阅工具
SDK/Samples/C++ 有非常多的东西可以学习
SDK/Lib/x86/ 是很多会用到的库,主要是d3d9.lib d3dx9.lib winmm.lib

SDK/Include是要包含的头文件


2.在vs2005下:
1.工具 -> 选项 -> 项目和解决方案 -> VC++目录 -> 库文件 -> 添加 ...SDK/Lib/x86
2.工具 -> 选项 -> 项目和解决方案 -> VC++目录 -> 包含文件 -> 添加 ...SDK/Include
 在vs2010下:
视图 -> 其他窗口 -> 属性管理器 -> debug | win32 -> microsoft.cpp.win32.user -> 像vs05那样添加 ...SDK/Lib/x86 和 ...SDK/Include

(好像要随便开启一个项目后才可看见debug | win32,否则里面是空的,至少我的是这样的)


3.在解决方案里面,右击项目 -> 属性 -> 链接器 -> 输入 —> 附加项 中写入d3d9.lib d3dx9.lib winmm.lib

  剩下的就是写代码 和 运行了。当然也可以使用下面的办法直接添加在文件里面:

#pragma comment( lib, "d3d9.lib" );

4.命名约定:
所有 成员变量 以 下划线 为 前缀
全局变量 和 函数名 都以 大写 字母开头
局部变量 和 方法(类里面的那种,当然也可能是结构体) 都以 小写 字母开头



第一部分:数学基础

1.向量2个重要信息: 长度 和 方向


2.几何学中,只要 长度 和 方向 相同,无论 起点 是否相同,那么这些向量就相等。(平行也相等)


3.左手左边系: x水平方向,y竖直方向,z的方向是穿进纸面。


4.标准位置: 某向量的 起始端 和 原点 重合,则该向量在标准位置


5.零向量: 所有分量都为零


6.标准基向量: (1,0,0) (0,1,0) (0,0,1)


7.单位向量: 长度为1的向量


8.在D3DX库中,D3DXVECTOR3表示3D空间中的向量

eg:

D3DXVECTOR3 u( 1.0f, 0.0f, 1.0 f);

9.代数学中,只有在维度相同且相应分量也相同的情况下,才说两个向量相同。也就是 (Ux,Uy,Uz) = (Vx,Vy,Vz)
eg: if(U == V)
return true;


10.向量的长度,就是模,也叫范数,在D3DX中的描述如下,

D3DXVECTOR3 v(1.0f, 2.0f, 3.0f);
float magnitude = D3DXVec3Length( &v );		

11.向量的规范化:就是使向量的模变为1,即变为单位向量,也就是 U=U/|U|
在D3DX中,可以使用D3DXVec3Normalize()
其原型如下: 

D3DXVECTOR3* D3DXVec3Normalize( D3DXVECTOR3* pout, CONST D3DXVECTOR3* pv1 );


12.向量加法:D3DX的描述如下:

D3DXVECTOR3 u(2.0f, 0.0f, 1.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 5.0f);
D3DXVECTOR3 sum = u + v;

13.向量减法:D3DX的描述如下:
D3DXVECTOR3 dif = u - v;

14.数乘:D3DX的描述如下:
D3DXVECTOR3 sc = u * 10.0f;

15.点积:对应项乘积再求和,首先说明一点,点积的结果是一个数而不是向量,然后点积还可以用 模乘模乘cos夹角来算。
 点积为0,则两向量垂直;点积大于0,则两向量夹角小于90;点积小于0.则夹角大于90
  在D3DX中就是这样:
float dot = D3DXVec3Dot(&u, &v);

16.叉乘:这返回的是一个向量, (a1,b1,c1)x(a2,b2,c2)=(b1*c2-c1*b2,-(a1*c2-c1*a2),a1*b2-b1*a2)

注意中间的负号,可以用左手来判断乘积结果的方向

在D3DX中pv1叉乘pv2描述为:

D3DXVECTOR3* D3DXVec3Cross( D3DXVECTOR3* pout, CONST D3DXVECTOR3* pv1, CONST D3DXVECTOR3* pv2);

17. 矩阵,m行,n列。 注意,若一个矩阵包含 单行 或 单列,则称为 行向量 或 列向量

18. 矩阵 相等: 维数相同,且对应项也一样
  矩阵 数乘:与每一个元素相乘
 矩阵 加法:维数得一样,对应项相加

19. 矩阵乘法:
若计算 矩阵A 乘 矩阵B, 则先决条件是 :"A 的列数 等于 B 的行数"
运算规则很重要,但是描述起来很麻烦(用起来很简单),所以不细说。
注意:由于矩阵乘法的特殊性质,所以 一般 矩阵的乘法不满足 交换率


20. 单位矩阵,更准确的说是 矩阵单位化: 主对角线上元素均为1(左上到右下), 其余元素均为0, 而且是一个方阵(行数列数一致)。
注意:某个矩阵和单位矩阵相乘 可以 进行 交换率(这是一个特例), 而且其结果还是原矩阵(完全可以把他理解为实数集里的"1")

21. 逆矩阵 (主要是关于 矩阵的 "除法"):
(1)方阵才有逆矩阵,但不是所有方阵都有逆矩阵。 

(2)一个n*n的矩阵的逆矩阵也是n*n。
(3)矩阵和他的逆矩阵 乘积 为 单位矩阵(这里也可以用交换率)
一个有用的法则:
(AB)的逆 = B的逆 乘 A的逆(注意顺序)

22. 矩阵的转置 : 简单的说就是,第一行变为第一列,第二行变为第二列....(矩阵的转置记为T)

23. D3DX矩阵描述:
1. 定义矩阵:

D3DXMATRIX A(...);

D3DXMATRIX B(...);
2. 矩阵相乘:

D3DXMATRIX C = A * B;

3. 查找矩阵某个位置的元素: M(0,0);//返回的是m(11),因为下标是从0开始的

4. 单位矩阵:

D3DXMATRIX M;		
D3DXMatrixIdentity( &M );

5. 转置矩阵:

D3DXMatrixTranspose( &B, &A );

6. 逆矩阵:

D3DXMatrixInverse( &B, 0, &A );

24. 基本变换: 设置的是4 * 4 的矩阵, 行向量是 1*4 的。对于第四个分量w, 
若w=1, 保证平移变换; 若w=0, 防止实施平移变换。
对于w既不为1,也不为0 的情况, 称向量 处于 齐次空间。
w=0表示的是向量; w=1表示的是点。
齐次空间映射回3D空间的办法是: 4 个元素全部除以 w(是第四个分量变为1)


25. 平移矩阵: 数学描述:
(x,y,z,1) 沿x平移px, y平移py,z平移pz,只需将此向量 乘一个矩阵: 1 0 0 0
0 1 0 0
0 0 1 0
px py pz 1
D3DX描述为:
D3DXMATRIX * D3DXMatrixTranslation( D3DXMATRIX * pout, FLOAT x, FLOAT y, FLOAT z);

26. 旋转矩阵: 
(1)沿x轴
D3DXMATRIX * D3DXMatrixRotationX( D3DXMATRIX * pout, FLOAT Angel );

(2)沿y轴
D3DXMATRIX * D3DXMatrixRotationY( D3DXMATRIX * pout, FLOAT Angel );

(3)沿z轴
D3DXMATRIX * D3DXMatrixRotationZ( D3DXMATRIX * pout, FLOAT Angel );

一个矩阵的 逆矩阵 和 转置矩阵 相等,这样的矩阵称为 正交矩阵

27.比例变换矩阵:把一个向量沿指定方向伸缩一定的倍数

D3DXMATRIX * D3DXMatrixScaling( D3DXMATRIX * pout, FLOAT sx, FLOAT sy, FLOAT sz );


28. D3DX对 点 和 向量 进行变换:
点的:
D3DXMATRIX T(...);
D3DXVECTOR3 p(...);
D3DXVec3TransformCoord( &p, &p, &T);

向量的:
D3DXMATRIX T(...);
D3DXVECTOR3 v(...);
D3DXVec3TransformNormal( &v, &v, &T);

29. 判断一个点在平面的前面还是后面

D3DXPLANE p(0.0f, 1.0f, 0.0f, 0.0f);
D3DXVECTOR3 v(3.0f, 5.0f, 2.0f);
float x = D3DXPlaneDotCoord( &p, &v );
if(x>0)	//在平面前方	
if(x<0) //在平面后方


30.  平面的创建
方式1:

D3DXPLANE *D3DXPlaneFromPointNormal(
	D3DXPLANE *pOut,
	CONST D3DXVECTOR3 *pPoint,		//平面上的点
	CONST D3DXVECTOR3 *pNormal		//法向量
);

方式2:

D3DXPLANE *D3DXPlaneFromPoints(
	D3DXPLANE *pOut,
	CONST D3DXVECTOR3 *pV1;
	CONST D3DXVECTOR3 *pV2;
	CONST D3DXVECTOR3 *pV3;			//这些是点不是向量
);


31. 平面法向量的规范化:

D3DXPLANE * D3DXPlaneNormalize( D3DXPLANE * pout, CONST D3DXPLANE * pin);

32. 平面的变换(平面要规范化,矩阵要逆转置)

D3DXMATRIX T(...);
D3DXMATRIX inverseOfT;
D3DXMATRIX inverseTransposeOfT;
				
D3DXMatrixInverse( &inverseOfT, 0, &T );
D3DXMatrixTranspose( &inverseTransposeOfT, &inverseOfT);
				
D3DXPLANE p(...);
D3DXPlaneNormalize( &p, &p );
				
D3DXPlaneTransform( &p, &p, &inverseTransposeOfT);





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

龙书笔记(1) 的相关文章

  • MATLAB设计滤波器之新版filterDesigner使用

    一 引言 本篇内容主要介绍新版Matlab的滤波器设计filterDesigner工具的使用 并以设计两个带通滤波器为使用的例子 使用的MATLAB软件版本为MATLAB R2022a 二 filterDesigner设计滤波器 1 在命令
  • C++责任链模式:Chain of Responsibility Pattern

    当你想要让一个以上的对象有机会能够处理某个请求的时候 就可以使用责任链模式 责任链模式 将请求的发送和接收解耦 让多个接收对象都有机会处理这个请求 将这些接收对象串成一条链 并沿着这条链传递这个请求 直到链上的某个接收对象能够处理它为止 通
  • Ubuntu18.04装Miniconda后终端出现base环境

    在 Ubuntu18 04LTS DELL 台式机中安装 Pytorch 由于没有 GPU 只能下载仅使用 CPU 版的 Pytorch 去 Pytorch 官网按照文档 Start Locally PyTorch 一步步下载相应的环境 P
  • tomcat8下启动 jsp报错

    The method getDispatcherType is undefined for the type HttpServletRequest java lang ClassNotFoundException org apache js
  • PLSQL中的FOR循环

    游标的FOR循环 循环体是查询的表 游标的for循环 PL SQL 语言提供了 游标 FOR 循环语句 自动执行游标的 OPEN FETCH CLOSE 语句和 循环 语句的功能 当进入循环时 游标 FOR 循环语句 自动 打开游标 并提取
  • LCD调试流程

    本来想学的更深入一些再来写这些总结 但想想 边学边写 记录成长过程也挺好的 下面自底向上 了解LCD的整个工作流程 一 LCD的组成结构和各结构的功能 1 背光板模组 提供光的来源 2 上下偏光板 TFT Glass Substrate 液
  • 【C/C++学习笔记】c++ 回调函数

    1 介绍 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 地址 作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 我们就说这是回调函数 回调函数不是由该函数的实现方直接调用 而是在特定的事件或条件发生时由另外的一方
  • Maven自动化构建工具详解

    一 Maven概述 1 使用Maven原因 我们先通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足 1 第三方Jar包添加 在今天的JavaEE开发领域 有大量的第三方框架和工具可以供我们使用 要使用这些jar包最简单的方法就是
  • win7+ubuntu20.04双系统安装,以及pointnet2_pytorch编译记录

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 win7 ubuntu20 04双系统安装 二 Ubuntu安装相关 1 Anaconda 2 Nvidia Driver 3 编译pointnet2 p
  • SSM框架-SpringMVC详解

    springmvc概述 Springmvc是spring框架的一个模块 spring和springmvc无需中间整合层整合 Springmvc是一个基于mvc的web框架 表现层的三大任务 URL到controller的映射 http请求参
  • 【MySQL】20个经典面试题,全部答对月薪10k+

    欢迎加入QQ群讨论更多内容 群号 835870546 原文链接 http bbs 51cto com thread 1470880 1 html Part2 经典题目 1 MySQL的复制原理以及流程 基本原理流程 3个线程以及之间的关联
  • IntelliJ Idea 常用快捷键列表

    IntelliJ Idea 常用快捷键列表 Alt 回车 导入包 自动修正 Ctrl N 查找类 Ctrl Shift N 查找文件 Ctrl Alt L 格式化代码 Ctrl Alt O 优化导入的类和包 Alt Insert 生成代码
  • c++/c混合编程

    一 前言 代码从编写到能执行之前 需要经过编译 链接阶段 通常 编译每一个单元文件会生成目标文件 然后链接器会把各个目标文件链接起来生成可执行性文件 链接器之所以能把目标文件相互之间链接起来 就是通过查找目标文件中的唯一函数符号 即经过编译
  • 飞行管理计算机哪个公司,波音737-700的FMC(飞行管理计算机的讲解) VLN081

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 DEP ARR 进离场页面 第一行是你的起始机场 左1 右1 XXXX ARR gt 右2 HOLD 等待点设置叶面 等待点必须在航路上设置的一个点 并已经如入到LEGS 左1 XX 点的名称
  • 初识设计模式:单例模式

    设计模式 是一种思想 解决一个问题的方法有很多种 编程实现一个解决方法也有很多种 设计模式是一种针对不同问题 设计适合该问题的代码 在保证解决问题的基础上 还要保证能有好的扩展性 再有新需求的时候可以便捷的添加新模块 而非大动干戈的改变整个
  • cocos2d Sprite混合达到水流动效果

    使用Sprite混合setBlendFunc方式达到流动效果 void MainHomeLayer updateWaterFall float dt static float offset 0 if NULL waterFall water
  • Qt获取CPU编号和硬盘序列号

    windows下执行命令除了用cmd之外 还有个东西叫WMIC 非常强大 可以通过他获取很多信息 包括硬件信息 QString frmMain getWMIC const QString cmd 获取cpu名称 wmic cpu get N
  • Pandas中DataFrame数据合并、连接(concat、merge、join)

    最近在工作中 遇到了数据合并 连接的问题 故整理如下 供需要者参考 一 concat 沿着一条轴 将多个对象堆叠到一起 concat方法相当于数据库中的全连接 union all 它不仅可以指定连接的方式 outer join或inner
  • sql注入万能密码总结

    select from admin where username and password 第一种 当你已知管理员账号名为admin时可以直接尝试 admin select from admin where username admin a
  • QT/PyQT/PySide 通过富文本形式实现关键词高亮

    因为本质上都是QT 所以我标题带了QT 这个思路是没问题的 就是用C 得换个语言 最开始想根据之前一篇博客的思路进行高亮 PyQT PySide 文本浏览器跳转到指定行 并高亮指定行 qt 指定行高亮 Toblerone Wind的博客 C

随机推荐

  • 归一化互相关匹配

    设待匹配图像I的像素大小为MxN 模板T的像素大小为mxn 从图像I中任意选取一块像素大小为mxn的子图Ix y 其左上角在图像I中的坐标为 x y 可知坐标范围为 其中 M N分别为待匹配图像像素的行数和列数 m n分别为模板像素的行数和
  • [USF-XSim-62] ‘elaborate‘ step failed with errors.[Vivado 12-4473] Detected error while running sim

    USF XSim 62 elaborate step failed with error s Please check the Tcl console output and Vivado 12 4473 Detected error whi
  • linux中shell变量$#,$@,$0,$1,$2的含义解释/Shell中的${}、##和%%使用范例/export

    linux中shell变量 0 1 2的含义解释 变量说明 Shell本身的PID ProcessID Shell最后运行的后台Process的PID 最后运行的命令的结束代码 返回值 使用Set命令设定的Flag一览 所有参数列表 如 用
  • 【开集识别论文解读】Classification-Reconstruction Learning for Open-Set Recognition——CVPR2019

    论文原文 https arxiv org pdf 1812 04246v2 pdf 本文提出的CROSR利用潜在表示进行重建 并在不损害已知类别分类精度的情况下实现鲁棒未知检测 开集分类器可以检测不属于任何训练类的样本 通常 它们将概率分布
  • 机器翻译的数据预处理

    主要分为三大块 1 数据筛选 去除那些训练集中不对齐 质量差的句对 相关的技巧有很多 去重 重复的数据会使训练过程有偏 可以简单地去除完全相同的句对 也可以计算每两个句子之间的局部哈希值 把相似度小于某个阈值的句对都去除 去空行 空行不能提
  • 微信改昵称提醒服务器调试,修改微信“官方提醒”,最近超火!

    原标题 修改微信 官方提醒 最近超火 最近有一个修改微信 官方提醒 小尾巴的聊天玩法在抖音上火了 利用微信内置一个小功能套路了不少网友 效果就如封面图所示 是不是很神奇呢 具体怎么玩 来看看下面的具体操作吧 其实这个玩法是用到微信聊天里一个
  • hdu 2043 密码

    密码 Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 22640 Accepted Submissi
  • mysql数据库字段名为关键字出现的问题

    真是奇葩年年多 今天又一个 我们都知道 无论是保留字还是关键字或者特殊端口等等 都是系统预留的自用的 但是偏偏有人喜欢用这些 所以就导致其他人在用的时候出现各种错误 今天就记录一个我遇到的 关于mysql字段名的问题 今天在用sql查询时
  • 变量的 4 种存储类型

    存储类型 总共有四种存储类型的变量 分别为自动变量 auto 静态变量 static 外部变量 extern 以及寄存器变量 register auto 函数中所有的非静态局部变量 c语言可以指定类型如auto int a c 编译器不能指
  • Android开发:Eclipse中SqliteManager插件使用

    通常开发Android的时候要使用到数据库操作 会遇到下面小问题 数据库文件在哪 怎样訪问或操作 能够通过 打开DDMS gt File Explorer看到的sqlite数据库在eclipse 然后在文件夹 data data packa
  • facebook文本生成音乐项目-audiocraft 安装教程

    文章目录 所需环境 安装ffmpeg 克隆项目仓库 安装相关依赖库 运行项目 模型下载 自动下载模型失败 pytorch相关模型缓存目录 MusicGen 模型下载地址 所需环境 ffmpeg python gt 3 9 git cuda1
  • Python 通过execjs执行js代码抛出异常IndexError或语法错误

    问题 通过execjs执行JavaScript代码 虽然JavaScript代码没有语法错误 但是python解释器抛出异常IndexError list index out of range 语法错误 抛出异常语法错误的解决步骤 1 根据
  • MFC线程退出方法

    MFC使用AfxBeginThread创建线程退出方法 CWinThread myThread 线程 bool isThreadBegin false 线程退出 执行控制 创建线程 void CDlg OnButtonCreateThrea
  • python启动一个下载服务器

    1 把Desktop目录当成根目录 cd Desktop 2 python2启动下载服务器 python2 m SimpleHttpServer 3 python3启动下载服务器 python3 m http server 4 浏览器访问h
  • 解决dubbo问题:forbid consumer

    原文地址 http www jameswxx com e4 b8 ad e9 97 b4 e4 bb b6 e8 a7 a3 e5 86 b3dubbo e9 97 ae e9 a2 98 ef bc 9aforbid consumer 线
  • 应急响应(日志/流量)

    事件分类 有害程序事件 网络攻击事件 信息破坏事件 事件内容安全事件 设备设施故障事件 灾害性事件 其它事件 应急响应工作流程 准备阶段 应急团队建设 应急方案制定 等级保护测评 检测阶段 判断安全设备告警 判断事件类型 判断事件级别 确定
  • 在SQL Server 中读取 AD 信息

    http www myexception cn sql server 1011477 html EXEC sp addlinkedserver ADSI Active Directory Services 2 5 ADSDSOObject
  • CentOS7升级OpenSSL版本

    1 CentOS7 6默认安装的openssl版本为 openssl version 2 下载最新的openssl wget https www openssl org source openssl 1 1 1c tar gz wget无法
  • Vue中mixins(混入)的介绍和使用

    Vue中mixins 混入 的介绍和使用 一 什么是Mixins 二 何时使用Mixins 三 如何创建Mixins 四 如何使用Mixins 五 Mixins的特点 5 1 方法和参数在各组件中不共享 5 2 Mixins 合并冲突 5
  • 龙书笔记(1)

    1 下载 DirectX 9 0 和 DirectX 9 0 SDK 前者的安装很简单 后者要记住安装的目录 SDK Documentation 有chm的查阅工具 SDK Samples C 有非常多的东西可以学习 SDK Lib x86