显示屏映射是什么意思(映射技术 )

DaoYiKang 1 0

大家好,今天小编关注到一个比较有意思的话题,就是关于映射技术的问题,于是小编就整理了3个相关介绍映射技术的解答,让我们一起看看吧【显示屏映射是什么意思(映射技术 )】。

文章目录:

  1. 显示屏映射是什么意思
  2. 什么叫数据映射技术??急急急
  3. 环境映射(EnvironmentMapping)的立方映射

一、显示屏映射是什么意思

显示屏映射是什么意思(映射技术 )

显示屏映射指的是将计算机中的数据映射到屏幕上进行显示的技术。计算机中储存的数据是按照二进制编码的,而我们人类无法直观地理解这些编码。因此,我们需要将这些编码转化为可以被人们理解的图像。这就需要使用显示屏映射技术,将计算机中的二进制数据转换成为图像数据,再通过显示屏进行显示。

显示屏映射技术不仅可以将二进制数据转化为图像显示,还可以根据不同的显示需求,进行灵活的调整。例如,可以对图像进行缩放、旋转、颜色调整等操作,以满足不同场景下的显示需求。此外,在图像传输过程中,也可以通过映射技术将图像进行压缩和解压,提高传输效率。

显示屏映射技术广泛应用于各种场景,包括娱乐、医疗、教育等领域。例如,在娱乐场所,我们常常可以看到影院、游戏厅等场馆使用大屏幕进行图像显示,而这些大屏幕的显示就需要借助显示屏映射技术。另外,在医疗领域,医生可以通过图像显示屏,观察X光片、CT片等医学影像,更精准地做出诊断结果。显示屏映射技术在不同领域的应用,为我们的生活、学习和工作带来很大便利。

二、什么叫数据映射技术??急急急

数据映射(Data Mapping) :给定两个数据模型,在模型之间建立起数据元素的对应关系,将这一过程称为数据映射。数据映射是很多数据集成任务的第一步,例如:数据迁移(data migration)、数据清洗(data cleaning)、数据集成、语义网构造、p2p信息系统。

数据映射的方式有两种:手工编码(Hand-coded)和可视化操作(Graphical manual)。手工编码是直接用类似XSLT,JAVA,C++这样的编程语言定义数据对应关系。可视化操作通常支持用户在数据项之间画一条线以定义数据项之间的对应关系。有些支持可视化操作的工具可以自动建立这种对应关系。这种自动建立的对应关系一般要求数据项具有相同的名称。无论采用手工方式操作还是自动建立关系,最终都需要工具自动将图形表示的对应关系转化成XSLT,JAVA,C++这样的可执行程序。

目前数据映射领域存在两个前沿的研究方向:

数据驱动的映射:利用统计方法分析源数据库和目标数据库的实际数据,挖掘出数据对应关系。这种方法可以发现数据之间的“substring”,“concatenations”,“arithmetic”,“case statements”等

转换逻辑。这种方法还可以用于发现异常情况,也就是不符合已定义转换逻辑的数据。

三、环境映射(EnvironmentMapping)的立方映射

立方环境映射(Cubic Environment Mapping)

立方环境映射是现在常用环境映射技术。我们知道游戏场景中经常通过在一个正方体上的六个面贴上前后左右上下六个贴图来模拟天空、宇宙等环境,称为Cubemap有的引擎中成为Skybox,立方环境映射的原理就是在游戏中所需要产生映射的物体的位置动态生成一套Cubemap,再对Cubemap进行采样生成物体表面应该反射出的周遭环境。

具体的采样方法是利用物体表面的法线来计算的,我们假设动态生成的Cubemap的正方体刚刚好包围住需要产生环境映射效果的物体,我们从摄像机也就是观察点出发同物体表面产生出的反射向量(同Phong光照模型的镜面反射中的反射向量是相同的,计算方法也相同R=2(E*N)*N-E),这个反射向量同正方体相交于一点,得到了这个点的所在面及UV坐标,采样,得到的颜色值就是我们应当看到。

立方环境映射的原理就是这样的,但是这些计算步骤并不需要我们在使用的时候过多考虑,因为从Cubemap的生成,到采样的计算,图形API已经都为我们封装好了,下面记录了在DirectX中简单的API调用流程,权作笔记。

