关于Directly Mapping Texels to Pixels的例子

2023-11-08

原文:http://msdn.microsoft.com/en-us/library/bb219690%28v=vs.85%29.aspx

是关于在direct3d9中,对于屏幕空间中,将贴图映射到像素的问题

以下是pixel shader源代码(aaa.ps.txt)

texture MyTexture;

sampler2D MySampler = 
sampler_state 
{ 
	Texture = <MyTexture>;
	MinFilter = LINEAR;
	MagFilter = LINEAR;
	AddressU = Clamp;
	AddressV = Clamp;
};

float4 TextureLookupPS(float2 vTexCoord : TEXCOORD0) : COLOR
{
	return tex2D(MySampler, vTexCoord);
} 
以下是主程序代码(main.cpp)

#include <d3d9.h>
#include <d3dx9.h>

#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
LPDIRECT3DTEXTURE9 g_pTexture = NULL;
LPDIRECT3DPIXELSHADER9 g_pPS = NULL;
LPD3DXCONSTANTTABLE g_pPSConstantTable;

#define SAFE_RELEASE(p) if(p) {p->Release();}

struct CUSTOMVERTEX
{
	FLOAT x, y, z, rhw;
	FLOAT tu, tv;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_TEX1)

HRESULT Init(HWND hWnd)
{
	if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
		return E_FAIL;

	D3DPRESENT_PARAMETERS d3dpp = {0};
	d3dpp.Windowed = TRUE;
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

	if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
		return E_FAIL;

	if(FAILED(D3DXCreateTextureFromFile(g_pd3dDevice, L"aaa.bmp", &g_pTexture)))
		return E_FAIL;

	LPD3DXBUFFER pShader;
	LPD3DXBUFFER pErrorMsgs;
	if(FAILED(D3DXCompileShaderFromFile(L"aaa.ps.txt", NULL, NULL, "TextureLookupPS", "ps_2_0", 0, &pShader, &pErrorMsgs, &g_pPSConstantTable)))
	{
		MessageBoxA(NULL, (LPSTR)pErrorMsgs->GetBufferPointer(), "Error", MB_OK);
		SAFE_RELEASE(pErrorMsgs);
		return E_FAIL;
	}

	if(FAILED(g_pd3dDevice->CreatePixelShader((DWORD *)pShader->GetBufferPointer(), &g_pPS)))
		return E_FAIL;

	SAFE_RELEASE(pShader);
	SAFE_RELEASE(pErrorMsgs);
	return S_OK;
}

VOID Render(void)
{
	HRESULT hres;
	hres = g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0);

	if(SUCCEEDED(hres = g_pd3dDevice->BeginScene()))
	{
		CUSTOMVERTEX vertices[] =
		{
			{0.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f},
			{4.0f, 0.0f, 0.5f, 1.0f, 1.0f, 0.0f},
			{4.0f, 4.0f, 0.5f, 1.0f, 1.0f, 1.0f},
			{0.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f},
			{4.0f, 4.0f, 0.5f, 1.0f, 1.0f, 1.0f},
			{0.0f, 4.0f, 0.5f, 1.0f, 0.0f, 1.0f},
		};

		//for(int i = 0; i < sizeof(vertices) / sizeof(CUSTOMVERTEX); i++)
		//{
		//	vertices[i].x -= 0.5f;
		//	vertices[i].y -= 0.5f;
		//}

		hres = g_pd3dDevice->SetPixelShader(g_pPS);
		UINT TextureSamplerIndex = g_pPSConstantTable->GetSamplerIndex("MySampler");
		hres = g_pd3dDevice->SetTexture(TextureSamplerIndex, g_pTexture);
		hres = g_pd3dDevice->SetSamplerState(TextureSamplerIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
		hres = g_pd3dDevice->SetSamplerState(TextureSamplerIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        hres = g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
        hres = g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, vertices, sizeof(CUSTOMVERTEX));
		hres = g_pd3dDevice->EndScene();
	}

	hres = g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}

