没有合适的资源?快使用搜索试试~ 我知道了~
在DX9下D3DXIntersectTri 三维模型拾取
需积分: 10 5 下载量 11 浏览量
2017-06-21
01:33:24
上传
评论
收藏 9KB TXT 举报
温馨提示
试读
9页
在DX9下通过D3DXIntersectTri 检查.X文件中拾取射线与三角形相交结果,实现拾取功能,但计算量大,实用性不高,但可作为一种方法去拾取。
资源推荐
资源详情
资源评论
//读取.X模型文件函数
int ReadXFile(IDirect3DDevice9* pd3dDevice)
{
MaterixSet(pd3dDevice);//先调到初始矩阵,读取世界矩阵,方便将从网格取出的局部坐标转为世界坐标
char Buf[2000] = {0};//存放临时一行总元素数组,这个要足够大内存空间,否则内存太小读不完一直循环
std::string TxtA;//临时存放的文本
unsigned short VertMount = 0,i = 0,mount = 0;//顶点的数目,循环数目,顶点分割循环数目
unsigned short VertInxMount = 0;//获取顶点索引数目
char A[20] = {0};//定义一个临时数组存放临时内容
char token[100]={0};//复制一行的数组到分割数组中
char *tokenremain = token;//获得原始字符串指针,但该指针可变,适应下文分割语句
char *tok1 = NULL;//分割后存坐标数值得指针
char* BufZ = NULL;//临时存放读取的字符串比较
//取得D3D初始世界矩阵模块
D3DXMATRIX matWorld ;//获得观察矩阵,世界矩阵
pd3dDevice->GetTransform(D3DTS_WORLD,&matWorld);//获得了世界矩阵
//获取面模块
unsigned short a = 0,b = 0,c = 0;//临时获取相对应面的顶点的索引的变量,用于放进数组中
//获取.X文件内部矩阵模块
std::string JuZhen;//源字符串
float m[17]={0};//矩阵元素
std::string B;//临时存放分割的数组
Vert VertRHWTran;//矩阵转换临时存放结果,防止坐标值结果影响正在的计算
std::ifstream fn("MaTong.x",std::ios::_Nocreate);//打开文件
if (fn.fail() == 1)//检查文件是否失败
{
int ReadXFile(IDirect3DDevice9* pd3dDevice)
{
MaterixSet(pd3dDevice);//先调到初始矩阵,读取世界矩阵,方便将从网格取出的局部坐标转为世界坐标
char Buf[2000] = {0};//存放临时一行总元素数组,这个要足够大内存空间,否则内存太小读不完一直循环
std::string TxtA;//临时存放的文本
unsigned short VertMount = 0,i = 0,mount = 0;//顶点的数目,循环数目,顶点分割循环数目
unsigned short VertInxMount = 0;//获取顶点索引数目
char A[20] = {0};//定义一个临时数组存放临时内容
char token[100]={0};//复制一行的数组到分割数组中
char *tokenremain = token;//获得原始字符串指针,但该指针可变,适应下文分割语句
char *tok1 = NULL;//分割后存坐标数值得指针
char* BufZ = NULL;//临时存放读取的字符串比较
//取得D3D初始世界矩阵模块
D3DXMATRIX matWorld ;//获得观察矩阵,世界矩阵
pd3dDevice->GetTransform(D3DTS_WORLD,&matWorld);//获得了世界矩阵
//获取面模块
unsigned short a = 0,b = 0,c = 0;//临时获取相对应面的顶点的索引的变量,用于放进数组中
//获取.X文件内部矩阵模块
std::string JuZhen;//源字符串
float m[17]={0};//矩阵元素
std::string B;//临时存放分割的数组
Vert VertRHWTran;//矩阵转换临时存放结果,防止坐标值结果影响正在的计算
std::ifstream fn("MaTong.x",std::ios::_Nocreate);//打开文件
if (fn.fail() == 1)//检查文件是否失败
{
std::cerr<<"error opening the File\n"<<std::endl;
}
while(fn.eof() != 1)//文件没到尾就一直读取
{
fn.getline(Buf,sizeof(Buf));
BufZ = Buf;
//获取.X文件内部矩阵模块
if(strcmp(BufZ," FrameTransformMatrix {") == 0)//检测字符串是否相等,读矩阵
{
fn.getline(Buf,sizeof(Buf));
JuZhen = Buf;
for (i = 1;i< 16;i++)
{
mount = JuZhen.find(",",0);//首先找到分割符
B = JuZhen.substr(0,mount);//取分割符前的
m[i] = atof(B.c_str());//将字符串变为数字,
JuZhen = JuZhen.substr(mount+1);//去掉已分割的字符串
}
m[16] = atof(JuZhen.c_str());//最后将剩下的一个不能分割的字符串转变为数字,完成全部提取
}
//获取顶点坐标及索引总模块
if(strcmp(BufZ," Mesh {") == 0)//检测字符串是否相等,读顶点
{
fn.getline(Buf,sizeof(Buf));
BufZ = Buf;
VertMount = atoi(BufZ);//获取顶点数目
//获取顶点数目模块
}
while(fn.eof() != 1)//文件没到尾就一直读取
{
fn.getline(Buf,sizeof(Buf));
BufZ = Buf;
//获取.X文件内部矩阵模块
if(strcmp(BufZ," FrameTransformMatrix {") == 0)//检测字符串是否相等,读矩阵
{
fn.getline(Buf,sizeof(Buf));
JuZhen = Buf;
for (i = 1;i< 16;i++)
{
mount = JuZhen.find(",",0);//首先找到分割符
B = JuZhen.substr(0,mount);//取分割符前的
m[i] = atof(B.c_str());//将字符串变为数字,
JuZhen = JuZhen.substr(mount+1);//去掉已分割的字符串
}
m[16] = atof(JuZhen.c_str());//最后将剩下的一个不能分割的字符串转变为数字,完成全部提取
}
//获取顶点坐标及索引总模块
if(strcmp(BufZ," Mesh {") == 0)//检测字符串是否相等,读顶点
{
fn.getline(Buf,sizeof(Buf));
BufZ = Buf;
VertMount = atoi(BufZ);//获取顶点数目
//获取顶点数目模块
剩余8页未读,继续阅读
资源评论
alfive
- 粉丝: 9
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《基于51单片机和DS18B20的温度检测和报警系统,可设置报警温度上下限,输出温度采用数码管显示 》+源代码+设计资料
- ESP8266WIFI系统工作原理图.schdoc
- C语言《基于STM32的测量温度与压力的数据处理设计 》+源代码+设计资料
- ApkTool,安卓逆向工具
- prompt技术资料AI资料.zip
- 基于NeRF方法实现校园内真实拍摄场景的三维重建和web端实时渲染源码.zip
- HCIA-Data Center Facility V2.0.zip
- 物联网场景下的协同通信技术.pptx
- 大语言模型的微调和推理baichuan7B, chatglm2-6B, Qwen-7B-chat源码.zip
- 环境光谱特征数据库系统的建设.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功