Direct-X学习笔记--变换

Direct-X学习笔记--Direct-X的基本知识 一.Direct-X简介 说是Direct-X,其实最主要的还是Direct3D,绘制3D世界的利器。拥有通过HAL(硬件抽象层)直接访问硬件的能力,比GDI/GDI+的效率高得不是一点半点。 开始的时候是想学个游戏引擎的,比如特别火的unity3D,后来一想,还是懂一点底层的东西比较好。于是就选择了D3D。引擎的话应该就是写好的一种框架罢了,还是要基于D3D或者OpenGL等图形AP 阅读详情


1.顶点格式改动:

之前写的几个例子都是2D的例子,使用的顶点格式是已经经过变换的顶点格式。而要写3D程序,我们就必须要用未经过变换的顶点。所以在定义顶点时也要有所改变:

//------------绘制图形步骤1.定义灵活顶点格式
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)//坐标为经过变换的屏幕坐标,顶点的颜色

//------------绘制图形步骤2.根据上面定义的顶点格式,创建一个顶点的结构体
struct stVertex
{
	float x, y, z;		    //位置坐标
	DWORD dwColor;			//颜色
};

这里我使用了顶点缓冲区绘图,通过三个顶点绘制了一个三角形,顶点坐标如下:

<span style="white-space:pre">		</span>{-1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0)},
		{ 1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0)},
		{ 0.0f,  1.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255)}


打开的时候吓了我一跳。。。好大。。。


变换总览:

没有经过变换的3D世界,我们只能通过+z方向看。看到的东西也比较单调。要想看到一个比较真实的3D世界,就要通过各种变换了。

常用的变换一共有3种,世界变换,取景变换,投影变换。当然还有一个视口变换,不过个人感觉不需要矩阵操作,只是单纯的显示区域改变,与前面三种变换还是有点差距的。


WorldTransform(世界变换)

  世界变换事实上就是将物体顶点从模型空间转换到世界空间中,模型空间其实就是在三维设计软件(如3DSMAX)中为物体设定的坐标系,也称局部坐标系或者本地坐标系。而世界坐标则是所有物体都是用同一个世界坐标原点的坐标系,变换就是指对模型进行平移,旋转,缩放及它们的任意组合变换。

平移:
//平移
	D3DXMATRIXA16 matWorld;
	//矩阵平移操作
	D3DXMatrixTranslation(
		&matWorld,			//输出矩阵
		0.0f, 1.0f, 0.0f    //平移的距离,x,y,z
		);
	//进行平移变换
	g_pDevice->SetTransform(D3DTS_WORLD, &matWorld);

旋转:
	D3DXMATRIXA16 matWorld;
	//生成绕Y轴旋转矩阵,存储于矩阵中
	D3DXMatrixRotationY(
		&matWorld,		        //输出矩阵
		timeGetTime()/150.0f	//角度
		);
	g_pDevice->SetTransform(D3DTS_WORLD, &matWorld);

