小白学习DirectX11:第一个demo

D3D11绘制NV12格式内存数据图像到窗口 最近我们播放器(Kommander)有需要绘制NV12格式的内存数据图像到窗口上,为了搞清楚NV12的内存数据如何送入纹理对象,我专门写了个demo来实现这一块的功能,一是为了彻底搞清楚这一块原理,二也是为了方便其他人的学习。上面demo中,我自己创建了一块NV12内存数据,为了简单起见,我把NV12内存数据图像设置成一个灰色了(你们也可以根据自己需要改为其他颜色),所以你们执行程序最终会在窗口上看到一个灰色图像。 阅读详情

源代码下载

 

简单说说

由于工作需要处理视频流,对处理速度要求比较高。已经完成的图像处理的代码(有空补上博客)处理每帧(3*1920*1080)串行需要160ms左右,不能满足要求,所以在别人推荐下开始研究并行处理计算---DirectX。大致想法是想利用里面的渲染和着色器等功能实现图像处理的算法,由于是并行计算,所以速度肯定要快很多。

昨天开始大致看了很多博客文章还有几本书,现在这儿推荐两个博客

毛星云的DirectX游戏开发

X_Jun很详细的教程

大牛的博客只是浏览了一下,因为自己不太需要那么多功能。但是觉得还是模模糊糊,没有写过代码始终理解不上去。于是今天开始跟着一本书《Beginning DirectX11 Game Programming》的第二章,整合里面的例子,加上一些自己的注释。水平不高,注释一个学习笔记吧。以前做完事情都没有立即写,今天做完决心今天就写完这篇博客

 

DirectX配置

DX的配置问题比较简单,有过常见库配置经验的都能够很简单完成。看了很多的文章,似乎较新版本的VS和系统已经集成了DX库在Windows Kit目录中,也不用另外安装。此处不再赘述,有需要的可以再查一查。

 

主程序

#include<Windows.h>
#include<memory>
#include<dx11demo.h>

//系统消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT paintStruct;
	HDC hDC;

	switch (message)
	{
	case WM_PAINT:
		hDC = BeginPaint(hwnd, &paintStruct);
		EndPaint(hwnd, &paintStruct);
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	default:
		return DefWindowProc(hwnd, message, wParam, lParam);
	}

	return 0;

}


int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
	LPWSTR cmdLine, int cmdShow)
{
	UNREFERENCED_PARAMETER(prevInstance);       //避免对于未使用变量的系统警告
	UNREFERENCED_PARAMETER(cmdLine);

	WNDCLASSEX wndClass = { 0 };               //窗口的类WNDCLASSEX,并初始化
	wndClass.cbSize = sizeof(WNDCLASSEX);      //窗口大小
	wndClass.style = CS_HREDRAW | CS_VREDRAW;   //窗口风格
	wndClass.lpfnWndProc = WndProc;           //回调函数,处理系统发来的时间消息
	wndClass.hInstance = hInstance;             
	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wndClass.lpszMenuName = NULL;
	wndClass.lpszClassName = "DX11BookWindowClass";      //窗口的名字

	if (!RegisterClassEx(&wndClass))				//注册窗口,创造窗口前必须注册
		return -1;

	RECT rc = { 0,0,640,480 };
	AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);

	HWND hwnd = CreateWindowA("DX11BookWindowClass", "Blank Win32 Window",
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
		rc.bottom - rc.top, NULL, NULL, hInstance, NULL);       //创造窗口

	if (!hwnd)
		return -1;

	ShowWindow(hwnd, cmdShow);        //显示窗口

	std::auto_ptr<Dx11DemoBase> demo(new Dx11DemoBase());
	
	// 初始化
	bool result = demo->Initialize(hInstance, hwnd);
	
	if (!result)
		return -1;

	//Demo 初始化
	MSG msg = { 0 };
	while (msg.message != WM_QUIT)
	{
		if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			//更新 画图
			demo->Update(0.0f);
			demo->Render();
		}
	}
	//Demo 关闭

	demo->Shutdown();
	return static_cast<int>(msg.wParam);
}

