关于DX中纹理平移的一个小问题
被群里的童鞋问到DX纹理平移的问题,开始实在没心思写,以为太简单了,最后他问了一天,出于好心答应帮他看下,结果看的时候花了我将近2个小时找出原因。贴个代码,以供以后参考!
#include "d3dUtility.h"
#include <vector>
#include "D3dx9math.h"
#include <d3d9.h>#pragma comment(lib, "d3d9.lib ")
#pragma comment(lib, "winmm.lib ")
#pragma comment(lib, "d3dx9.lib ")
#pragma comment(lib, "msvcrtd.lib ")//
// Globals
//IDirect3DDevice9* Device = 0; const int Width = 640;
const int Height = 480;ID3DXMesh* Teapot = 0;
D3DMATERIAL9 TeapotMtrl;IDirect3DVertexBuffer9* BkGndQuad = 0;
IDirect3DTexture9* CrateTex = 0;
IDirect3DTexture9* StrideTex=0;
D3DMATERIAL9 BkGndMtrl;//
// Classes and Structures
//
struct Vertex
{Vertex(){}Vertex(float x, float y, float z,float nx, float ny, float nz,float u, float v){_x = x; _y = y; _z = z;_nx = nx; _ny = ny; _nz = nz;_u = u; _v = v;}float _x, _y, _z;float _nx, _ny, _nz;float _u, _v; // texture coordinatesstatic const DWORD FVF;
};
const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;//
// Framework Functions
//
bool Setup()
{// // Init Materials//TeapotMtrl = d3d::RED_MTRL;TeapotMtrl.Diffuse.a = 0.5f; // set alpha to 50% opacityBkGndMtrl = d3d::GREEN_MTRL;//// Create the teapot.//D3DXCreateTeapot(Device, &Teapot, 0);//// Create the background quad.//Device->CreateVertexBuffer(6 * sizeof(Vertex), D3DUSAGE_WRITEONLY,Vertex::FVF,D3DPOOL_MANAGED,&BkGndQuad,0);Vertex* v;BkGndQuad->Lock(0, 0, (void**)&v, 0);v[0] = Vertex(-1.0f, -1.0f, 0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);v[1] = Vertex(-1.0f, 1.0f, 0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);v[2] = Vertex( 1.0f, 1.0f, 0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);v[3] = Vertex(-1.0f, -1.0f, 0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);v[4] = Vertex( 1.0f, 1.0f, 0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);v[5] = Vertex( 1.0f, -1.0f, 0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f);BkGndQuad->Unlock();Device->SetRenderState(D3DRS_LIGHTING ,false);Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);Device->SetRenderState(D3DRS_SPECULARENABLE, true);Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);Device->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP );Device->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP );D3DXCreateTextureFromFile(Device,"crate.jpg",&CrateTex);D3DXVECTOR3 pos(0.0f, 0.0f, -3.0f);D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);D3DXMATRIX V;D3DXMatrixLookAtLH(&V, &pos, &target, &up);Device->SetTransform(D3DTS_VIEW, &V);//// Set projection matrix.//D3DXMATRIX proj;D3DXMatrixPerspectiveFovLH(&proj,D3DX_PI * 0.5f, // 90 - degree(float)Width / (float)Height,1.0f,1000.0f);Device->SetTransform(D3DTS_PROJECTION, &proj);return true;
}void Cleanup()
{d3d::Release<IDirect3DVertexBuffer9*>(BkGndQuad);d3d::Release<ID3DXMesh*>(Teapot);d3d::Release<IDirect3DTexture9*>(CrateTex);
}bool Display(float timeDelta)
{if( Device ){D3DXMATRIX mat_texture;Device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);D3DXMatrixIdentity(&mat_texture);mat_texture._31 = 0.5;//这样写平移,因为二维的坐标(x,y)在变换时算成(x,y,1,0)与纹理变换矩阵相乘的//D3DXMatrixTranslation(&mat_texture, 0.5, 0, 0);//这样写不能平移HRESULT hr = Device->SetTransform(D3DTS_TEXTURE0, &mat_texture);Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);Device->BeginScene();Device->SetFVF(Vertex::FVF);Device->SetStreamSource(0, BkGndQuad, 0, sizeof(Vertex));Device->SetTexture(0, CrateTex);Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);Device->EndScene();Device->Present(0, 0, 0, 0);}return true;
}//
// WndProc
//
LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{switch( msg ){case WM_DESTROY:::PostQuitMessage(0);break;case WM_KEYDOWN:if( wParam == VK_ESCAPE )::DestroyWindow(hwnd);break;}return ::DefWindowProc(hwnd, msg, wParam, lParam);
}//
// WinMain
//
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE prevInstance, PSTR cmdLine,int showCmd)
{if(!d3d::InitD3D(hinstance,Width, Height, true, D3DDEVTYPE_HAL, &Device)){::MessageBox(0, "InitD3D() - FAILED", 0, 0);return 0;}if(!Setup()){::MessageBox(0, "Setup() - FAILED", 0, 0);return 0;}d3d::EnterMsgLoop( Display );Cleanup();Device->Release();return 0;
}
关于DX中纹理平移的一个小问题相关推荐
- SQL Server 中关于 @@error 的一个小误区
原文:SQL Server 中关于 @@error 的一个小误区 在SQL Server中,我常常会看到有些前辈这样写: if(@@error<>0)ROLLBACK TRANSACTIO ...
- Oracle中删除数据的一个小技巧
在我带的某个Project中,在开发阶段需要Reload相同的Data到Oracle中来进行测试,因此需要不断的删除数据,简单的Delete操作似乎就OK了,但其实不然.我们到知道建表的时候需要Tab ...
- python中template是什么意思啊_Python中Template使用的一个小技巧
Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...
- C语言中定义整数的一个小疑问
下面是一个关于任意整数逆序的C语言代码 #include<stdio.h> int main(){int x,digit,ret;printf("请任意输入一个整数\n" ...
- xlnx4.0中关于SPI-nor-flash的一个小bug
最经搞关于zynq7000,用到了petalinux,其中用的内核版本为xlnx4.0.再处理nandflash问题是,发现如下问题,阅读关于与扩展地址操作的原代码,从纸面上看应该属于一个小bug.原 ...
- Struts2配置文件中传递参数的一个小问题
http://blog.csdn.net/CMTobby/article/details/1891120 最近在Struts2中配置action时,经常要在配置文件中给一个页面或者action传递若干 ...
- HDRP中ShaderGraph自发光的一个小坑
本文首发公众号洪流学堂.洪流学堂,让你快人几步.你好,我是你的技术探路者大智. 问题描述 在Unity中使用HDRP管线时,在ShaderGraph中制作自发光效果可能会遇到这么一个问题,直接将颜色连 ...
- 使用js删除表格中的一行的一个小练习
代码: <!DOCTYPE html> <html lang="ch"><head><meta charset="UTF-8&q ...
- 关于MSSQL存储过程中使用游标的一个小例子(学习)
声明:本例转自http://hi.chinaunix.net/?214950/viewspace-1713,主要是为了学习之用 比如有个表,内容如下 id,text 1,春花秋月何时了 2,往事知多少 ...
最新文章
- 牛客华为机试第8题python
- HOG可视化 opencv
- android抽屉实现不同之处
- 【linux】用户空间(0-3G):进程私有,内核空间(3G-4G):所有进程共享
- 搭建分布式hadoop2.x集群
- 纯虚函数--抽象类中的this到底指的是哪个子类实例呢
- 2021中国音乐市场年度综合分析
- 几个容器网络相关问题的分析和解决总结(续1)
- Jira迁移及内存调整
- accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
- 点击查看详情显示更多布局
- 清理垃圾文件属于计算机安全维护吗,垃圾文件清理,垃圾文件清理器
- chrome安装crx文件
- orb slam [RGBD-1] process has died解决
- Cadence OrCAD Capture按页码自动编号的方法图文教程及视频演示
- 常见的PS安装错误代码与解决方法
- 4.Tableau的数据预处理
- mandatory标志的作用
- Yii 发送电子邮件
- 构建统一平台消除“数据烟囱”“信息孤岛”
热门文章
- 室内定位---UWB测距及定位原理
- Halcon PDF文档(hdevelop_users_guide)学习总结之二——创建新算子
- 含有bin的mysql_MySQL 5.7.18 release版安装指南(含有bin文件版本)
- chrome vue 未响应_vue之骨架屏踩坑之路
- JDBC连接各种数据库的方法(经典)
- Sublime的Package Control安装方法
- 【JavaScript】离开页面前提示
- php json 格式化
- V-Play入门手册3-如何编写高效的代码?
- From Apprentice To Artisan 翻译 17