opengles 渲染摄像头为圆形?

2016-03-30 15:47:18 +08:00
 notedit
想要把 camera preview 渲染为圆形(不是用一个 mask 做圆形),不过对 shader 语言不熟悉,不知道有没有对 opengles 和 shader 了解的朋友指点一下。
1714 次点击
所在节点    问与答
10 条回复
acros
2016-03-30 16:07:53 +08:00
没看懂你的要求...是指把摄像机看到的画面渲染到球面上? (就像一个镜面球反射出环境?)
acros
2016-03-30 16:13:35 +08:00
搜一下 cubemap 看看是不是你说的那种~
notedit
2016-03-30 17:14:37 +08:00
@acros 类似 不用球型 圆形就好
notedit
2016-03-30 17:15:32 +08:00
@acros 简单来说就是圆形摄像头
acros
2016-03-30 17:28:23 +08:00
@notedit 就是这个“圆形”不明白啊
shadertoy 上有些效果,你可以参考下。

https://www.shadertoy.com/results?query=fisheye
notedit
2016-03-30 17:35:31 +08:00
@acros 在 android 上面 摄像头 camera preview 是有固定的几种比例,没法改

如果我要一个方形的 camera preview 我需要自己拿到每一帧的数据 用 opengl 处理。

比如 我把 camera preview 显示成正方形需要的 shader 如下:

```

private final String vertexShaderCode =
"attribute vec4 vPosition;" +
"attribute vec2 inputTextureCoordinate;" +
"varying vec2 textureCoordinate;" +
"void main()" +
"{" +
"gl_Position = vPosition;" +
"textureCoordinate = inputTextureCoordinate;" +
"}";

private final String fragmentShaderCode =
"#extension GL_OES_EGL_image_external : require\n" +
"precision mediump float;" +
"varying vec2 textureCoordinate;\n" +
"uniform samplerExternalOES s_texture;\n" +
"void main() {" +
" gl_FragColor = texture2D( s_texture, textureCoordinate );\n" +
"}";



```


我现在想把摄像头的 preview 渲染成圆形 不知道这里的 shader 怎么写
notedit
2016-03-30 17:39:13 +08:00
再通俗一点是我想把 camera preview 裁剪成圆形 显示
acros
2016-03-30 17:44:02 +08:00
呃··· 如果只是要裁剪成圆,直接在 Shader 里面指定一个 p = vec2(rx,ry)作为圆形, Ra 半径,当前 textureCoordinate 和 vec2(rx,ry)的距离平方和半径平方比较下不就得到结果了?

if(lengthSqure(p,inputTextureCoordinate) <= Ra * Ra){
gl_FragColor = texture2D( s_texture, textureCoordinate )
}else{
gl_FragColor = vec4(0,0,0,1);
}
notedit
2016-03-30 17:59:08 +08:00
@acros 好 我试一下

方便加个联系方式么 我的微信是我的 用户名
acros
2016-03-30 18:05:09 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX