D3D视频渲染入门程序.
1. C/C++;
2. Win32 API基础;
3. COM( 组件对象模型)的使用;
4. 数学基础(矩阵、向量、四元数等);
5. 计算机图形学基础(三维变换,渲染,灯光等)。
一个D3D程序的基本结构:
一个基本的D3D程序,渲染显示一个空白窗口,代码如下:
- //=============================================================================
- // Desc: 最简单的Direct3D程序,
- //=============================================================================
- #include <d3d9.h>
- //-----------------------------------------------------------------------------
- // 全局变量
- //-----------------------------------------------------------------------------
- LPDIRECT3D9 g_pD3D = NULL; //Direct3D对象
- LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //Direct3D设备对象
- //-----------------------------------------------------------------------------
- // Desc: 初始化Direct3D
- //-----------------------------------------------------------------------------
- HRESULT InitD3D( HWND hWnd )
- {
- //创建Direct3D对象, 该对象用来创建Direct3D设备对象
- if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
- return E_FAIL;
- //设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory( &d3dpp, sizeof(d3dpp) );
- d3dpp.Windowed = TRUE;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
- //创建Direct3D设备对象
- if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
- D3DCREATE_SOFTWARE_VERTEXPROCESSING,
- &d3dpp, &g_pd3dDevice ) ) )
- {
- return E_FAIL;
- }
- return S_OK;
- }
- //-----------------------------------------------------------------------------
- // Desc: 释放创建对象
- //-----------------------------------------------------------------------------
- VOID Cleanup()
- {
- //释放Direct3D设备对象
- if( g_pd3dDevice != NULL)
- g_pd3dDevice->Release();
- //释放Direct3D对象
- if( g_pD3D != NULL)
- g_pD3D->Release();
- }
- //-----------------------------------------------------------------------------
- // Desc: 渲染图形
- //-----------------------------------------------------------------------------
- VOID Render()
- {
- //清空后台缓冲区
- g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
- //开始在后台缓冲区绘制图形
- if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
- {
- //在此在后台缓冲区绘制图形
- //结束在后台缓冲区渲染图形
- g_pd3dDevice->EndScene();
- }
- //将在后台缓冲区绘制的图形提交到前台缓冲区显示
- g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
- }
- //-----------------------------------------------------------------------------
- // Desc: 消息处理
- //-----------------------------------------------------------------------------
- LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
- {
- switch( msg )
- {
- case WM_DESTROY:
- Cleanup();
- PostQuitMessage( 0 );
- return 0;
- case WM_PAINT:
- Render();
- ValidateRect( hWnd, NULL );
- return 0;
- }
- return DefWindowProc( hWnd, msg, wParam, lParam );
- }
- //-----------------------------------------------------------------------------
- // Desc: 程序入口
- //-----------------------------------------------------------------------------
- INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
- {
- //注册窗口类
- WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
- GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
- L"ClassName", NULL };
- RegisterClassEx( &wc );
- //创建窗口
- HWND hWnd = CreateWindow( L"ClassName", L"最简单的Direct3D程序",
- WS_OVERLAPPEDWINDOW, 200, 100, 600, 500,
- NULL, NULL, wc.hInstance, NULL );
- //初始化Direct3D
- if( SUCCEEDED( InitD3D( hWnd ) ) )
- {
- //显示主窗口
- ShowWindow( hWnd, SW_SHOWDEFAULT );
- UpdateWindow( hWnd );
- //进入消息循环
- MSG msg;
- ZeroMemory( &msg, sizeof(msg) );
- while( msg.message!=WM_QUIT )
- {
- if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
- {
- TranslateMessage( &msg );
- DispatchMessage( &msg );
- }
- else
- {
- Render(); //渲染图形
- }
- }
- }
- UnregisterClass( L"ClassName", wc.hInstance );
- return 0;
- }
运行结果:
D3D视频渲染入门程序.相关推荐
- SDL2音视频渲染入门
SDL, "Simple DirectMedia Layer",它是一套开放源代码的跨平台多媒体开发库,使用C语言写成.其主要用于游戏开发中的多媒体处理,如视频渲染,音频播放,鼠标 ...
- 海康大华网络摄像头高起播低延时RTSP网页无插件流媒体专用播放器EasyPlayer-RTSP之GDI和D3D两种视频渲染方式的区别介绍
GDI和D3D两种视频渲染方式的区别 EasyPlayer-RTSP windows播放器支持D3D和GDI两种渲染方式. D3D支持格式如下: DISPLAY_FORMAT_YV12 DISPLAY ...
- NVIDIA DeepStream 5.0构建智能视频分析应用程序
NVIDIA DeepStream 5.0构建智能视频分析应用程序 无论是要平衡产品分配和优化流量的仓库,工厂流水线检查还是医院管理,要确保员工和护理人员在照顾病人的同时使用个人保护设备(PPE),就 ...
- windows平台视频渲染技术小结
一.概述 在Windows平台下的视频播放技术主要有以下三种:GDI,Direct3D和OpenGL:也经常看到DirectDraw这个技术,根据维基介绍,DirectDraw是微软弃用的一个API, ...
- Android音视频开发入门指南
<Android 音视频从入门到提高 -- 任务列表> 1. 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 Vi ...
- android绘制黑色画面,Android音视频技术入门之绘制一张图片
Android 的音视频入门学习,首先了解一下绘制图片.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View作绘制图片.下 ...
- SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...
- Android 音视频开发入门指南
最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...
最新文章
- linux 内存居高不下,Linux 内存占用总是很高为何依旧很流畅?
- vbs之CurrentDirectory
- 【ACM】杭电OJ 2024
- 基本系统部署完成!北斗三号闪耀中国智慧
- 更加优雅的iOS自动布局
- 爬虫框架webmagic与spring boot的结合使用--转
- 微软发布架构师期刊阅读器
- Android-Animations的使用大全之二:Frame Animation和其他
- Mysql优化(出自官方文档) - 第四篇
- MQ队列管理器_PMTS命令
- matlab中的脚本文件和函数文件
- 经纬度WGS84地理坐标系转换成CGCS2000坐标系步骤
- 地铁FAS设备组成及系统结构
- 期货开户交易所的手续费和查询方法
- 网络爬虫(基于python的网络爬虫批量爬取图片)
- python爬取高校课程信息进行选课实战
- 求求你用数学炒股行不行?
- 拾方易公众号运营成本低么?
- esp-idf手动设置系统时间
- 后张忠谋时代,台积电面临诸多挑战