- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个使用置换贴图实现 3D 效果的应用程序。在 Flash 中,可以使用位移过滤器来完成,如下所示:http://flashflex.com/pixel-bender-displacement-map-fakes-3d-effect-update/ 。很少有应用程序可以在 iPhone 上执行此操作,如下所示:www.youtube.com/watch?v=NvCHHUN8nnE
我想知道他们是如何做到这一点的。
我正在尝试使用此处描述的基于位移图的技术:www.cocos2d-iphone.org/forum/topic/11659,但动态完成似乎很慢。
任何指针都将受到高度赞赏。
谢谢
最佳答案
也许在 OpenGL ES 2.0 中实现置换贴图最简单的方法也可能是最快的。您需要两个纹理,一个包含颜色(常规纹理)和一个置换贴图。当正常采样常规纹理时,您的片段着色器将如下所示:
uniform sampler2D myTexture;
varying vec2 texcoords;
void main()
{
gl_FragColor = texture2D(myTexture, texcoords);
}
这是非常简单的事情。现在,要实现置换贴图,您需要:
uniform sampler2D myTexture;
uniform sampler2D myDisplacementMap;
varying vec2 texcoords;
void main()
{
vec2 displacement = 0.1 * texture2D(myDisplacementMap, texcoords).rg;
gl_FragColor = texture2D(myTexture, texcoords + displacement);
}
这也很简单。您还有另一个纹理,其中红色和绿色用作位移的 x 和 y。然而,通过这种方式,您只能获得静态的、与 View 无关的位移。为了获得真实的位移,需要generate texture tangents and bitangents其中包含对象空间中纹理轴的方向(一个棘手的概念,请阅读文章)。拥有它们后,您所需要的只是对象空间眼睛位置(可以通过将顶点位置乘以顶点着色器中的模型 View 投影逆来计算),并且通过将其投影到切线/双切线向量上,您可以按顺序调制位移依赖于 View :
attribute vec3 position, tangent, bitangent;
attribute vec2 texcoord;
varying vec2 texcoords;
varying vec3 eye_dir, tan, bitan;
uniform matrix4f modelviewProjectionMatrix;
uniform matrix4f modelviewProjectionMatrixInverse;
void main()
{
gl_Position = modelviewProjectionMatrix * vec4(position, 1.0);
tan = tangent;
bitan = bitangent;
texcoords = texcoord;
}
(那是顶点着色器),这里是片段着色器:
uniform sampler2D myTexture;
uniform sampler2D myDisplacementMap;
varying vec2 texcoords;
varying vec3 eye_dir, tan, bitan;
void main()
{
vec2 eyen = normalize(eye_dir);
vec2 modulation = vec2(dot(eyen, normalize(tan)), dot(eyen, normalize(bitan)));
vec2 displacement = 0.1 * texture2D(myDisplacementMap, texcoords).rg * modulation;
gl_FragColor = texture2D(myTexture, texcoords + displacement);
}
这应该可以解决问题......(注意我是从头开始写的,所以如果有任何错误,请随时发表评论)
编辑:并且存在错误,我将参数顺序交换为texture2D(采样器先行)。
关于iphone - iPhone 上基于位移贴图的 3D 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768719/
如果此答案为 Kotlin,我想转换代码:https://stackoverflow.com/a/5402769/2735398 我将其粘贴到 Intellij 中: private int deco
对于这种转变: System.out.println(0b10000000_00000000_00000000_00000001>>>32); 我得到这个输出值: -2147483647 对吗? 最佳
如果没有大量工作,我想要的可能是不可能的,但也许有人有解决方案。我有一个像下面这样的图(这当然是一个过于简单的例子),其中我的刻度标签彼此非常接近: dd <- data.frame(x=1:4, y
试过这个代码on Go playground : package main import ( "fmt" ) func main() { log2Dim := uint32(9)
我希望在用户滚动时获取 UIScrollView 的位移,每次滚动时只需要位移。使用这个方法 -(void)scrollViewWillEndDragging:(UIScrollView *)scro
我正在检查我在装有 iOs 5.1 的 Ipad 中的应用程序当我点击 textarea 时,光标会跳到书写线上方两行。虽然焦点位于正确的位置,但光标的视觉外观出现在焦点线上方两行。对此有任何建议。
你如何获得像 -10 这样的数字?从这些移位练习题中? 据我了解X*32可以写成 x> 1 = 0001 0111 >> 1 = 000 1011 = 11 //right bit-shift by
我正在查看适用于 Linux 的开源 AMD GPU 驱动程序。我注意到一些我以前没有见过的东西,我想知道目的。在sid.h文件的第1441行,有一系列的定义是整数被左移0位。这不就是对原始整数进行操
这个网站 localhotchat.com 有文字从红色栏流出。我试过调整它,但它似乎并没有消失。 主页(和内部)上的 14pt 文本片段应该在 red_colored_strip 内,但它不是,并且
问题#1 在 Java 中,移位是否比使用单个语句将 移位相同数的代价高出数倍? 例如,是 int x = 5; x = x << 16; 比快 int x = 5; for (int i=0; i<
我有三个 Div,周围的 Div 是“MainDiv”,里面的 Top Div 是“UpperDiv”下一个是“FooterDiv”。 在 Mozilla 中一切正常,但在 Chrome 中“Foot
所以,我正在阅读一本关于 Go 的书(Ivo Balbaert 的 The Way to Go),其中有一个代码示例: const hardEight = (1 > 97 因为我没有在这台机器上安装
Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。 下面就讲一下Tweene Animations。 主要类:
我有 UINavigationItem,我想向它添加 UISearchBar。我是这样做的: let searchBar = UISearchBar(frame: CGRectMake(0, 0, s
本文实例讲述了Android动画之渐变动画(Tween Animation)。分享给大家供大家参考,具体如下: Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的
我在 C# 中使用 openCV 库中的 Lucas Kanade 光流算法;有一系列帧,我想在每两个帧中找出什么是光流并将其显示在图片框中。 我可以从以下函数中获取 velX 和 velY: Emg
我是一名优秀的程序员,十分优秀!