美文网首页我是程序员;您好程先生;叫我序员就好了
通过引入观察者,实现OpenGL中的背景移动

通过引入观察者,实现OpenGL中的背景移动

作者: 鹏抟九万 | 来源:发表于2015-01-05 22:58 被阅读367次

前一阵子学图形学课程,需要用OpenGL写一个小程序,弄完之后觉得很有意思,期间为了实现一个效果,想了点东西,与大家共享。

首先简单介绍一下背景:OpenGL是一个开源的图形学库,用它可以很方便的实现图形学的算法,有兴趣的可以搜一搜,网上大把大把的资料。OpenGL的工作方式很像流水线,分为好几个阶段,每一个阶段的任务就是对前一阶段的结果进行进一步的处理。其中一个阶段的名称叫做fragmentshader,本栗子主要就在这一阶段实现的。

作为一个课内实验,它的要求如下:给一张图片作为背景,最基本要求是做出水波的效果,在此基础上添加自己想的特效。水波是基本要求,使用离散格子玻尔兹曼方法就能够实现了。课程里给了详细的资料,以后有机会了可以写一篇介绍一下它。实现水波之后,我想控制背景图片运动,一开始不是很顺利,后来想办法用上了线性代数的一点内容才顺利实现了。

事情是这样的:OpenGL将最终的结果,也就是我们最后看见的结果保存在gl_FragColor数组中,而将输入的背景图片保存在Texture数组中,gl_FragColor和Texture大小相同。我们要做的其实就是将二维数组Texture中的内容映射到gl_FragColor中。刚开始的时候我对它的理解是只能按位置一一映射,也就是这样的:

使用这样的映射,背景图片只能显示在固定的位置。后来开了窍,想到这个模型中少了一样重要的东西:人眼。最终应还有一个gl_FragColor到人眼的投影,所以模型应该是这个样子的:

gl_FragColor到人眼的投影是固定的,无法改变,但Texture到gl_FragColor的投影却不仅仅只能按位置映射。我们可以gl_FragColor和人眼的位置固定,组成一个坐标系A,将Texture想象成一个另一个坐标系B。通过控制A相对于B运动,B保持不动,人眼就可以通过gl_FragColor这扇窗户“看到”Texture里面内容的运动。

下面是一个仅包含平移运动的例子。a本来位于Texture中比较偏右的位置,但将坐标系A右移之后,a在gl_FragColor中的对应的位置a’反而偏左了。对人眼而言,这就产生了a“左移”的效果。现在的问题是,知道坐标系A相对于B的位置以及a在Texture,也就是坐标系B中的位置,怎么计算a’在坐标系A中的位置?这个用线性代数中的坐标变换就可以算出来。

相关文章

  • 通过引入观察者,实现OpenGL中的背景移动

    前一阵子学图形学课程,需要用OpenGL写一个小程序,弄完之后觉得很有意思,期间为了实现一个效果,想了点东西,与大...

  • OpenGL中的不同角度的移动

    在OpenGL中观察一个物体的移动,一般可以通过两种方式: 观察者不动,移动物体 物体不动,移动观察者 观察者不动...

  • 摄像机

    摄像机相当于观察者的眼睛,观察者的移动可以看到不同位置的场景,但OpenGL只能移动场景。OpenGL没有摄像机的...

  • RN的传值相关

    观察者模式 通过EventEmitter实现事件机制,实现简单的观察者模式。发送端、接受端同时需要引入Device...

  • OpenGL观察方式与矩阵

    目前在OpenGL中矩阵变换主要涉及两种方式: 观察者不动,物体移动。 物体不动,观察者动。 1、观察者不动,物体...

  • 三、OpenGL案例-正方形的移动

    案例:用OpenGL实现 通过上下左右键移动屏幕中的小方块1.OpenGL 环境配置2.执行流程 2.1 3.案例...

  • OpenGL 基础变化与矩阵堆栈

    OpenGL中涉及的基础变化: 视图变换 视图变换是应用到场景中的第一种变换,通过物体/观察者在Z轴上的移动,确定...

  • rxjava基本使用和常用操作符

    rxjava通过创建观察者和被观察者对象进行订阅实现线程切换 引入依赖 创建观察者对象 订阅和切换线程 creat...

  • 看了这篇文章你将彻底了解组合模式

    问题背景: 在上一篇观察者模式的文章中,IT公司老板通过观察者模式和程序员小强和小华实现了通信,便于通知他们加班,...

  • OpenGL—实现正方形在屏幕中移动

    案例分析——正方形块在屏幕中移动,通过键盘上下左右操作移动,使用OpenGL来实现。 1:main函数: 根据ma...

网友评论

    本文标题:通过引入观察者,实现OpenGL中的背景移动

    本文链接:https://www.haomeiwen.com/subject/hxetxttx.html