主程序就是一个基本的win32下面的窗口函数。简单来说就是先声明一个新窗口,对窗口这个类继续赋值,比如大小,名字,回调函数等等,然后注册窗口,再创造该窗口。这些代码都很常见,也是模块化的,不容易出错。除去以上代码段中有关DX的几个语句,再编译运行,显示出来的就是一个空白窗口。

 

DX的初始化

头文件包含的主要是DX主要头文件,在自己编译运行过程中,由于自己之前设置的库的问题,会报错,所以自己就把链接库也加上了。DX功能对应的库自己还不太熟悉,这个坑以后再来填。


#ifndef _DEMO_BASE_H_
#define _DEMO_BASE_H_
#include<d3d11.h>
#include<d3dx11.h>
#include<DxErr.h>

#pragma comment(lib, "DXGI.lib")
#pragma comment(lib, "D3D11.lib")
#pragma comment(lib, "D3DX11.lib")
#pragma comment(lib, "D3DX10.lib")
#pragma comment(lib, "dxerr.lib")
#pragma comment(lib, "legacy_stdio_definitions.lib")

class Dx11DemoBase
{
public:
	Dx11DemoBase();
	virtual ~Dx11DemoBase();
	bool Initialize(HINSTANCE hInstance, HWND hwnd);  //初始化
	void Shutdown();    //关闭释放
    bool LoadContent();   //加载
	void UnloadContent();  //卸载
	void Update(float dt);  //更新
	void Render();   //渲染
protected:
	HINSTANCE hInstance_;    //窗口实例
	HWND hwnd_;              //窗口句柄
	D3D_DRIVER_TYPE driverType_;    //设备类型
	D3D_FEATURE_LEVEL featureLevel_;  //特征等级
	ID3D11Device* d3dDevice_;         //D3D设备实际对象
	ID3D11DeviceContext* d3dContext_; //上下文,理解为接口更好
	IDXGISwapChain* swapChain_;       //交换链
	ID3D11RenderTargetView* backBufferTarget_;    //后缓冲区目标视图
};
#endif

头文件就不说了,主要是定义了一些基本的函数,和一些DX的变量,比如设备号之类和feature level,看完初始化,再去看这些东西印象会更深刻一些。下面开始来说一下DX初始化的流程和代码段。

bool Dx11DemoBase::Initialize(HINSTANCE hInstance, HWND hwnd)
hInstance_ = hInstance;        //获得当前实例
hwnd_ = hwnd;                  //获取当前窗口句柄

RECT dimensions;                
GetClientRect(hwnd, &dimensions);    //获取当前client area大小(窗口大小)

初始化函数传入就是当前窗口的实例和句柄,因为显示在原来定义的窗口上显示。GetClientRect函数可以获得窗口的大小,RECT结构表示的是窗口的四个点坐标。

设置设备类型和特征等级

    //设置设备类型和特征等级(feature level)
        D3D_DRIVER_TYPE driverTypes[] =                     
     //设备类型(以下包括硬件,软件,WARP,参考四种)
    {
	D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP,
	D3D_DRIVER_TYPE_REFERENCE, D3D_DRIVER_TYPE_SOFTWARE
    };

	unsigned int totalDriverTypes = ARRAYSIZE(driverTypes);     //ARRAYSIZE返回数组大小

	D3D_FEATURE_LEVEL featureLevels[] =      //feature level不同的硬件支持不同
		{
	  D3D_FEATURE_LEVEL_11_0,
	  D3D_FEATURE_LEVEL_10_1,
	  D3D_FEATURE_LEVEL_10_0
		};

	unsigned int totalFeatureLevels = ARRAYSIZE(featureLevels);   //ARRAYSIZE返回数组大小

D3D_DRIVER_TYPE和D3D_FEATURE_LEVEL分别就是设备类型和设备特征等级。设备包括软件、硬件、参考和WARP四种设备,特征等级包括这三种。这里用数组存储了,是因为后面读取不同的电脑硬件时,可能会遇到支持的设备类型和等级不同,需要循环设置。只要有一个设备类型和等级,就可以成功创建设备和后续的交换链。

