在openGl android(Wear)中绘制基于图像的纹理
Posted
技术标签:
【中文标题】在openGl android(Wear)中绘制基于图像的纹理【英文标题】:Draw an Image based texture in openGl android(Wear) 【发布时间】:2016-01-26 05:26:53 【问题描述】:我正在使用 android 中的 opengl 绘制基于图像的纹理,但图像仅部分绘制如下所示
我的编码
@Override
public void onGlContextCreated()
super.onGlContextCreated();
shaders = new ShadersDla();
float[] vts = // x, y, s, t.
-1, 1, 1, 1, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0
;
// AllocateDirect prevents the GC moving this memory.
vtBuffer = ByteBuffer.allocateDirect(vts.length * 4)
.order(ByteOrder.nativeOrder())
.asFloatBuffer();
vtBuffer.put(vts);
@Override
public void onGlSurfaceCreated(int width, int height)
super.onGlSurfaceCreated(width, height);
float aspectRatio = (float) width / height;
float dist = .001f;
Matrix.frustumM(projectionMatrix, 0,
-aspectRatio * dist, aspectRatio * dist, // Left, right.
-dist, dist, // Bottom, top.
dist, 100); // Near, far.
makeTexture();
着色器
private static final String VERTEX_SHADER =
// Pass in the modelview matrix as a constant.
"uniform mat4 u_mvpMatrix; \n"
// Pass in the position and texture coordinates per vertex.
+ "attribute vec4 a_position; \n"
+ "attribute vec2 a_texCoord; \n"
// Varyings are sent on to the fragment shader.
+ "varying vec2 v_texCoord; \n"
+ "void main() \n"
// Transform the vertex coordinate into clip coordinates.
+ " gl_Position = u_mvpMatrix * a_position; \n"
// Pass through the texture coordinate.
+ " v_texCoord = a_texCoord; \n"
+ " \n";
需要一些帮助来做这件事。请指导我一个简单的方法,我是 android 和 opengl 的新手......
【问题讨论】:
那么你有多少个顶点?您是否在查看具有四边形的 OpenGL 示例与具有三角形的 OpenGL ES? 前两个顶点具有相同的 x/y 坐标。纹理坐标看起来也很可疑,两个顶点(第一个和第三个)具有相同的纹理坐标。 可以给我一些样本或任何对纹理坐标有更多解释的链接,作为 android openGl 的新手 这是一个老问题,在解释纹理坐标时得到了高票:***.com/questions/5532595/…。 得到了答案,我改变了纹理坐标,谢谢@Reto Koradi 【参考方案1】:改变纹理坐标为
-1.0f, 1.0f, 0,0 ,
1.0f, 1.0f, 1,0,
-1.0f,-1.0f, 0,1 ,
1.0f, -1.0f, 1,1
【讨论】:
以上是关于在openGl android(Wear)中绘制基于图像的纹理的主要内容,如果未能解决你的问题,请参考以下文章
Android - 使用 openGL ES 绘制 3D 然后 2D
在 Android(和 iOS)上使用 Qt 使用 openGL 绘制具有 3d 效果的 2d 线