缩放:
//缩放
	D3DXMATRIXA16 matScaling;
	//矩阵缩放,存入上面的矩阵中
	D3DXMatrixScaling(
		&matScaling,	     
Direct-X学习笔记--Direct-X的初始化 一.环境配置 从网上下载到DirectX SDK,双击安装,即可得到以下文件。 打开VS2012,打开项目的通用属性,按照图中方法配置库文件以及包含目录。 这样,环境就配置好了。 二.初始化步骤总览 要想使用Direct-X这么强大的功能的图形API,自然要做一番准备工作。具体就分为这么几步: (1) 获得一个IDirect3D9接口指针。这个接口用于获得物理设备的信息 阅读详情

相关推荐

Direct-X学习笔记--三维摄像机

一.介绍 哇!到了传说中的3D摄像机啦! 之前我们写的东东,都是观察点不动,通过世界变换让东西动,今天,通过三维摄像机我们就可以改变我们的观察点,观察方向,随意在三维空间中驰骋。之前我们所设定的视角都是通过D3DXMatrixLookAtLH这个函数,通过几个设定好的向量,将视角初始化的,而在程序真正运行时,视角就不再改变了,而这次,我们要实时的生成视角变换矩阵,实时的改变我们的视角,我们所谓

puppet_master的专栏 3291

Direct-X学习笔记--骨骼动画

学了几个月DX了,终于到了骨骼动画这一步了,好激动!之前导入过一些静态的模型,还是挺帅的。不过不能动,实在是太遗憾了。今天学习了骨骼动画,终于让偶的模型动起来啦!!! 一.简介 说到动画,其实本人又想起了最早开始写小游戏的时候从网上找的那些关键帧素材,设置一个定时器,或者根据游戏循环,不断切换图片,就形成了动态的效果。不过这样实在是太麻烦了,需要美术一张一张的画图或者用PS调整。到了3D时代,

puppet_master的专栏 2537

Direct-X学习笔记--纹理映射

一.介绍 之前学习了怎样绘制物体,还画了个DX自带的茶壶,然而这个东东并不怎么好看....离我们现实的物体简直相隔千里。只能说像美术他们用来写生的模型...那么要怎么样才能让我们的东西看起来更像真实的物体呢?这个就要用到今天学习的纹理映射技术了... 纹理映射(Texture Mapping),又称纹理贴图,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。简单来说,就是把一幅图像贴到三

puppet_master的专栏 1703

C#实现DLT直接线性变换(Direct Linear Transform)算法

C#实现DLT直接线性变换(Direct Linear Transform)算法 参考资料: 1.武大版《工业测量技术与数据处理》P100-P106 2.转载博文——MATLAB实现DLT(Direct Linear Transform)算法 一、编程要求及依据 编写程序主要实现DLT算法,读取数据文件,进行计算,输出计算结果。 程序算法依据参见: 徐进军教授.《工业测量技术与数据处理...

Lynn_whu的博客 4134

C# 进程间 双内存共享 高帧率图像传输

演示了两个进程之间通过 双内存共享 的方式, 来实时处理图像,并以高帧率(40~60FPS)传输的基本示例。 进程间内存共享的优点:高性能、低延迟、资源效率高、简单可靠。 适用场景:实时图像处理、大数据传输、多进程协作、实时监控系统,等等。

qianqiansd 1996

利用图层自动识别算法实现CAD到Revit BIM模型的高效转换 - VS2022与AutoCAD2024开发环境配置指南

本文详细介绍了如何配置VS2022与AutoCAD2024开发环境,并利用图层自动识别算法实现CAD图纸到Revit BIM模型的高效自动化转换。通过解析CAD图层的规律性,该算法能智能识别并分类墙、门、窗等构件,提取几何信息并驱动Revit自动创建三维模型,从而将传统繁琐的人工“翻模”工作转化为高效、准确的自动化流程,大幅提升BIM模型创建效率。

Apple的专栏 1124

FAST-LIO2实战:从零搭建香港大学火星实验室SLAM框架(附官方数据集测试指南)

本文提供了一份详细的FAST-LIO2实战指南,帮助读者从零开始搭建香港大学火星实验室开源的这一高效激光惯性里程计框架。内容涵盖系统环境配置、依赖安装、源码编译、官方数据集测试以及参数调优,旨在让开发者快速上手并应用于机器人SLAM项目。

ppp33的博客 687

从注册到投稿:一步步教你完成KBS期刊的在线投稿流程(最新版)

本文详细介绍了如何完成KBS期刊的在线投稿流程,从账号注册到最终提交的全过程。特别针对初次使用Elsevier投稿系统的研究者,提供最新版系统的操作指南,包括投稿要求、文件格式、作者信息管理等关键步骤,帮助研究者顺利投稿至这一人工智能领域的知名期刊。

egg99的博客 1593

SAP ABAP CO核心扩展-为企业定制ZCKM3N物料价格分析增强(CKM3 CKM3N CKM8N)

这篇文章,将为大家讲述物料价格分析扩展增强(ZCKM3N)的方法和原理,并基于CKM3N的视图之一“CV成本组件”,教大家如何一步步实现批量输出多工厂物料的物料价格分析报表。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 3982

SAP 清账凭证 完整生成逻辑(超详细原理 + 底层规则 + 分录逻辑 + 互清特殊规则)

【SAP清账凭证核心逻辑摘要】(149字) SAP清账凭证生成遵循两大类型:1)资金往来对冲型(如F-32/F-44互清),强制生成含完整借贷分录的独立凭证,通过AUGDT/AUGBL字段绑定未清项,典型场景如应收冲应付(借:应付账款 贷:应收账款);2)纯核销型(如F.13自动清账),仅标记行项目状态不产生实际分录。关键规则:①仅未清项管理科目可清账;②互清必须配置主数据关联;③差额清账自动补差(折扣/汇差);④原始凭证永不修改,仅更新BSIK/BSAD等表状态。清账凭证均保留可追溯性,支持FBRA重置还

金牌架构师 542

Python爬虫实战:利用Selenium与Playwright抓取美团外卖数据

在当今大数据时代,网络数据采集已成为商业分析和市场研究的重要手段。本文以美团外卖平台为例,详细介绍如何使用Python最新爬虫技术(Selenium、Playwright)进行数据采集,并探讨相关技术原理、反爬应对策略及数据存储方案。通过5000+字的详细讲解和完整代码示例,帮助读者掌握现代网络爬虫开发的核心技能。本文详细介绍了使用Python最新爬虫技术采集美团外卖数据的完整流程,涵盖了从环境配置、页面分析到数据存储的全链路解决方案。

2201_76125261的博客 2550

Java小白入门200例81之Java接口

作者简介 作者名:编程界明世隐 简介:优快云博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞! 引言 很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢? 其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大

编程界明世隐的博客 1358

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 《C++Primer》读书笔记--命名空间
下一篇: Direct-X学习笔记--光照&材质&DX自带几何体绘制
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值