Directx11教程(46) alpha blend(3)
原文:Directx11教程(46) alpha blend(3)
现在我们尝试改变box的贴图,使用一张带alpha的dds文件wirefence.dds,
用directx texture tool打开文件界面如下:

实际上,这幅图中一些像素有alpha值,一些像素alpha值为0,我们点击View-alpha channel only,可以看到下面的图,其中黑色部分的alpha值为0:

现在我们把这幅图贴到box上,程序运行效果如下:

我们在lighttex.ps中增加以下代码,需要注意clip函数的使用。
float3 N = normalize(input.worldnormal);
float4 textureColor = shaderTexture.Sample(SampleType, input.tex);
//从纹理图中得到alpha值
float alpha = shaderTexture.Sample(SampleType, input.tex).a;
//如果alpha小于0.25就放弃掉当前的像素
clip(alpha-0.25);
程序执行后的效果如下:

程序运行结果还不错,但是对于篱笆box,它的背面被剔除掉了,下面我们尝试在D3DClass中增加关闭、打开cullmode的函数,在渲染box时候,禁止背面剔除。
void D3DClass::EnableBackCullMode(bool b)
{
D3D11_RASTERIZER_DESC rasterDesc;
HRESULT result;
// 设置光栅化描述,指定多边形如何被渲染.
rasterDesc.AntialiasedLineEnable = false;
if(b)
rasterDesc.CullMode = D3D11_CULL_BACK;
else
rasterDesc.CullMode = D3D11_CULL_NONE;
rasterDesc.DepthBias = 0;
rasterDesc.DepthBiasClamp = 0.0f;
rasterDesc.DepthClipEnable = true;
rasterDesc.FillMode = D3D11_FILL_SOLID; //D3D11_FILL_SOLID
rasterDesc.FrontCounterClockwise = false;
rasterDesc.MultisampleEnable = false;
rasterDesc.ScissorEnable = false;
rasterDesc.SlopeScaledDepthBias = 0.0f;
// 创建光栅化状态
result = m_device->CreateRasterizerState(&rasterDesc, &m_rasterState);
if(FAILED(result))
{
HR(result);
return;
}
//设置光栅化状态,使其生效
m_deviceContext->RSSetState(m_rasterState);
}
在GraphicsClass中渲染box时候,我们增加下面的代码:
//渲染box时候关掉背面剔除
m_D3D->EnableBackCullMode(false);
//用light shader渲染
result = m_LightTexShader->Render(m_D3D->GetDeviceContext(), m_CubeModel->GetIndexCount(), worldMatrix3, viewMatrix, projectionMatrix,
light, material, camera,m_TexManager->createTex(m_D3D->GetDevice(),string("wirefence.dds")));
m_D3D->EnableBackCullMode(true);
//打开背面剔除
m_D3D->EnableBackCullMode(true);
程序最终的运行效果如下:

完整的代码请参考:
工程文件myTutorialD3D11_41
代码下载:
http://files.cnblogs.com/mikewolf2002/d3d1139-49.zip
Directx11教程(46) alpha blend(3)的更多相关文章
- Directx11教程(47) alpha blend(4)-雾的实现
原文:Directx11教程(47) alpha blend(4)-雾的实现 除了用来实现透明效果之外,我们还可以用alpha blend来实现雾(fog)的效果.通过逐渐清晰的雾气效果,可 ...
- Directx11教程(45) alpha blend(2)
原文:Directx11教程(45) alpha blend(2) 在myTutorialD3D11_40中,我们在场景中再添加一个box,并把box放在水里,实现半透明的效果.如下图所示: ...
- Directx11教程(44) alpha blend(1)
原文:Directx11教程(44) alpha blend(1) 我们知道,D3D11中按Frame来渲染物体,每个Frame中又可能包含若干个primitive,如下面的示意图所示: ...
- Directx11教程(66) D3D11屏幕文本输出(1)
原文:Directx11教程(66) D3D11屏幕文本输出(1) 在D3D10中,通过ID3DX10Font接口对象,我们可以方便的在屏幕上输出文字信息,一个DrawText函数就能解决所 ...
- Directx11教程(49) stencil的应用-镜面反射
原文:Directx11教程(49) stencil的应用-镜面反射 本教程中,我们利用stencil来实现一个镜面反射效果. 1.首先我们要在D3DClass中增加几个成员变量及函数. I ...
- Directx11教程(18) D3D11管线(7)
原文:Directx11教程(18) D3D11管线(7) 光栅化阶段(RS)之后,将进入PS/OM阶段. 参考外文资料:http://fgiesen.wordpress.com/2011/07/01 ...
- Directx11教程(57) 环境映射
原文:Directx11教程(57) 环境映射 建好skydome后,如果我们想让其中的某个物体,比如那个球体来映射出周围环境的蓝天白云(不包括自己附近的物体),该怎么做呢?此时可以把这个 ...
- Directx11教程(54) 简单的基于GS的billboard实现
原文:Directx11教程(54) 简单的基于GS的billboard实现 本章我们用一个billboard的实现来学习D3D11中的GS. 在VS shader中,我们输入的是顶点 ...
- Directx11教程(51) 简单的billboard
原文:Directx11教程(51) 简单的billboard billboard称作公告板,通常用一个quad(四边形)表示[有的billboard用两个正交的quad表示],它的特点 ...
随机推荐
- SAS信用评分之逻辑回归的变量选择
SAS信用评分之逻辑回归的变量选择 关于woe的转化,这一部在之前的这篇文章:sas批量输出变量woe值中已经写了,woe也只是简单的公式转化而已,所以在这系列中就不细究了哈.这次的文章我想来讲逻辑回 ...
- opencv读取的彩色图像,数据是GBR而不是RGB
开发久了,容易想当然 直到数据怎么也不对的时候,才想起来查一下手册 三个像素,当然没有这么大的像素,这是放大之后的 数据输出
- C#通过鼠标点击panel移动来控制无边框窗体移动
Point point = , -); bool mouseDown = false; private void panelEx5_MouseDown(object sender, MouseEven ...
- KOA 学习(五)koa常用库koa-swig
koa-swig 引入库app.js var render = require('koa-swig'); 模版设置app.js app.context.render = co.wrap(render( ...
- log4j 配置文件参数说明
log4j 框架配置文件常用参数说明 %d 时间(-- ::,) %-5p 日志级别(INFO/DEBUG) %10c 包名(com.xxx.xxx.business.logging) %M 执行的方 ...
- MAC+iTerm定制目录显示颜色和提示符
知道该如何定制ls时各种类型文件(unix下所有的都是file..)的颜色了. 很简单,就是在.bash_profile下加了三行. export CLICOLOR=1 export LSCOLORS ...
- Web前端开发工程师需要掌握哪些核心技能?
Web前端开发所涉及的内容主要包括W3C标准中的结构.行为和表现,那么这三项中我们需要掌握的核心技能是什么呢? 1.开发语言 HTML发展历史有二十多年,历经多次版本更新,HTML5和CSS3的出现又 ...
- spring boot自动配置之jdbc(转)
1.DataSource配置 1.1 默认配置application.xml spring.datasource.url=jdbc:mysql://localhost/test spring.data ...
- zk运维注意事项
1 连接数容易占满 2 watches数 (应用上的比较多建议做个自动监控,告警)
- 2019-3-1-win10-uwp-发布旁加载自动更新
title author date CreateTime categories win10 uwp 发布旁加载自动更新 lindexi 2019-03-01 09:40:27 +0800 2019-0 ...