首先需要声明Cubemap的贴图

LPDIRECT3DCUBETEXTURE9 m_pCubeMap = NULL;

然后创建Cubemap贴图

pd3dDevice->CreateCubeTexture(256,1,D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT , &m_pCubeMap,NULL );

注意这里用到了D3DUSAGE_RENDERTARGET,也就是说我们的Cubemap需要靠RenderTarget绘制。

如果需要的话,深度缓冲也可以考虑在内。

IDirect3DSurface9* g_pDepthCube = NULL;

DXUTDeviceSettings d3dSettings = DXUTGetDeviceSettings();

pd3dDevice->CreateDepthStencilSurface( 256, 256, d3dSettings.pp.AutoDepthStencilFormat,D3DMULTISAMPLE_NONE,0,TRUE,&g_pDepthCube, NULL );

绘制函数

void RenderSceneIntoCubeMap( IDirect3DDevice9 *pd3dDevice, double fTime )

{

HRESULT hr;

// Cubemap使用的投影矩阵

D3DXMATRIXA16 mProj;

D3DXMatrixPerspectiveFovLH( &mProj, D3DX_PI * 0.5f, 1.0f, 0.01f, 100.0f );

LPDIRECT3DSURFACE9 pRTOld = NULL;

V( pd3dDevice->GetRenderTarget( 0, &pRTOld ) );

LPDIRECT3DSURFACE9 pDSOld = NULL;

//if( SUCCEEDED( pd3dDevice->GetDepthStencilSurface( &pDSOld ) ) )

//{

// // 如果使用深度缓冲

// V( pd3dDevice->SetDepthStencilSurface( g_pDepthCube ) );

//}

for( int nFace = 0; nFace < 6; ++nFace ) //依次完成Cubemap中的六个面的绘制

{

LPDIRECT3DSURFACE9 pSurf;

V( m_pCubeMap->GetCubeMapSurface( (D3DCUBEMAP_FACES)nFace, 0, &pSurf ) );

V( pd3dDevice->SetRenderTarget( 0, pSurf ) );

SAFE_RELEASE( pSurf );

D3DXMATRIXA16 mView = DXUTGetCubeMapViewMatrix( nFace );

V( pd3dDevice->Clear( 0L, NULL, D3DCLEAR_ZBUFFER,0x000000ff, 1.0f, 0L ) );

pd3dDevice->SetTransform(D3DTS_VIEW,&mView);

pd3dDevice->SetTransform(D3DTS_PROJECTION,&mProj);

if( SUCCEEDED( pd3dDevice->BeginScene() ) )

{

//在这里绘制环境

pd3dDevice->EndScene();

}

}

// Restore depth-stencil buffer and render target

/*if( pDSOld )//如果使用深度缓冲

{

V( pd3dDevice->SetDepthStencilSurface( pDSOld ) );

SAFE_RELEASE( pDSOld );

}*/

V( pd3dDevice->SetRenderTarget( 0, pRTOld ) );

SAFE_RELEASE( pRTOld );

}

这个绘制函数

一般在每一帧绘制场景的最开始执行,先将场景内的物体绘制在Cubemap上。

这样我们就有了可用的Cubemap,之后我们绘制需要采用环境映射的物体时,将这个Cubemap作为Texture传入Shader内,另外还需传入观察向量用于计算反射向量。

在Shader中,顶点着色器中完成反射向量的计算:

float3 vecReflect = normalize(reflect(vecEye, InNormal));

像素着色器负责采样,HLSL中已经有现成的函数可以使用,我们只需将计算所得反射向量传入即可。

Output.RGBColor = texCUBE(EnvironmentSampler, In.CubeTexcoord);

采样器EnvironmentSampler并不需要特别的设置。

texture EnvironmentMap;

samplerCUBE EnvironmentSampler = sampler_state

{

Texture = (EnvironmentMap);

MipFilter = LINEAR;

MinFilter = LINEAR;

MagFilter = LINEAR;

};

到此,以上就是【显示屏映射是什么意思(映射技术 )】小编对于映射技术的问题就介绍到这了,希望介绍关于映射技术的3点解答对大家有用。