设备和交换链创建

这个代码段主要是完成了交换链这个东西的一些参数的赋值,交换链是一个新概念,但是理解上来还是比较简单的。

     //设备及交换链创建
DXGI_SWAP_CHAIN_DESC swapChainDesc;      //变量类型为  交换链形容子(swap chain description)
ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));   //用零填充该变量的所有区域
swapChainDesc.BufferCount = 1;               //缓冲区数(此处猜测为1,则有两个缓冲区,2有个)
swapChainDesc.BufferDesc.Width = width;
swapChainDesc.BufferDesc.Height = height;            //缓冲区存储的大小(和要显示的一致)
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;   //缓冲区存储图像的格式()
swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;        //刷新率,60/1表示60Hz
swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;   //缓冲区使用
swapChainDesc.OutputWindow = hwnd;           //窗口,就是win32要做显示的窗口句柄
swapChainDesc.Windowed = true;               //决定保存窗口或者到全屏的变量
swapChainDesc.SampleDesc.Count = 1;          
swapChainDesc.SampleDesc.Quality = 0;        //sample description

交换链:交换始于前缓冲区和后缓冲区的交换。在显示器的显示过程中,一般还会有渲染处理的过程。前缓冲区中存储的就是现在正在显示的图像,后缓冲区是处理结束等待显示的下一张图像。当显示下一张图像时,前后缓冲区就会交换,前变成后,后变成前。在DX里面,形容交换链的容器就是DXGI_SWAP_CHAIN_DESC。值得注意的是,后缓冲区可以是两个也可以是一个。

上面代码里注释都比较详细,也没有太多解释和说明的,还有问题可以参考文章开头给出的那本书。

下面代码就是创建设备和交换链了,for循环检索之前给的数组,有一个存在,就可以创建成功。当然,如果熟悉自己的硬件支持的设备和等级,也可以直接使用那个函数创建。

for (driver = 0; driver < totalDriverTypes; ++driver)  
//循环表示对所有类型设备都尝试创建,有一个设备存在和特征level存在,创建成功
{
//D3D11CreateDeviceAndSwapChain()创建交换链,设备,渲染context
      result = D3D11CreateDeviceAndSwapChain(0, driverTypes[driver], 0, creationFlags,
			   featureLevels, totalFeatureLevels,
				D3D11_SDK_VERSION, &swapChainDesc, &swapChain_,
				&d3dDevice_, &featureLevel_, &d3dContext_);

			if (SUCCEEDED(result))
			{
				driverType_ = driverTypes[driver];    
				break;
			}
		}

if (FAILED(result))
{
	DXTRACE_MSG("创建 Direct3D 设备失败!");
	return false;
	}
  //渲染目标视图创建Render Target View Creation
		ID3D11Texture2D* backBufferTexture;

		result = swapChain_->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBufferTexture);

		if (FAILED(result))
		{
			DXTRACE_MSG("获取交换链后台缓存失败!");
			return false;
		}

		//创建渲染目标视图
		result = d3dDevice_->CreateRenderTargetView(backBufferTexture, 0, &backBufferTarget_);

		if (backBufferTexture)
			backBufferTexture->Release(); //释放缓冲区指针,防止内存泄漏

		if (FAILED(result))
		{
			DXTRACE_MSG("创建渲染目标视图失败!");
			return false;
		}

		//渲染到一个固定视图
		d3dContext_->OMSetRenderTargets(1, &backBufferTarget_, 0);

		//视窗创建(定义了要显示的视窗范围)
		D3D11_VIEWPORT viewport;
		viewport.Width = static_cast<float>(width);   
		viewport.Height = static_cast<float>(height);     //高度和宽度
		viewport.MinDepth = 0.0f;            //深度范围
		viewport.MaxDepth = 1.0f;
		viewport.TopLeftX = 0.0f;            //视窗的顶部左坐标
		viewport.TopLeftY = 0.0f;

		d3dContext_->RSSetViewports(1, &viewport);      //设置到视窗范围

初始化剩下的部分就是比较简单:获取内存,创建目标视图数据,显示等等。。这儿涉及到几个device,context,发现一篇文章简单的说明了一下,可以参考。

