关于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的例子 的相关文章

随机推荐

  • 数字图像与视频处理 作业模板 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源代