DirectX实现光照、纹理
来源:互联网 发布:酱紫的网络语言意思 编辑:程序博客网 时间:2024/05/23 00:02
关照的种类
环境光:经其他表面反射到达物体
漫射光:沿特定方向传播,到达某一表面后向各个方向均匀传播
镜面光:光线向同一方向反射(能模拟高亮点)
directx在通过如下函数设置光照:
光源的种类
点光源:有固定位置,并向各个方向发射
方向光:没有位置信息,所以光相互平行沿一特定方向传播
聚光灯:有位置信息,向手电筒一样发出锥形光,向特定方向传播
D3DXVECTOR3 dir(1.0f, -0.0f, 0.25f); D3DXCOLOR color = d3d::WHITE; D3DLIGHT9 light; ::ZeroMemory(&light, sizeof(light)); // 设置光照属性(方向光) light.Type = D3DLIGHT_DIRECTIONAL; light.Ambient = *color * 0.6f; light.Diffuse = *color; light.Specular = *color * 0.6f; light.Direction = *dir;Device->SetLight(0, &light);Device->LightEnable(0, true);Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);
现实世界中我们看到的物体颜色是由该物体反射的光的颜色决定的,如红色的物体吸收所有的非红色光,反射红光所以显示为红色,使用directx中函数SetMaterial可以设置物体材质。
顶点法线描述构成多边形的各个顶点的法线,通过该法线可以确定光线到达该表面的入射角。假设一个面由三个顶点
纹理
纹理数据可以从图像文件中读取,并将其映射到构成图形的三角元中。纹理三角形通常与屏幕三角形大小不一,可以采用纹理过滤器来缩放纹理三角形以适应屏幕。纹理过滤器directx中采用如下函数实现:
//创建纹理D3DXCreateTextureFromFile( Device, L"dx5_logo.bmp",//设置纹理 Device->SetTexture(0, Tex); //设置纹理过滤器 Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
融合技术
将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(可得到透明的效果)。首先绘制不需要进行融合的物体,将要进行融合按相对于摄像机的深度值进行排序,按从后往前的顺序逐个绘制。设Outpixel为融合后的像素值:
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
利用Alpha分量来设置物体的透明度,Alpha分量可以来自纹理的Alpha通道以及漫反射颜色值。
//Alpha分量来自漫反射颜色值Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE); Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); //Alpha分量来自纹理的Alpha通道 Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
- DirectX实现光照、纹理
- 用DirectX实现动态纹理
- DirectX实现球面纹理映射
- DirectX 3D_基础之光照 材质 顶点法线 光源 纹理映射 纹理坐标 多级纹理 纹理过滤
- DirectX 3D_实践之DirectX3D光照的实现
- DirectX 中的光照
- DirectX 光源、光照模型
- [OPENGL]纹理,材质,光照
- [OPENGL]纹理,材质,光照
- [OPENGL]纹理,材质,光照
- 渐变纹理模拟光照
- DirectX-渲染到纹理
- DirectX-渲染到纹理
- DirectX-渲染到纹理
- DirectX-渲染到纹理
- DirectX (9) 纹理映射
- DirectX纹理渲染原理
- DirectX 3D纹理
- VS2013中如何解决error C4996: 'fopen'问题及_CRT_SECURE_NO_WARNINGS
- 腾讯Bugly与极客学院再次联手,首推「iOS Crash 跟踪方法」视频教程!
- 【重构】存储过程
- php 配置memcache
- SQL/Oracle取出第 m 条到第 n 条记录的方法
- DirectX实现光照、纹理
- ubuntu安装flashplayer
- linux上从文件的最后向前查看
- JVM如何理解Java泛型类(转)
- MVC北京络捷斯特第三方物流系统技术解析(五)库内加工
- <Python基础教程>_第四章_总结
- Android开发中的MVC设计模式
- 对select表单控件进行美化
- Duang~ Android堆栈慘遭毁容?精神哥揭露毁容真相!