被群里的童鞋问到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中纹理平移的一个小问题相关推荐

  1. SQL Server 中关于 @@error 的一个小误区

    原文:SQL Server 中关于 @@error 的一个小误区 在SQL Server中,我常常会看到有些前辈这样写: if(@@error<>0)ROLLBACK TRANSACTIO ...

  2. Oracle中删除数据的一个小技巧

    在我带的某个Project中,在开发阶段需要Reload相同的Data到Oracle中来进行测试,因此需要不断的删除数据,简单的Delete操作似乎就OK了,但其实不然.我们到知道建表的时候需要Tab ...

  3. python中template是什么意思啊_Python中Template使用的一个小技巧

    Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...

  4. C语言中定义整数的一个小疑问

    下面是一个关于任意整数逆序的C语言代码 #include<stdio.h> int main(){int x,digit,ret;printf("请任意输入一个整数\n" ...

  5. xlnx4.0中关于SPI-nor-flash的一个小bug

    最经搞关于zynq7000,用到了petalinux,其中用的内核版本为xlnx4.0.再处理nandflash问题是,发现如下问题,阅读关于与扩展地址操作的原代码,从纸面上看应该属于一个小bug.原 ...

  6. Struts2配置文件中传递参数的一个小问题

    http://blog.csdn.net/CMTobby/article/details/1891120 最近在Struts2中配置action时,经常要在配置文件中给一个页面或者action传递若干 ...

  7. HDRP中ShaderGraph自发光的一个小坑

    本文首发公众号洪流学堂.洪流学堂,让你快人几步.你好,我是你的技术探路者大智. 问题描述 在Unity中使用HDRP管线时,在ShaderGraph中制作自发光效果可能会遇到这么一个问题,直接将颜色连 ...

  8. 使用js删除表格中的一行的一个小练习

    代码: <!DOCTYPE html> <html lang="ch"><head><meta charset="UTF-8&q ...

  9. 关于MSSQL存储过程中使用游标的一个小例子(学习)

    声明:本例转自http://hi.chinaunix.net/?214950/viewspace-1713,主要是为了学习之用 比如有个表,内容如下 id,text 1,春花秋月何时了 2,往事知多少 ...

最新文章

  1. 牛客华为机试第8题python
  2. HOG可视化 opencv
  3. android抽屉实现不同之处
  4. 【linux】用户空间(0-3G):进程私有,内核空间(3G-4G):所有进程共享
  5. 搭建分布式hadoop2.x集群
  6. 纯虚函数--抽象类中的this到底指的是哪个子类实例呢
  7. 2021中国音乐市场年度综合分析
  8. 几个容器网络相关问题的分析和解决总结(续1)
  9. Jira迁移及内存调整
  10. accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
  11. 点击查看详情显示更多布局
  12. 清理垃圾文件属于计算机安全维护吗,垃圾文件清理,垃圾文件清理器
  13. chrome安装crx文件
  14. orb slam [RGBD-1] process has died解决
  15. Cadence OrCAD Capture按页码自动编号的方法图文教程及视频演示
  16. 常见的PS安装错误代码与解决方法
  17. 4.Tableau的数据预处理
  18. mandatory标志的作用
  19. Yii 发送电子邮件
  20. 构建统一平台消除“数据烟囱”“信息孤岛”

热门文章

  1. 室内定位---UWB测距及定位原理
  2. Halcon PDF文档(hdevelop_users_guide)学习总结之二——创建新算子
  3. 含有bin的mysql_MySQL 5.7.18 release版安装指南(含有bin文件版本)
  4. chrome vue 未响应_vue之骨架屏踩坑之路
  5. JDBC连接各种数据库的方法(经典)
  6. Sublime的Package Control安装方法
  7. 【JavaScript】离开页面前提示
  8. php json 格式化
  9. V-Play入门手册3-如何编写高效的代码?
  10. From Apprentice To Artisan 翻译 17