永发信息网

请教个GLSL多重纹理的问题

答案:1  悬赏:40  手机版
解决时间 2021-02-28 23:01
请教个GLSL多重纹理的问题
最佳答案
);
  编写Manifest文件
  如果你想要发布你的App到谷歌商店,在AndroidManifest.xml文件中添加如下语句:
    这会确保你的app只能被安装在支持OpenGL ES2.0的设备之上。现在OpenGL环境准备完毕。
  创建一个OpenGL平面
  定义顶点
  GLSurfaceView是不能直接显示一张照片的,照片首先应该被转化为纹理,应用在OpenGL square之上。在本次教程中,我将创建一个2D平面,并且具有4个顶点。为了简单,我将使用一个长方形,现在,创建一个新的类Square,用它来代表形状。
  public class Square {}  默认的OpenGL系统的坐标系中的原点是在中心,因此4个角的坐标可以表示为:
  左下角: (-1, -1) 右下角:(1, -1) 右上角:(1, 1) 左上角:(-1, 1)
  我们使用OpenGL绘制的所有的物体都应该是由三角形决定的,为了画一个方形,我们需要两个具有一条公共边的三角形,那意味着这些三角形的坐标应该是:
  triangle 1: (-1, -1), (1, -1), 和 (-1, 1) triangle 2: (1, -1), (-1, 1), 和 (1, 1)
  创建一个float数组来代表这些顶点:
  private float vertices[] = { -1f, -1f, 1f, -1f, -1f, 1f, 1f, 1f,};  为了在square上定位纹理,需要确定纹理的顶点坐标,创建另一个数组来表示纹理顶点的坐标:
  private float textureVertices[] = { 0f,1f, 1f,1f, 0f,0f, 1f,0f};  创建缓冲区
  这些坐标数组应该被转变为缓冲字符(byte buffer)在OpenGL可以使用之前,接下来进行定义:
  private FloatBuffer verticesBuffer;private FloatBuffer textureBuffer;  在initializeBuffers方法中去初始化这些缓冲区:使用ByteBuffer.allocateDirect来创建缓冲区,因为float是4个字节,那么我们需要的byte数组的长度应该为float的4倍。
  下面使用ByteBuffer.nativeOrder方法来定义在底层的本地平台上的byte的顺序。使用asFloatBuffer方法将ByteBuffer转化为FloatBuffer,在FloatBuffer被创建后,我们调用put方法来将float数组放入缓冲区,最后,调用position方法来保证我们是由缓冲区的开头进行读取。
  private void initializeBuffers(){ ByteBuffer buff = ByteBuffer.allocateDirect(vertices.length * 4); buff.order(ByteOrder.nativeOrder()); verticesBuffer = buff.asFloatBuffer(); verticesBuffer.put(vertices); verticesBuffer.position(0); buff = ByteBuffer.allocateDirect(textureVertices.length * 4); buff.order(ByteOrder.nativeOrder()); textureBuffer = buff.asFloatBuffer(); textureBuffer.put(textureVertices); textureBuffer.position(0);}  创建着色器
  着色器只不过是简单的运行在GPU中的每个单独的顶点的C程序,在本次教程中,我们使用两种着色器:顶点着色器和片段着色器。
  顶点着色器的代码:
  attribute vec4 aPosition; attribute vec2 aTexPosition; varying vec2 vTexPosition; void main() { gl_Position = aPosition; vTexPosition = aTexPosition; };  片段着色器的代码
  precision mediump float; uniform. sampler2D uTexture; varying vec2 vTexPosition; void main() { gl_FragColor = texture2D(uTexture, vTexPosition); };  如果你了解OpenGL,那么这段代码对你来说是熟悉的,如果你不能理解这段代码,你可以参考OpenGL documentation。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
儿童安全座椅下面有了卡扣怎么能把带子传过来
薯中宝烤红薯这个地址在什么地方,我要处理点
明日星双语幼儿园地址在哪,我要去那里办事
求问这个人是谁
在线求指导:用_________线可以形
女友和我分手差不多半个月了!我们聊天,今天
一个分手后老烦我的老男人.骚扰我.起诉用什么
珠穆朗玛峰上生物稀少,在那里生物的生存主要
东京猫猫的大结局奇修怎么样了?
喝酒后吃什么水果解酒?
四位同学在体育测试前,各准备了一些补充能量
千口甘怎么样
笨拙忍者有个任务需要买红色的衣服,钱不够怎
涟水县公安局闸口水上派出所我想知道这个在什
你们以为日本女人漂亮?AV上?切,那都是化了
推荐资讯
喜欢一个人是不是时时刻刻想见到他,想一直和
金钱白花蛇价格
关于库文件和动态链接库的问题
网络用语暴什么
卢克raid奖励给安图恩灵魂碎片么
tp-link路由器接光纤怎么设置
为什么我听大悲咒有种想哭的感觉。
2017年玉米收割机国二机器能享有农机补贴么?
2015移动宽带299包年是多少兆
福禄桐老北京布鞋NO.1098地址在什么地方,想
求一首歌,其中是这样唱的“刷啦啦啦啦啦……
美国明迪萨克斯怎么样,台湾代产的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?