红蓝眼镜支持的stero渲染(立体眼镜)
来源:互联网 发布:棋牌 数据库 编辑:程序博客网 时间:2024/04/30 08:24
似乎NVIDIA的显卡驱动就有这个选项。不知道怎么做的。今天试了试自己写的代码。看上去的效果还凑合,就是需要比较长的时间适应。
最近没时间,有时间写个详细的原理吧。
简单说的就是。用两个Camera,两个Camera平行或者看着同一个点。分别渲染到两个RenderTarget里。
然后把两个RT贴到显示器上。
左眼的摄像机干掉gb通道,右眼的干掉r通道。
混合的Shader看上去是这样的:
SamplerState DefaultSampler : register(s0);
Texture2D DiffuseTexture : register(t0);
Texture2D RightEyeTexture : register(t1);
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float4 Tex : TEXCOORD0;
float4 Tex1 : TEXCOORD1;
float4 Color : COLOR;
};
float4 COMMON_Texture(float4 _Color , float2 texCoord , SamplerState _sampler , Texture2D _texture )
{
return _texture.Sample(_sampler, texCoord.xy) * _Color ;
}
float4 CM_SteroLeft(float4 vDiffuse )
{
return float4(vDiffuse.x , 0 , 0 , vDiffuse.w);
}
float4 CM_SteroRight(float4 vDiffuse )
{
return float4(0 , vDiffuse.y , vDiffuse.z , vDiffuse.w);
}
float4 main( PS_INPUT input) : SV_Target
{
float4 vDiffuse = input.Color ;
float4 lColor = DiffuseTexture.Sample(DefaultSampler, input.Tex.xy);
lColor = CM_SteroLeft(lColor);
float4 rColor = RightEyeTexture.Sample(DefaultSampler, input.Tex.xy);
rColor = CM_SteroRight(rColor);
vDiffuse = lColor ;
vDiffuse.x += rColor.x;
vDiffuse.y += rColor.y;
vDiffuse.z += rColor.z;
return vDiffuse;
}
渲染的代码看上去是这样的。
void CEvolEnviroment::updateFrame(long passedTime)
{
m_pRenderApi->pushRenderView(m_LVBackBuffer);
updateFrame(passedTime , m_renderVisitor , m_pCamera );
m_pRenderApi->popRenderView();
m_pRenderApi->pushRenderView(m_RVBackBuffer);
updateFrame(passedTime , m_renderVisitor , m_pRightCamera );
m_pRenderApi->popRenderView();
//===================
m_pRenderApi->applyCamera(m_p2DCamera);
m_pRenderApi->identityMatrix(MATRIXMODE_World);
m_pRenderApi->setDepthStencilState(m_pStencilState);
int w = 0; int h = 0;
m_pRenderApi->getRenderViewSize(w , h );
xvec4 destRect(0,0,w,h);
xvec4 srcRect(0,0,256,256);
xColor_4f cl(1.0f,1.0f,1.0f,1.0f);
IRenderTarget* pRTLeft = dynamic_cast<IRenderTarget*>(m_LVBackBuffer->renderTarget(0));
IRenderTarget* pRTRight = dynamic_cast<IRenderTarget*>(m_RVBackBuffer->renderTarget(0));
IGpuProgram* pGpuProgram = m_hSteroProgram.getResource();
m_pRenderApi->setBlendState( m_pRenderApi->createBlendState(L"AlphaBlend") );
m_pRenderApi->setGpuProgram( pGpuProgram );
m_pRenderApi->setTexture(Texture_Diffuse , pRTLeft->toTexture() );
m_pRenderApi->setTexture(L"RightEyeTexture" , pRTRight->toTexture() );
m_pRenderApi->drawRectf( pRTLeft->toTexture() , &destRect.x, cl);
m_pRenderApi->swapBuffer();
}
- 红蓝眼镜支持的stero渲染(立体眼镜)
- Alternativa3D也可以!3D立体效果(需要红蓝眼镜)
- 立体眼镜的显示模式
- 立体眼镜
- direct 3d 渲染红蓝立体效果
- 红蓝3D的原理
- HTML之变色(蓝、绿、红)
- 让VLC播放器支持SDS 3D视频转换成interlaced 3D视频(红蓝3D)
- 里奥·梅西(Lionel Messi)-----球场上舞动的红蓝精灵
- 买了红的玩家还买了蓝
- CDOJ 1170 红与蓝 (几何+二分+枚举)
- 12[红+绿+蓝+Alpha]
- 红蓝按钮交替移动
- datatables 渲染标红
- 分析目前比较流行的几种3D立体眼镜
- 你的信用卡是什么颜色?由buyblue.org乱侃美国公司的红与蓝
- 我国电信运营商格局趋向:中移动的消失,蓝色系和红色系的抗衡
- bcb 从TColor对象中解析出红、绿、蓝的亮度
- 朝着梦想努力
- ASP.NET 2.0防止同一用户同时登陆
- December 10th Friday
- 基于xoops同步发送邮件和站内信代码
- extern "C"
- 红蓝眼镜支持的stero渲染(立体眼镜)
- hibernate 里用到的日志系统slf4j
- 应用MasterPage后页面等待数秒后自动转向的解决!
- Apprentice I -- Introduction to Apprentice
- Asp.net无刷新中文验证码调试成功,特分享给大家
- 找个女人
- 无刷新仿google波形扭曲彩色Asp.net验证码
- 大学计算机课程复习--计算机组成原理
- ASP.NET 2.0 中的客户端脚本