代码主要侧重点还是在设备的初始化部分,所以更深奥的部分还没有涉及到。整理的渲染函数里,就只是简单的让窗口显示一个给定的颜色,由clearColor给定。另外一定是,显示设备一般实际上有四个通道,分别是RGB和alpha,最后一个是透明度。

在render函数中,修改clearColor就可以得到不同的窗口显示颜色。


	void Dx11DemoBase::Render()
	{
		if (d3dContext_ == 0)
			return;
		float clearColor[4] = { 0.5f, 0.5f, 0.25f, 1.0f };
		d3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor);    //清除屏幕,显示一个特别的颜色
		swapChain_->Present(0, 0);        //显示后缓冲区的渲染场景,也就是新的
	}

在render函数中,修改clearColor就可以得到不同的窗口显示颜色,如下图所示。

 

总结

本文简单介绍了一些D3D初始化的代码,来源于《Beginning DirectX11 Game Programming》的第二章,简单给代码加上了注释,并写了一些自己的理解。初始化部分: 获取当前设备的类型和特征等级,设置交换链的参数,创建设备,设置后缓冲区内存等等。每一步都需要D3D11库里面的函数实现,主要的函数已经包括在代码中,这部分函数知道固定的输入参数即可。我觉得我将面临的难点还是在后面移植算法过程中,如何用D3D11的功能实现算法。明天继续学习这部分内容,希望自己有空就把自己做过的写成博客,这样就可以越写越好了。

在写博客的时候有些内容没有想到,文章也一般,以后若是想到问题再回来修改。

DirectX11 几何体示例Demo DirectX11 Shape示例Demo 我们将下来描述如何建立其他两个几何体形状:圆柱体和球体。这些形状对于天空盒、调试、可视化碰撞检测,和减少渲染是非常有帮助的。比如,你可能想把所有游戏角色都渲染成一个球体来调试测试。 1. 如何产生圆柱体网格?我们将圆柱体分为三个部分:侧面、顶部圆盖和底部圆盖。(注意这里说的圆柱体不是单纯的圆柱体,也可以泛指圆台、圆锥。当顶部圆盖半径为0就是圆锥。)我们 阅读详情

相关推荐

DirectX11 动态缓存 & 水波演示Demo

DirectX11 动态缓存 1. 动态缓存是什么? 到目前为止,我们一直使用的是静态缓冲(static buffer),它的内容是在初始化时固定下来的。相比之下,动态缓冲(dynamic buffer)的内容可以在每一帧中进行修改。当实现一些动画效果时,我们通常使用动态缓冲区。例如,我们要模拟一个水波效果,并通过函数f(x ,z ,t)来描述水波方程,计算当时间为t时,xz平面上的每个点的高度

梦幻DUO的游戏开发之路 2145

DirectX11 简介+环境配置

简介+环境配置,本节主要是为没有Window 10 SDK的用户提供DirectX11支持

orbitgw的博客 6817

Directx11 HelloWorld之与Directx9的比较

这些天终于受不了诱惑,决定入手Directx11。看个HelloWord的程序。  先看看整体框架:所有函数的声明。可以看到和D3d9c差不多,都是初始化窗口,创建设备,清理设备,消息循环和渲染。下面我们将看到发生变化的主要是创建设备的InitDevice()函数,其他都是些MFC框架。  HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );   HRESULT InitDevice();  void CleanupDevice();  LRESU

算法,时空数据挖掘 3896

‌DirectX 11和‌DirectX 12的区别是什么?DirectX 修复方法及工具介绍

系统更新确保 Windows 操作系统处于最新状态,因为系统更新可能包含对 DirectX 相关问题的修复和改进。重新安装 DirectX 运行时库您可以从微软官方网站下载最新版本的 DirectX 运行时库进行安装。检查显卡驱动程序过时或不兼容的显卡驱动可能导致 DirectX 问题。访问显卡制造商的官方网站,下载并安装最新的驱动程序。常用工具:DirectX 修复工具。这是一款专门用于修复 DirectX 相关问题的工具。

