首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >翻译不好- Android - OpenGL ES 2

翻译不好- Android - OpenGL ES 2
EN

Stack Overflow用户
提问于 2015-06-29 17:40:23
回答 1查看 87关注 0票数 0

我有这样的代码,可以移动我的圆圈(正方形):

代码语言:javascript
运行
复制
float[] scratch = new float[16];

float[] move = new float[16];
Matrix.setIdentityM(move, 0);
Matrix.translateM(move, 0, 100, 100, 0);

Matrix.multiplyMM(scratch, 0, projectionMatrix, 0, move, 0);

mCircle.draw(scratch); 

projectionMatrix是摄像机:

代码语言:javascript
运行
复制
Matrix.orthoM(projectionMatrix, 0, 0, width, height, 0, -1f, 1f);

但是,当我执行代码时,我得到了以下内容:图像

我遵循了Android开发者的代码。

代码语言:javascript
运行
复制
precision highp float;

uniform float uRadius;
vec2 center = vec2(uRadius, uRadius);
vec2 coord = vec2(gl_FragCoord.x, 1080. - gl_FragCoord.y);
vec2 position = coord - center;
uniform vec4 uColor;

void main()
{
    if (length(position) > uRadius) {
    discard;
    }

    gl_FragColor = uColor;
}
--------------------------------
uniform mat4 uMatrix;

attribute vec4 aPosition;

void main()
{
    gl_Position = uMatrix * aPosition;
}

我的主回路:

代码语言:javascript
运行
复制
public void onDrawFrame(GL10 unused) {
    // Draw background color
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

    float[] scratch = new float[16];

    float[] move = new float[16];
    Matrix.setIdentityM(move, 0);
    Matrix.translateM(move, 0, 50, 50, 0);

    Matrix.multiplyMM(scratch, 0, projectionMatrix, 0, move, 0);

    mCircle.draw(scratch);
}

而圆绘制功能是:

代码语言:javascript
运行
复制
public void draw(float[] projectionMatrix) {
    GLES20.glUseProgram(mProgram);

    // get handle to vertex shader's vPosition member
    int mPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");

    // Enable a handle to the triangle vertices
    GLES20.glEnableVertexAttribArray(mPositionHandle);

    // Prepare the triangle coordinate data
    GLES20.glVertexAttribPointer(
            mPositionHandle, COORDS_PER_VERTEX,
            GLES20.GL_FLOAT, false,
            vertexStride, vertexBuffer);

    // get handle to fragment shader's vColor member
    int mColorHandle = GLES20.glGetUniformLocation(mProgram, "uColor");

    // Set color for drawing the triangle
    GLES20.glUniform4fv(mColorHandle, 1, mColor, 0);

    int radiusHandle = GLES20.glGetUniformLocation(mProgram, "uRadius");
    MyGLRenderer.checkGlError("glGetUniformLocation");
    GLES20.glUniform1f(radiusHandle, mRadius);

    // get handle to shape's transformation matrix
    int mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMatrix");
    MyGLRenderer.checkGlError("glGetUniformLocation");

    // Apply the projection and view transformation
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, projectionMatrix, 0);
    MyGLRenderer.checkGlError("glUniformMatrix4fv");

    // Draw the square
    GLES20.glDrawElements(
            GLES20.GL_TRIANGLES, drawOrder.length,
            GLES20.GL_UNSIGNED_SHORT, drawListBuffer);

    // Disable vertex array
    GLES20.glDisableVertexAttribArray(mPositionHandle);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 14:19:37

几个小时后,我终于在片段着色器中找到了逻辑错误:圆心保持不变,现在我又为偏移/位置添加了2套制服,它就开始工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31122123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档