似乎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渲染(立体眼镜)相关推荐

  1. 制作立体图像(上):红蓝眼镜原理

    立体眼镜分为色差式.偏光式等几种 其中色差式还可以再分为红-蓝.红-绿.红-青等,是最简单,但也是效果最差的一种 这里仅介绍常见的红蓝立体图像 这种方式仅需要一块红蓝眼镜,淘宝上买个很便宜的就可以了, ...

  2. Alternativa3D也可以!3D立体效果(需要红蓝眼镜)

    看flare3D之黄河星球demo,提起我的兴趣.故我就用我较熟悉之Alternativa3D实现一下.就用这个方法实现了.贴代码瞧瞧 package {import alternativa.engi ...

  3. 如何制作红蓝3d电影(详细教程)

    自20世纪初以来,电影制作人一直试图通过制作3D电影来利用我们的双眼.现在,由于大量相对实惠的3D电视,你可以享受电影院以外的额外空间 - 你自己拍摄的视频. 对于大预算的电影,电影摄影师使用两个相连 ...

  4. 用红蓝3D眼镜在PC上观看3D影片效果并不好

    如题,最近试了一下买了副红蓝分色3D眼镜.结果戴上以后放3D蓝光盘只有在画面的静态部分才能正确融像,画面上的物体一动起来马上两个像就不能正确融合,而是红色部分和蓝色部分直接混在一起闪来闪去.网上找了一 ...

  5. 【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。

    iz3d是一款能将普通3D游戏转换为红蓝3D游戏的软件.基本上支持所有游戏,或许没用过的人会认为这只是类似于播放器中的一个小功能,将平面图形做成"伪3D"红蓝效果. 实际上不是的, ...

  6. 红蓝对抗 linux内网渗透

    目录 一.前言 二.提权 2.1 利用内核漏洞进行提权 2.2 利用文件权限配置不当进行提权 2.3 利用SUID程序进行提权 三.隧道 3.1 SSH 3.2 nc/ncat 3.3 portmap ...

  7. 【网络安全】红蓝攻防:shellcode的分析

    前言 在做红蓝攻防时,常常要用到cs.msf等工具,使用工具生成shellcode或可执行程序,那么小小的shellcode为何能做这么多事情,拿到shellcode后又该怎么分析.希望这篇文章能给大 ...

  8. c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战

    作者有话说:上次推荐的森林冰火人很多小伙伴后台找我要链接,或者搜索不到:首先声明下森林冰火人.同桌大作战都不是辣椒人游戏工作室研发的,小编也是微信小游戏双人栏目下搜索到的,如果想要玩双人小游戏的可以打 ...

  9. PHP+jQuery+MySql实现红蓝投票功能

    这是一个非常实用的投票实例,应用在双方观点对抗投票场景.用户可以选择支持代表自己观点的一方进行投票,本文以红蓝双方投票为例,通过前后台交互,直观展示红蓝双方投票数和所占比例,应用非常广泛. 查看演示 ...

最新文章

  1. LINUX TOP,不是这样玩地!!!
  2. AI可以在游戏里称霸,但是解决现实问题太难了
  3. webserver介绍与实现(利用各模块的封装实现)
  4. PHP模板引擎smarty详细介绍
  5. 如何让Win7不再弹出升级Win10的提醒窗口
  6. innodb启动失败无法重启的处理方法
  7. Linux内核CPU负载均衡机制
  8. 如何在H264数据中获取PTS?
  9. xenapp6.5 浏览器首次登录插件下载问题解决
  10. R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程
  11. NPDP是什么考试?产品经理必知
  12. 复联3观影指南丨漫威宇宙里的AI黑科技
  13. 七夕给男朋友送什么礼物好、七夕男朋友礼物清单
  14. PHP全栈学习笔记7
  15. 误删除与误格式化的挽回(图)
  16. GameObject.Find()能否查找隐藏属性的游戏对象?
  17. Ghost超级应用技巧集锦
  18. 机器学习(1):绪论
  19. 什么叫h5项目_对移动端h5项目的一点总结
  20. 如何激励你的内容团队产出更好的创意

热门文章

  1. Vue3全局挂载方法
  2. 怎样在iPhone或iPad上的“查找我”中设置AirTag?
  3. swift学习五天 项目实战-知乎日报之网络交互NSURLConnection
  4. ABLIC推出“S-5701 B系列”TMR传感器IC,不但可以解决磁簧开关的局限性,而且具有耐用、小巧和寿命长的特点
  5. 区块链:Grid+ 电力市场 101
  6. 旅游去哪儿--大数据生成旅游的热点图
  7. 读《Fusion of Partition Local Binary Patterns and Convolutional Neural Networks for Dorsal Hand Vein 》
  8. PPT配色中国风——长安十二时辰
  9. NovelAI:AI作画二次元、续写故事,画师要失业?
  10. c语言 高频字母统计,C语言高频词 - 在线打字测试(dazi.kukuw.com)