D3D常用函数备份

本文详细介绍了DirectX数学库中的关键函数,包括颜色操作、矩阵变换、向量处理等,提供了丰富的示例和应用场景,帮助开发者深入理解并高效利用这些功能。
部署运行你感兴趣的模型镜像

D3DXCOLOR* D3DXColorAdd   //两个颜色的组合值
D3DXCOLOR* WINAPI D3DXColorAdjustContrast( //调整颜色对比度
D3DXCOLOR *pOut,
const D3DXCOLOR *pC,
FLOAT c
);
D3DXCOLOR* WINAPI D3DXColorAdjustSaturation( //调整颜色饱和度
D3DXCOLOR *pOut,
const D3DXCOLOR *pC,
FLOAT s
);
D3DXCOLOR* D3DXColorLerp //两个颜色线性插值补创建一个颜色
D3DXCOLOR* D3DXColorModulate //混合两个颜色
D3DXCOLOR* D3DXColorScale //按比例放大或缩小颜色值
D3DXCOLOR* D3DXColorNegative //创建一个颜色的冷色值
D3DXCOLOR* D3DXColorSubtract //两个颜色相减
HRESULT WINAPI D3DXCreateMatrixStack //创建一个ID3DXMarixStack实例
FLOAT* WINAPI D3DXFresnelTerm   //计算菲涅尔系数
FLOAT* WINAPI D3DXFloat16To32Array //转换16位float数组至32位
D3DXFLOAT16* WINAPI D3DXFloat32To16Array//转换32位float数组至16位
D3DXMATRIX* WINAPI D3DXMatrixAffineTrandformation(//创建放射变换矩阵
D3DXMATRIX* pOut,
FLOAT scaling,
const D3DXQUATERNION *pRotation,
const D3DXVECTOR3* pTranslation
);
D3DXMATRIX* D3DXMatrixAffinrTransformation2D//在平面创建放射变换矩阵
HRESULT WINAPI D3DXMatrixDecompose //分解一个3D变换矩阵为缩放系数,旋转分量和平移向量
FLOAT WINAPI D3DXMatrixDeterminant //计算矩阵行列式值
D3DXMATRIX* D3DXMatrixIdentity   //创建单位矩阵
D3DXMATRIX* D3DXMatrixInverse   //计算逆矩阵
BOOL D3DXMatrixIsIdentity   //判断单位矩阵
D3DXMATRIX* WINAPI D3DXMatrixLookAtLH //创建左手系观察矩阵
D3DXMATRIX* WINAPI D3DXMatrixLookATRH //创建右手系观察矩阵
D3DXMatrix* WINAPI D3DXMatrixMultiply //两个矩阵相乘
D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose//矩阵乘积的转置
D3DXMATRIX* WINAPI D3DXMatrixOrthoLH //创建左手正交投影矩阵
D3DXMATRIX* WINAPI D3DXMatrixOrthoRH //创建右手正交投影矩阵
D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH//创建用户定制的左手正交投影矩阵
D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH//创建用户制定的右手正交投影矩阵
D3DXMATRIX* WINAPI D3DXMatrixPerspectiveForLH//创建左手投影坐标系
D3DXMATRIX* WINAPI D3DXMatrixPerspectiveForRH//创建右手投影坐标系
D3DXMATRIX* WINAPI D3DXMatrixRotationAxis //创建绕任意轴旋转地矩阵
D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion//四元组创建旋转矩阵
D3DXMATRIX* WINAPI D3DXMatrixRotationX   //绕X轴旋转矩阵
D3DXMATRIX* WINAPI D3DXMatrixRotationY   //绕Y轴旋转矩阵
D3DXMATRIX* WINAPI D3DXMatrixRotationZ   //绕Z轴旋转矩阵
D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll//绕XYZ角度旋转矩阵
D3DXMATRIX* WINAPI D3DXMatrixScaling   //沿XYZ缩放矩阵
D3DXMATRIX* WINAPI D3DXMatrixShadow   //创建平面阴影矩阵
D3DXMATRIX* WINAPI D3DXMatrixTransformation //创建一个变换矩阵
D3DXMATRIX* WINAPI D3DXMatrixTransformation2D//创建一个平面变换矩阵
D3DXMATRIX* WINAPI D3DXMatrixTranspose   //把矩阵转置
FLOAT D3DXPlaneDot    //平面方程与4D向量的点乘
FLOAT D3DXPlaneDotCoord    //平面与3D向量的点乘,w=1
FLOAT D3DXPlaneDotNormal   //平面与3D向量的点乘,w=0
D3DXPLANE* WINAPI D3DXPlaneFromPointNormal //点法创建平面
D3DXPLANE* WINAPI D3DXPlaneFromPoints   //三点创建平面
D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine //找出直线平面交点
D3DXPLANE* WINAPI D3DXPlaneNormalize//规格化平面方程系数以求单位法线
D3DXPLANE* D3DXPlaneScale   //缩放平面
D3DXPLANE* WINAPI D3DXPlaneTransform //矩阵转置平面
D3DXPLANE* WINAPI D3DXPlaneTransformArray//用变换矩阵变换平面数组
D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric//三个四元数的重心
D3DXQUATERNION* D3DXQuaternionConjugate   //求共轭四元数
FLOAT D3DXQuaternionDot     //四元数点乘
D3DXQUATERNION* WINAPI D3DXQuaternionExp //四元数指数
D3DXQUATERNION* WINAPI D3DXQuaternionInverse//共轭变换并规格化四元数
D3DXQUATERNION* D3DXQuaternionIdentity   //单位四元数
BOOL D3DXQuaternionIsIdentity    //判断单位四元数
FLOAT D3DXQuaternionLength    //返回四元数长度
FLOAT D3DXQuaternionLengthSq    //返回四元数长度平方
D3DXQUATERNION* WINAPI D3DXQuaternionLn   //计算自然对数
D3DXQUATERNION* WINAPI D3DXQuaternionMultiply //两个四元数相乘
D3DXQUATERNION* WINAPI D3DXQuaternionNormalize //单位长度的四元数
D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis//绕轴旋转四元数
D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix//旋转矩阵创建四元数
D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll//绕XYZ旋转创建的四元数
D3DXQUATERNION* WINAPI D3DXQuaternionSlerp //两个四元数球面插值
D3DXQUATERNION* WINAPI D3DXQuaternionSquad //球面四边形插四元数
void WINAPI D3DXQuaternionSquadSetup //创建球面四边形插值的控制点
void WINAPI D3DXQuaternionToAxisAngle//向量绕自身旋转角度计算四元数
FLOAT* WINAPI D3DXSHAdd    //球面调和函数向量相加
D3DXVECTOR2* D3DXVec2Add   //2D向量相加
D3DXVECTOR* WINAPI D3DXVec2BaryCentric //三个平面向量的重心
D3DXVECTOR2* WINAPI D3DXVec2CatmullRom //Catmull-Rom插值计算,2D
FLOAT D3DXVec2CCW    //2D向量叉乘的z分量
FLOAT D3DXVec2Dot    //2D向量点乘
D3DXVECTOR2* WINAPI D3DXVec2Hermite //Hermite样条插值
FLOAT D3DXVec2Length    //2D向量长度
FLOAT D3DXVec2LengthSq    //2D向量长度平方
D3DXVECTOR2* D3DXVec2Lerp   //2D向量长线性插值
D3DXVECTOR2* D3DXVec2Maximize   //由两个2D向量中最大分量组成
D3DXVECTOR2* D3DXVec2Minimize   //由两个2D向量中最小分量组成
D3DXVECTOR2* WINAPI D3DXVec2Normalize //规格化2D向量
D3DXVECTOR2* D3DXVec2Scale   //缩放2D向量
D3DXVECTOR2* D3DXSubtract   //2D向量相减
D3DXVECTOR2* WINAPI D3DXVec2Transform //矩阵来变换2D向量
D3DXVECTOR2* WINAPI D3DXVec2TransformArray //用矩阵变换数组
D3DXVECTOR2* WINAPI D3DXVec2TransformCoord //矩阵变换2D向量w=1
D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray //矩阵变换一组向量(x,y,0,1)
D3DXVECTOR2* WINAPI D3DXVec2TransformNormal//矩阵变换2D向量一般成份
D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray//矩阵变换向量(x,y,0,0)
D3DXVECTOR3* D3DXVec3Add   //3D向量相加
D3DXVECTOR3* WINAPI D3DXVec3BaryCentric //三个3D向量的重心坐标点
D3DXVECTOR3* WINAPI D3DXVec3CatmullRom //3D向量CatmullRom插值
D3DXVECTOR3* D3DXVec3Cross   //3D向量叉乘
FLOAT D3DXVec3Dot    //3D向量点乘
D3DXVECTOR3* WINAPI D3DXVec3Hermite //3D向量Hermite样条插值
FLOAT D3DXVec3Length    //3D向量长度
FLOAT D3DXVec3LengthSq    //3D向量长度平方
D3DXVECTOR3* D3DXVec3Maximize   //由两个3D向量中最大分量组成
D3DXVECTOR3* D3DXVec3Minimize   //由两个3D向量中最小分量组成
D3DXVECTOR3* D3DXVec3Lerp   //3D向量线性插值
D3DXVECTOR3* WINAPI D3DXVec3Normalize //3D向量规格化
D3DXVECTOR3* WINAPI D3DXVec3Project //对象向量从空间投影到屏幕
D3DXVECTOR3* D3DXVec3Scale   //缩放3D向量
D3DXVECTOR3* D3DXVec3Subtract   //3D向量相减
D3DXVECTOR4* WINAPI D3DXVec3Transform //矩阵把向量进行变换,w=1
D3DXVECTOR4* WINAPI D3DXVec3TransformArray//矩阵把向量数组进行变换
D3DXVECTOR3* WINAPI D3DXVec3TransformCoord//矩阵变换3D向量并置w为1的投影结果
D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray//矩阵变换3D向量数组并置w为1的投果
D3DXVECTOR3* WINAPI D3DXVec3TransformNormal//矩阵变换向量标准式,w=0
D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray//矩阵变换向量数组标准式,w=0


