学习D3D必备的基础知识:
1. C/C++;
2. Win32 API基础;
3. COM( 组件对象模型)的使用;
4. 数学基础(矩阵、向量、四元数等);
5. 计算机图形学基础(三维变换,渲染,灯光等)。

一个D3D程序的基本结构:


一个基本的D3D程序,渲染显示一个空白窗口,代码如下:

[cpp]  view plain  copy
  1. //=============================================================================
  2. // Desc: 最简单的Direct3D程序,
  3. //=============================================================================
  4. #include <d3d9.h>
  5. //-----------------------------------------------------------------------------
  6. // 全局变量
  7. //-----------------------------------------------------------------------------
  8. LPDIRECT3D9             g_pD3D       = NULL; //Direct3D对象
  9. LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; //Direct3D设备对象
  10. //-----------------------------------------------------------------------------
  11. // Desc: 初始化Direct3D
  12. //-----------------------------------------------------------------------------
  13. HRESULT InitD3D( HWND hWnd )
  14. {
  15. //创建Direct3D对象, 该对象用来创建Direct3D设备对象
  16. if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
  17. return E_FAIL;
  18. //设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象
  19. D3DPRESENT_PARAMETERS d3dpp;
  20. ZeroMemory( &d3dpp, sizeof(d3dpp) );
  21. d3dpp.Windowed = TRUE;
  22. d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  23. d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
  24. //创建Direct3D设备对象
  25. if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
  26. D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  27. &d3dpp, &g_pd3dDevice ) ) )
  28. {
  29. return E_FAIL;
  30. }
  31. return S_OK;
  32. }
  33. //-----------------------------------------------------------------------------
  34. // Desc: 释放创建对象
  35. //-----------------------------------------------------------------------------
  36. VOID Cleanup()
  37. {
  38. //释放Direct3D设备对象
  39. if( g_pd3dDevice != NULL)
  40. g_pd3dDevice->Release();
  41. //释放Direct3D对象
  42. if( g_pD3D != NULL)
  43. g_pD3D->Release();
  44. }
  45. //-----------------------------------------------------------------------------
  46. // Desc: 渲染图形
  47. //-----------------------------------------------------------------------------
  48. VOID Render()
  49. {
  50. //清空后台缓冲区
  51. g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
  52. //开始在后台缓冲区绘制图形
  53. if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
  54. {
  55. //在此在后台缓冲区绘制图形
  56. //结束在后台缓冲区渲染图形
  57. g_pd3dDevice->EndScene();
  58. }
  59. //将在后台缓冲区绘制的图形提交到前台缓冲区显示
  60. g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
  61. }
  62. //-----------------------------------------------------------------------------
  63. // Desc: 消息处理
  64. //-----------------------------------------------------------------------------
  65. LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
  66. {
  67. switch( msg )
  68. {
  69. case WM_DESTROY:
  70. Cleanup();
  71. PostQuitMessage( 0 );
  72. return 0;
  73. case WM_PAINT:
  74. Render();
  75. ValidateRect( hWnd, NULL );
  76. return 0;
  77. }
  78. return DefWindowProc( hWnd, msg, wParam, lParam );
  79. }
  80. //-----------------------------------------------------------------------------
  81. // Desc: 程序入口
  82. //-----------------------------------------------------------------------------
  83. INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
  84. {
  85. //注册窗口类
  86. WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
  87. GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
  88. L"ClassName", NULL };
  89. RegisterClassEx( &wc );
  90. //创建窗口
  91. HWND hWnd = CreateWindow( L"ClassName", L"最简单的Direct3D程序",
  92. WS_OVERLAPPEDWINDOW, 200, 100, 600, 500,
  93. NULL, NULL, wc.hInstance, NULL );
  94. //初始化Direct3D
  95. if( SUCCEEDED( InitD3D( hWnd ) ) )
  96. {
  97. //显示主窗口
  98. ShowWindow( hWnd, SW_SHOWDEFAULT );
  99. UpdateWindow( hWnd );
  100. //进入消息循环
  101. MSG msg;
  102. ZeroMemory( &msg, sizeof(msg) );
  103. while( msg.message!=WM_QUIT )
  104. {
  105. if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
  106. {
  107. TranslateMessage( &msg );
  108. DispatchMessage( &msg );
  109. }
  110. else
  111. {
  112. Render();  //渲染图形
  113. }
  114. }
  115. }
  116. UnregisterClass( L"ClassName", wc.hInstance );
  117. return 0;
  118. }