Cybertronnnnnn的博客 6208

directx实现的魔兽争霸3demo

directx实现的魔兽争霸3demo, 包括模型,地形,寻路,音效,开机画面和加载画面等简单功能; 可以拉着一个恐惧魔王漫游LostTemple地图; 问题请联系: fenghappy2000@163.com

从入门到精通:激光器恒流驱动电路的设计与选型指南

本文深入解析了激光器恒流驱动电路的设计与选型。文章从基础电路原理讲起,对比了简易恒流源与高精度运放反馈方案的优劣,并重点阐述了如何为不同功率与精度要求的激光器项目选择合适的恒流驱动方案,强调了恒流源对于保障激光器稳定工作、防止热失控及延长寿命的核心作用。

grafana6viz的博客 711

【Visual C++】游戏开发笔记二十八 最精简的Direct3D11 Demo筋骨脉络全攻略

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.youkuaiyun.com/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happylifemxy@qq.com 本篇文章将讲解如何通过我们在之前的文章里面已掌握的DirectX 11的知识,来一步一步创建一个基于Direct3D11的Blank ...

编程资料大全 273

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 476

【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍&第一个DirectX 11 Demo的创建

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。http://blog.youkuaiyun.com/zhmxy555/article/details/7688515作者:毛星云    邮箱: happylifemxy@163.com   这节笔记主要讨论DirectX 11现有的组件构成,随着DirectX各个版本的更新被时代抛弃的一些组件以及第一个围绕着DirectX 11 的Demo创建全过

【浅墨的游戏编程Blog】毛星云(浅墨)的专栏 3万+

5分钟搞懂SCMA:稀疏码多址接入的核心原理与实战应用

本文深入浅出地解析了SCMA(稀疏码多址接入)的核心原理与实战应用。通过对比传统正交多址技术,阐释了SCMA如何通过非正交叠加和稀疏码本设计,实现远超资源单元数的用户接入,从而有效应对5G海量机器通信(mMTC)的挑战。文章还探讨了其在上行海量连接、免授权接入等场景的应用潜力及工程实现中的关键考量。

zeta9的博客 264

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 416

DirectX 11 学习笔记-Demo-01

前言  这个Demo包含了《Introduction to 3D Game Programming with Directx 11》前12章的内容,我将它们都整合到同一个Demo中。学习的过程中还是建议循序渐进,按照书本的介绍进行练习。  另外,我不会详细介绍代码的每一部分,所以如果希望学习相关内容,可以结合书本阅读源码。  Demo源码可以在GitHub上获取 https://github...

Zealot_Alie的博客 826

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文详细解析了OpenCV图像去畸变的原理与实战方法,对比了三种核心函数(标准、鱼眼、全景模型)的适用场景与效果。重点提供了完整的代码示例,并深入探讨了alpha、焦距、中心点等关键参数的调优技巧,以帮助开发者有效矫正镜头畸变,提升计算机视觉任务精度。

life6的博客 553

DirectX 11各组件的介绍&第一个DirectX 11 Demo的创建

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.youkuaiyun.com/zhmxy555/article/details/7688515 作者:毛星云    邮箱: happylifemxy@qq.com    这节笔记主要讨论DirectX 11现有的组件构成,随着DirectX各个版本

痞子龙3D编程 3300

OpenCv案例(七): 基于OpenCvSharp计算图像的清晰度(自动对焦)

自动对焦,其实是对相机成像的清晰值得计算,若对焦不清晰,成像的清晰度低,视觉效果模糊。若是在工业检测行业,对焦不准确,可能会造成严重后果;对焦准确的图像,其清晰度高,对比度鲜明,层次明显。

qq_37835727的博客 7114

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