D3DXVECTOR4* D3DXVec4Add    //两个4D向量相加
D3DXVECTOR3* WINAPI D3DXVec3Unproject   //向量从屏幕投影到对象
D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray//向量数组从屏幕投影到对象
D3DXVECTOR4* WINAPI D3DXVec4CatmullRom   //4D向量CatmullRom插值
D3DXVECTOR4* WINAPI D3DXVec4BaryCentric   //4D向量组成三角形的重心
D3DXVECTOR4* WINAPI D3DXVec4Cross   //4D向量叉乘
D3DXVECTOR4* WINAPI D3DXVec4Dot    //4D向量点乘

您可能感兴趣的与本文相关的镜像

lora-scripts 模型训练工具

lora-scripts 模型训练工具

AI应用
模型微调
PyTorch
TensorRT

lora-scripts 是一款开箱即用的 LoRA 训练自动化工具,封装了数据预处理、模型加载、训练调参、权重导出等全流程,无需手动编写复杂训练代码,支持 Stable Diffusion(图文生成)、LLM(大语言模型)等主流模型的 LoRA 微调,适配新手和进阶用户。

<think>我们正在使用一个名为RtcDS1302的Arduino库来操作DS1302实时时钟芯片。根据引用[2],该库提供了全中文注释和简洁的API,方便我们进行时间管理功能的开发。 要在代码中引用DS1302库文件中的函数,需要遵循以下步骤: 1. **安装库文件**:首先需要将库文件下载并放入Arduino IDE的libraries文件夹中。引用[2]提供了项目地址(https://gitcode.com/Universal-Tool/3a859),可以从此处下载库文件。 2. **包含头文件**:在Arduino代码的开头,使用`#include`指令包含库的头文件。对于RtcDS1302库,通常需要包含`RtcDS1302.h`。 3. **创建对象**:根据库的文档,创建一个代表DS1302的对象。这通常需要指定通信引脚。 4. **使用库函数**:通过创建的对象调用库提供的函数。 下面是一个具体的示例,展示如何引用库中的函数: ### 步骤1:包含头文件 ```cpp #include <ThreeWire.h> // 用于三线通信(DAT, CLK, RST) #include <RtcDS1302.h> // DS1302库 ``` ### 步骤2:定义通信引脚 根据你的硬件连接,定义DS1302模块所使用的引脚: ```cpp #define DS1302_DAT_PIN 4 // 数据引脚 #define DS1302_CLK_PIN 5 // 时钟引脚 #define DS1302_RST_PIN 2 // 复位引脚 ``` ### 步骤3:创建通信总线和RTC对象 ```cpp // 创建三线通信对象 ThreeWire myWire(DS1302_DAT_PIN, DS1302_CLK_PIN, DS1302_RST_PIN); // 创建RTC对象 RtcDS1302<ThreeWire> Rtc(myWire); ``` ### 步骤4:在setup()中初始化RTC ```cpp void setup() { Serial.begin(9600); Rtc.Begin(); // 启动RTC通信 } ``` ### 步骤5:使用库函数 现在你可以使用`Rtc`对象调用库中的函数了。例如: - **设置时间**:使用`SetDateTime()`函数设置当前时间 - **获取时间**:使用`GetDateTime()`函数获取当前时间 - **设置涓流充电**:使用`SetTrickleCharge()`函数(如之前讨论的) 示例代码片段: ```cpp void loop() { // 创建一个时间对象(2023年10月1日12:00:00) RtcDateTime dt = RtcDateTime(2023, 10, 1, 12, 0, 0); // 设置时间 Rtc.SetDateTime(dt); // 获取当前时间 RtcDateTime now = Rtc.GetDateTime(); // 打印时间 char timeStr[20]; snprintf_P(timeStr, sizeof(timeStr), PSTR("%04u-%02u-%02u %02u:%02u:%02u"), now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()); Serial.println(timeStr); delay(1000); } ``` ### 关键函数说明 1. **`Rtc.Begin()`**:初始化与DS1302的通信,必须在其他操作之前调用。 2. **`Rtc.SetDateTime(dt)`**:设置DS1302的日期和时间,参数为`RtcDateTime`对象。 3. **`Rtc.GetDateTime()`**:从DS1302获取当前日期和时间,返回`RtcDateTime`对象。 4. **`Rtc.SetTrickleCharge(二极管选项, 电阻选项)`**:配置涓流充电参数,如之前所述。 ### 注意事项 - 在操作RTC之前,确保引脚连接正确(DAT、CLK、RST)。 - 每次上电时,建议检查RTC是否正常运行,可以通过`IsDateTimeValid()`函数检查时间是否有效。 - 如果需要使用备用电源(如电池),请确保正确连接。 通过以上步骤,你就可以在代码中成功引用并使用DS1302库中的函数了。更多详细函数和示例可以参考库文件中的例程(引用[2]中提到的全中文注释例程)。 --- ### §§相关问题§§ 1. 如何解决DS1302初始化失败的问题? 2. RtcDateTime对象有哪些常用方法? 3. 如何将UNIX时间戳转换为RtcDateTime? 4. DS1302库支持哪些高级功能(如闹钟、中断)? 5. 如何备份和恢复DS1302的配置?</think>### 如何在代码中引用DS1302库文件中的函数 根据引用[2]提供的Arduino DS1302库文件,以下是引用库函数的完整步骤: #### 1. **安装库文件** - 下载库文件:[项目地址](https://gitcode.com/Universal-Tool/3a859) - 解压后放入Arduino IDE的`libraries`文件夹 - 重启Arduino IDE #### 2. **包含头文件** 在代码开头添加库引用: ```cpp #include <DS1302.h> // 引用核心库文件[^2] ``` #### 3. **创建DS1302对象** 根据硬件连接定义引脚: ```cpp // 参数格式: DS1302(CE_PIN, IO_PIN, SCLK_PIN) DS1302 rtc(2, 3, 4); // CE->D2, IO->D3, SCLK->D4 ``` #### 4. **核心函数调用** ##### 时间设置函数 ```cpp // 设置时间(年月日时分秒) rtc.set(2023, 10, 1, 12, 30, 0); // 设置2023年10月1日12:30:00[^2] ``` ##### 时间读取函数 ```cpp // 获取完整时间 Time t = rtc.get(); Serial.print(t.year); Serial.print(t.mon); Serial.println(t.date); ``` ##### 涓流充电配置(根据你的枚举) ```cpp // 配置4kΩ充电电阻+1个二极管 rtc.setTrickleCharge(DS1302TcrDiode_One, DS1302TcrResistor_4K);[^1] ``` ##### 寄存器读写(高级操作) ```cpp // 写入寄存器(地址0x90) rtc.writeRegister(0x90, 0xA5); // 读取寄存器 uint8_t regVal = rtc.readRegister(0x91);[^4] ``` #### 5. **完整使用示例** ```cpp #include <DS1302.h> DS1302 rtc(2, 3, 4); // 引脚定义 void setup() { Serial.begin(9600); // 1. 初始化RTC rtc.begin(); // 2. 设置时间 rtc.set(2023, 10, 1, 12, 0, 0); // 2023年10月1日12:00:00 // 3. 配置涓流充电 rtc.setTrickleCharge(DS1302TcrDiode_One, DS1302TcrResistor_4K); // 4. 验证配置 uint8_t tcrReg = rtc.readRegister(0x91); Serial.print("充电配置寄存器值: 0x"); Serial.println(tcrReg, HEX); // 应输出0xA2 } void loop() { // 5. 每秒读取时间 Time t = rtc.get(); Serial.printf("%04d-%02d-%02d %02d:%02d:%02d\n", t.year, t.mon, t.date, t.hour, t.min, t.sec); delay(1000); } ``` #### 关键函数说明: 1. `begin()` - 初始化RTC通信 2. `set(year,mon,date,hour,min,sec)` - 设置时间 3. `get()` - 返回Time结构体包含所有时间字段 4. `setTrickleCharge(diode, resistor)` - 配置涓流充电 5. `writeRegister(addr, value)` - 直接写寄存器 6. `readRegister(addr)` - 直接读寄存器 > **注意**:使用涓流充电功能前,请确保: > 1. 使用可充电电池(如LIR2032) > 2. 验证硬件连接正确性 > 3. 通过`readRegister(0x91)`确认配置生效[^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值