运行结果:

D3D视频渲染入门程序.相关推荐

  1. SDL2音视频渲染入门

    SDL, "Simple DirectMedia Layer",它是一套开放源代码的跨平台多媒体开发库,使用C语言写成.其主要用于游戏开发中的多媒体处理,如视频渲染,音频播放,鼠标 ...

  2. 海康大华网络摄像头高起播低延时RTSP网页无插件流媒体专用播放器EasyPlayer-RTSP之GDI和D3D两种视频渲染方式的区别介绍

    GDI和D3D两种视频渲染方式的区别 EasyPlayer-RTSP windows播放器支持D3D和GDI两种渲染方式. D3D支持格式如下: DISPLAY_FORMAT_YV12 DISPLAY ...

  3. NVIDIA DeepStream 5.0构建智能视频分析应用程序

    NVIDIA DeepStream 5.0构建智能视频分析应用程序 无论是要平衡产品分配和优化流量的仓库,工厂流水线检查还是医院管理,要确保员工和护理人员在照顾病人的同时使用个人保护设备(PPE),就 ...

  4. windows平台视频渲染技术小结

    一.概述 在Windows平台下的视频播放技术主要有以下三种:GDI,Direct3D和OpenGL:也经常看到DirectDraw这个技术,根据维基介绍,DirectDraw是微软弃用的一个API, ...

  5. Android音视频开发入门指南

    <Android 音视频从入门到提高 -- 任务列表> 1. 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 Vi ...

  6. android绘制黑色画面,Android音视频技术入门之绘制一张图片

    Android 的音视频入门学习,首先了解一下绘制图片.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View作绘制图片.下 ...

  7. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  8. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  9. Android 音视频开发入门指南

    最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...

最新文章

  1. linux 内存居高不下,Linux 内存占用总是很高为何依旧很流畅?
  2. vbs之CurrentDirectory
  3. 【ACM】杭电OJ 2024
  4. 基本系统部署完成!北斗三号闪耀中国智慧
  5. 更加优雅的iOS自动布局
  6. 爬虫框架webmagic与spring boot的结合使用--转
  7. 微软发布架构师期刊阅读器
  8. Android-Animations的使用大全之二:Frame Animation和其他
  9. Mysql优化(出自官方文档) - 第四篇
  10. MQ队列管理器_PMTS命令
  11. matlab中的脚本文件和函数文件
  12. 经纬度WGS84地理坐标系转换成CGCS2000坐标系步骤
  13. 地铁FAS设备组成及系统结构
  14. 期货开户交易所的手续费和查询方法
  15. 网络爬虫(基于python的网络爬虫批量爬取图片)
  16. python爬取高校课程信息进行选课实战
  17. 求求你用数学炒股行不行?
  18. 拾方易公众号运营成本低么?
  19. esp-idf手动设置系统时间
  20. 后张忠谋时代,台积电面临诸多挑战

热门文章

  1. HMM/GMM识别之三音素训练——决策树
  2. 使用VSCODE写python程序
  3. When Does Label Smoothing Help?
  4. 苏州大学计算机系历年分数线,苏州大学历年分数线
  5. 程序员数学(26)–反比例函数
  6. 可以免费自学编程的12个网站,各种资料齐全!
  7. MyBatis之VFS
  8. SpringBoot实现多线程共享变量
  9. 两个阶跃函数相加或相减的傅里叶变换
  10. 「GoCN酷Go推荐」交互式命令行工具库survey