VOID Cleanup(void)
{
	SAFE_RELEASE(g_pPSConstantTable);
	SAFE_RELEASE(g_pPS);
	SAFE_RELEASE(g_pTexture);
	SAFE_RELEASE(g_pd3dDevice);
	SAFE_RELEASE(g_pD3D);
}

LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch( msg )
	{
	case WM_DESTROY:
		Cleanup();
		PostQuitMessage( 0 );
		return 0;
	}

	return DefWindowProc(hWnd, msg, wParam, lParam);
}

INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, INT)
{
	WNDCLASSEX wc = {sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, L"MappingTexels", NULL};
	RegisterClassEx(&wc);

	HWND hWnd = CreateWindow(L"MappingTexels", L"MappingTexels", WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, NULL, NULL, wc.hInstance, NULL);
	if(SUCCEEDED(Init(hWnd)))
	{
		ShowWindow(hWnd, SW_SHOWDEFAULT);
		UpdateWindow(hWnd);

		MSG msg = {0};
		while(msg.message != WM_QUIT)
		{
			if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
			else
				Render();
		}
	}

	UnregisterClass(L"MappingTexels", wc.hInstance);
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Directly Mapping Texels to Pixels的例子 的相关文章

  • 使用 FILE_FLAG_NO_BUFFERING 会带来明显的速度增益吗?

    最近在MSDN中注意到FILE FLAG NO BUFFERING标志的详细描述 并阅读了几条关于Windows中无缓冲I O的Google搜索结果 http msdn microsoft com en us library aa36385
  • Windows 内核中可能的最大文件名长度

    我想知道 什么是longestWindows 内核允许的可能名称长度 例如 我知道内核使用UNICODE STRING结构来保存所有对象路径 并且由于宽字符字符串的字节长度存储在USHORT 允许最大路径长度为 2 15 1 个字符 有没有
  • 使用 MapViewOfFile 有什么限制吗?

    我正在尝试将内存映射文件用作 hFile CreateFile State Path GENERIC READ FILE SHARE READ FILE SHARE WRITE 0 OPEN EXISTING FILE FLAG SEQUE
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • Win32 函数获取 C:\ProgramData 的路径

    我的应用程序需要安装一些可以由应用程序在运行时编辑的文件 Installshield提供了一个别名 CommonAppDataFolder 它将在Vista和Windows 7上解析为c programData 并且也适用于Windows
  • FAT-32 上的 Unicode 文件名?

    据我了解 NTFS 支持 Unicode 文件名 正如 Microsoft 声称的那样 UTF 16 但官方 MSDN 文档对于使用什么代码页在 FAT 32 上存储文件名 文件路径 非常模糊 这里说的是OEM 代码页 我假设是CP437
  • 将 CreateThread 与 lambda 结合使用

    只是试验 但我想知道是否可以使该代码工作 如编译 void main int number 5 DWORD dontThreadOnMe PVOID PVOID data int value int data cout lt lt valu
  • 空字符串与NULL

    我有一个表 其中一些行有一些空白cells 我尝试使用 IS NULL 函数选择此类行 但查询选择了 0 行 select from zzz fkp registration female where fname is null 0 row
  • Rails 3:使用 AJAX 请求更新 URL 参数

    我有一个过滤器和一个产品列表 id 名称 创建日期 我可以按 ID 名称或创建日期进行过滤 通过 AJAX 请求 我更新了内容 div 但显然 URL 没有改变 如何将参数附加到 URL 例如 localhost 3000 dashboar
  • 如何在 Go 中表示可选字符串?

    我希望建模一个可以有两种可能形式的值 不存在或字符串 执行此操作的自然方法是Maybe String or Optional
  • 如何在 Win32 中获取特定的 TIME_ZONE_INFORMATION 结构?

    Win32 GetTimeZoneInformation 函数返回控制面板中设置的系统本地时区 如何获取另一个特定时区 有没有一个电话可以做到这一点 Tony 根据this http msdn microsoft com en us lib
  • WIN32,C++:是否可以在不隐藏窗口的情况下对窗口进行动画处理?

    我有一个编辑控件 一个文本字段 我想要为其设置动画 我想要的动画是它滑出 为该文本字段创建一条额外的线 我可以为我的文本字段设置动画并使其变大 但是要显示滑动动画 我首先必须隐藏它 这意味着整个文本字段会滑出 就像第一次从无到有一样 而不是
  • 使用 Windows (XP+) api 发送(串行)中断

    有没有比 setcommbreak delay clearcommbreak 序列更好的方法来发送串行中断 我必须与使用串行中断作为 115k2 上数据包开头的微控制器进行通信 而 setcommbreak 有两个问题 对于 115k2 中
  • 在ASP CLASSIC中使用SQL参数,对象定义不正确错误

    我试图使用参数保护我的 INSERT 语句免受 SQL 注入 但由于某种原因我收到错误 Parameter object is improperly defined Inconsistent or incomplete informatio
  • 在 Windows 中从文件名获取驱动器号

    是否有 Windows API 函数可以从 Windows 路径中提取驱动器号 例如 U path to file txt U path to file txt 在正确整理的同时 relative path to file txt alte
  • NtDll 真的导出 C 运行时函数吗?我可以在我的应用程序中使用这些函数吗?

    我在查看 Windows 10 计算机上的 NtDll 导出表 发现它导出标准 C 运行时函数 例如memcpy sprintf strlen etc 这是否意味着我可以在运行时动态调用它们LoadLibrary and GetProcAd
  • 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?

    如何在 Windows 上关闭 tcp v4 和 tcp v6 连接 我不想终止具有开放连接的整个进程 因为这显然会将其他人踢出该进程 我需要从一个单独的进程执行此操作 因此无法访问套接字句柄等 我正在使用 Windows API 来获取
  • 使用自定义服务的编译器传递加载 Symfony 的参数

    根据这个问题如何从数据库加载 Symfony 的配置参数 Doctrine https stackoverflow com q 28713495 8945214我有一个类似的问题 我需要动态设置参数 并且我想提供来自另一个自定义服务的数据
  • MoveWindow死锁?

    我在线程 A 上有一个窗口 它在某个时刻 由于在其 wndproc 上收到消息 触发线程 B 上的操作 然后等待该操作完成 使用某种同步机制 然后线程B调用MoveWindow 在线程 A 的窗口 例如标准文本框 内移动子窗口 此时程序由于
  • 使用命名互斥体的存在作为指示符是个好主意吗?

    我使用命名互斥体来检测应用程序的其他实例并相应地退出 并发现有两种方法可以执行此操作 创建互斥锁 忽略它是否已经存在的指示 尝试获得它 使用获取成功 失败的事实 创建互斥锁 使用指示是否已经存在 我无法决定是否获取互斥锁 并在退出时释放 一

随机推荐

  • 数字图像与视频处理 作业模板 Latex版

    搞了好久 终于把这个简单的模板给拼出来了 不熟悉想做点什么真的太难 做的时候一点点小的问题就可能发去半天的时间都找不出来 比如到最后完全没有问题的时候bibtex命令就是通不过 后来我把文件名改短了 去掉分隔符 成功了 所以说不懂的事情要从
  • 黑窗口下带进度条的http下载

    package main import flag fmt io log net http os strconv strings time github com cheggaaa pb var url flag String url The
  • mac下pycharm使用小技巧--持续更新

    Pycharm使用小技巧 pycharm创建新文件自动添加文件头注释 背景 我们平时在使用pycharm发现有些大神创建一个新文件的时候会自动在文件头添加一些注释 像是有文件路径 创建时间 创建人 集成平台等信息 但是我们自己创建的时候就没
  • 论文翻译:2021_Performance optimizations on deep noise suppression models

    Python微信订餐小程序课程视频 https blog csdn net m0 56069948 article details 122285951 Python实战量化交易理财系统 https blog csdn net m0 5606
  • 快速排序---从大到小和从小到大(Java)

    快速排序 快速排序由于排序效率在同为O nlogn 的几种排序方法中效率较高 因此经常被采用 再加上快速排序使用了分治法的思想 算是基础排序中比较高档的一种排序了 基本思想 1 先从数列中取出一个数作为基准数 可以是第一个 也可是中间的或者
  • 大数据系统体系架构(含图示)

    目录 1 大数据体系架构图 2 数据采集层 3 数据计算层 4 数据服务层 5 数据应用层 1 大数据体系架构图 2 数据采集层 阿里的的日志采集包括两大体系 Aplus JS是Web端的日志采集技术方案 UserTrack是APP端的日志
  • 前后端分离案例--权限系统(跨域请求)

    权限系统 1 前端 vue elementui axios css html 2 后端 springboot mybatis plus nybatis druid shiro swagger2 redis 1 前端界面及按钮事件实现 1 1
  • thrift介绍及应用(一)—介绍

    原文 http blog csdn net guxch article details 12157151 一 概述 Thrift是Apache下的一个子项目 最早是Facebook的项目 后来Facebook提供给Apache作为开源项目
  • 如何判断一个List集合中是否有空值

    list Any v gt string IsNullOrWhiteSpace v 转载于 https www cnblogs com xiaonangua p 10818082 html
  • ifdef win32 linux,使用预定义宏检测编译环境(操作系统、编译器类型、编译器版本)...

    在编写跨平台的程序时 我们经常使用预定义宏来检测编译环境 虽然编译器的手册中有预处理宏的介绍 但是不够详细 而且还有很多宏没有介绍 于是 我编写了一个小程序 显示常见C C 编译器的编译器的预定义宏 一 心得 最直接的办法是逐个逐个的用 i
  • 第一次团队展示

    组长本次团队展示链接 拟作的团队项目描述 致力于让现代学生生活更加轻松 队员风采 宋奕 风格 工作时候认真 生活上快乐 擅长的技术 java dotnet c 编程兴趣 通过不断地完成项目来提升技术和能力 希望的软工角色 项管兼后端 一句话
  • python案例:用户画像分析

    目录 1 项目背景 数据 2 标记高潜用户 3 基于高潜用户信息进行分析 3 1 筛选高潜用户静态数据 3 2 高潜客户的客户等级分布 3 3 高潜用户的年龄段对比 3 4 根据df ac cate 和高潜用户id匹配出高潜用户的购买该商品
  • Barman离线安装(一步到位)

    软件版本信息 软件版本 CentOS Linux release 7 8 2003 Core Python 3 6 8 pip 9 0 3 from usr lib python3 6 site packages python 3 6 ps
  • @JSONField的用法

    主要用在JSON格式和JAVA对象之间进行传递的时候有很大的用处 由于JSON中的key与bean中的属性不能匹配 因此在转换过程中出现了部分属性为null的情况 如下 package test import com alibaba fas
  • 【DL】第7章 推荐表情符号

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • MATLAB笔记 sparse稀疏矩阵函数

    sparse 函数功能 生成稀疏矩阵 使用方法 S sparse A 将矩阵A转化为稀疏矩阵形式 即矩阵A中任何0元素被去除 非零元素及其下标组成矩阵S 如果A本身是稀疏的 sparse S 返回S S sparse i j s m n n
  • 【XGBoost】第 8 章:XGBoost 替代基础学习器

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • yolov3算法检测单类物体

    yolov3是目前目标检测类检测效果和检测速度最好的算法 原版的yolov3检测的物体种类众多 本文实在原有yolov3上将多累物体检测简化为单类物体检测 本文的原始代码基于github上copy的 源码下载地址为 https github
  • WebStorm开发插件

    目录 目录 1 图标插件 Atom Material Icons 2 Translation 3 彩色括号 Rainbow Brackets 4 高亮括号 HighlightBracketPair 5 代码缩略图 CodeGlance2 6
  • 关于Directly Mapping Texels to Pixels的例子

    原文 http msdn microsoft com en us library bb219690 28v vs 85 29 aspx 是关于在direct3d9中 对于屏幕空间中 将贴图映射到像素的问题 以下是pixel shader源代