本文给大家带来的改进机制是Slim-neck提出的Neck部分,Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中,neck是连接主干网络(backbone)和头部网络(head)的部分,负责特征融合和处理,以便提高检测的准确性和效率。亲测在小目标检测和大尺度目标检测的数据集上都有大幅度的涨点效果(mAP直接涨了大概有0.4左右。同时本文对Slim-Neck的框架原理进行了详细的分析,不光让大家会添加到自己的模型在写论文的时候也能够有一定的参照。

Snu77的博客 1万+

DirectX11 With Windows SDK--00 目录

DirectX11–使用Windows SDK来进行开发 在看龙书(Introduction to 3D Game Programming with Directx 11)的时候,里面所使用的开发工具包为Microsoft DirectX SDK(June 2010),该开发包到现在也已经经历了8年左右。而现在,微软其实已经将DX的相关组件随同Windows SDK一同更新,并不再对Direct...

X_Jun的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

DirectX11 光照演示示例Demo

光照演示示例Demo1. Demo介绍我们的光照演示程序中,我们实现了3种个不同的光源:1个平行光、1个点光、1个聚光灯。平行光的位置是固定的,点光绕着地形转圈,而聚光灯跟随相机移动,并指向相机的观察方向。光照演示程序只是对上一章的水波演示程序做了一些修改。2. effect文件//===========================================================

梦幻DUO的游戏开发之路 2002

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍 第一个DirectX 11 Demo的创建

【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍 第一个DirectX 11 Demo的创建

hftugv的博客 390

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

DirectX11编程5 渲染动态顶点

环境:VS2017  语言:C++   总起: 第六章剩下的Demo差别不是很大,基本没什么新的知识点,不过我都将其实现了,今天就专门针对Waves这个Demo说一些特别的东西。   工程在此:https://github.com/anguangzhihen/Dx11。   如果遇到工程不能运行的情况,请留言,我会尽快查明原因。   Waves Deme: 该Demo主要是实现...

暗光之痕的博客 957

泡泡堂 DirectX11 Demo 2016.8.14 v1.2更新

一、说明: 本程序是模仿泡泡堂游戏功能的Demo,使用DirectX11图形库和C++语言,在VS2010环境下编译。 二、程序运行环境: WIN7以上系统,64/32位均可,DirectX版本需要在11以上。 三、搭建编译环境: 右击项目-点击属性: 1.在常规页面,字符集修改为“使用多字节字符集” 2.在链接器-输入页的附加依赖项添加: dxguid.lib;din

梦幻DUO的游戏开发之路 4846

Directx11入门之D3D程序初始化

初始化的程序在书中第四章讲解比较清楚,文章Directx11学习笔记【三】 第一个D3D11程序已经把书中内容做了大致翻译,因此不再赘述。以下从原文复制了一些内容与整合后的代码。在先前的解决方案中新建一个新的Win32项目FirstD3D11Demo。在写代码之前,我们必须先添加dx11所需要的库。为了链接dx库,右键项目选择属性-&gt;vc++目录,在包含目录中添加你所安装的SDK根目录\In...

九野的博客 4295

{转自MC}NVIDIA DirectX 11演示DEMO详解

http://tieba.baidu.com/p/1960826986 图形技术无论如何发展,最终都要落到实际的应用中才有效果。在个人电脑上,图形技术最大的用户除了显示UI和操作界面外,就是呈现美轮美奂的游戏场景。说起游戏发展,内容实在太过庞大繁杂,可能三天三夜也说不完。但是,今天我们可以从另一个角度来观察图形技术在这10年时间中的飞跃进步。NVIDIA,作为最主要的图形技术领导厂商之一,在20...

weixin_34122810的博客 1010

DirectX11 山峰与河谷示例Demo

山峰与河谷演示程序Demo 1. 山峰与河谷演示程序Demo原理 本章还包含了一个“山峰与河谷”的例子。它使用了与颜色立方体演示程序相同的Direct3D方法,只是它绘制的几何体更复杂一些。它主要讲解的是如何使用代码来生成三角形网格;这种几何体在实现地形渲染和水体渲染时非常有用。实数函数y = f(x , z)可以生成一个“漂亮的”曲面。我们可以通过构造一个xz平面上的网格来模拟该曲面,其中每个

梦幻DUO的游戏开发之路 1644
上一篇: 分裂布雷格曼方法--(Split Bregman Method)
下一篇: 航拍图像视觉效果提升--去雾算法的应用
半子yuan
博客等级 码龄11年 27粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值