正交投影的DIRECT2D绘图基础部分
来源:互联网 发布:淘宝手工护肤品黑名单 编辑:程序博客网 时间:2024/06/02 05:49
使用正交投影的Direct2D绘图基础部分
引用:http://hi.baidu.com/shallow_sleep/blog/item/84a1c7f42f12a5d0f3d38513.html
#include <d3d9.h>#include <d3dx9.h>#pragma comment(lib,"d3d9.lib")#pragma comment(lib,"d3dx9.lib")
IDirect3D9* _d3d9; //全局变量
_d3d9=Direct3DCreate9(D3D_SDK_VERSION); D3DCAPS9 caps; _d3d9->GetDeviceCaps( D3DADAPTER_DEFAULT, //指定主显卡 D3DDEVTYPE_HAL, //指定设备内容 一般使用D3DDEVTYPE_HAL硬件加速. &caps); int vp=0; if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT) {//检测硬件是否支持变换和灯光的,如果支持,设定为用硬件(加速)处理 vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; } else { //如果不是,设定为用软件处理 vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; } //创建设备 D3DPRESENT_PARAMETERS d3dpp;d3dpp.BackBufferWidth = 800; //分辨率d3dpp.BackBufferHeight = 600;d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8; //像素格式d3dpp.BackBufferCount = 1;d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; //抗锯齿:无d3dpp.MultiSampleQuality = 0; //抗锯齿等级d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //翻转方式:D3DSWAPEFFECT_DISCARD:一般用于全屏、每帧刷新; //D3DSWAPEFFECT_FLIP:双缓冲 //D3DSWAPEFFECT_COPY:从后缓冲拷贝 //D3DSWAPEFFECT_COPY_VSYNC:从后缓冲拷贝并垂直同步,防止画面撕裂d3dpp.hDeviceWindow = hWnd; //窗口句柄d3dpp.Windowed = false; //是否全屏d3dpp.EnableAutoDepthStencil = true; //是否有深度缓存和模板缓存d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; //深度缓存和模板缓存的格式 d3dpp.Flags = 0;d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //刷新频率d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; IDirect3DDevice9* device = 0;HRESULT hr = _d3d9->CreateDevice( D3DADAPTER_DEFAULT, // 主显卡 D3DDEVTYPE_HAL, // 设备格式:硬件加速 hWnd, // 窗口句柄 vp, // 顶点处理方式,刚测试过 &d3dpp, &device);if( FAILED(hr) ){ ::MessageBoxA(0, "CreateDevice() - FAILED", 0, 0); return 0;}
3. 恢复窗口
会在调整窗口时用到,可能还会在设备丢失时用到(不确定)。
void RestoreWindow(float w, float h){ //创建视口D3DVIEWPORT9 view;view.X = 0;view.Y = 0;view.Width = w;view.Height = h;view.MinZ = 0.0f;view.MaxZ = 1.0f;// 创建视口并添加到设备if (FAILED(g_pd3dDevice->SetViewport(&view))){ MessageBoxA(0,"Failed to create a viewport",0,0);};D3DXMATRIX Ortho2D;D3DXMATRIX Identity;//2D,所以使用正交投影;3D请查D3DXMatrixPerspectiveFovLHD3DXMatrixPerspectiveFovLH(&Ortho2D,w,h,0.0f,1.0f); D3DXMatrixIdentity(&Identity);g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &Ortho2D);g_pd3dDevice->SetTransform(D3DTS_WORLD, &Identity); g_pd3dDevice->SetTransform(D3DTS_VIEW, &Identity);//关闭光照,否则不定义法线则为黑色g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE); }
4. 渲染
放在WM_PAINT消息中。
void Render(){ //清除屏幕 g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(255,0,0,0), 1.0f, 0); //BeginScene和EndScene必须成对出现,不能嵌套 g_pd3dDevice->BeginScene(); // render game scene here g_pd3dDevice->EndScene(); //在后缓冲区复制最后翻转到前台显示 g_pd3dDevice->Present(NULL, NULL, NULL, NULL); }
- 正交投影的DIRECT2D绘图基础部分
- 正交投影
- 正交投影
- Cocos2d-x基础:透视投影与正交投影
- D3D正交投影与透视投影放大mesh的方法
- 13 Three.js照相机的正交投影和透视投影
- 透视投影与正交投影
- 3D到2D的投影:正交投影与透视投影
- DX正交投影
- OpenGL: 正交投影问题
- OpenGL: 正交投影
- 【线性代数】正交投影
- 【线性代数】正交投影
- D3DXMatrixOrthoLH +正交投影矩阵
- OpenGL 正交、透视投影
- D3DXMatrixOrthoLH +正交投影矩阵
- OpenGL ES 正交投影
- Android OpenGL正交投影
- 应用dranger教程使用ffmpeg库从视频中读取图片的示例程序
- AJAX - onreadystatechange 事件
- Direct2D 中ID2D1StrokeStyle 的使用
- AJAX - 创建XMLHttpRequest 对象
- AJAX - 服务器响应
- 正交投影的DIRECT2D绘图基础部分
- 风雨十年:一个老程序员的心里话!
- AJAX - 向服务器发送请求
- Drawing in layered window with Direct2D
- AJAX ASP/PHP 请求实例
- AJAX XML 实例
- The Hardware/Software Interface Programming assignment——二进制炸弹
- Qt的窗口背景及窗口风格统一与焕肤
- 关于密码的那些事儿—浅谈密码的设计与管理