2016-08-22 13 views
2

画像に示すようにポリゴンを描き、色で塗りつぶしたいと思います。 Fill PolygonSimple polygonOpenGL-es 2.0を使用してAndroidでポリゴンを塗りつぶす方法は?

私は三角形を使用してポリゴンを試してみましたが、それはme.Anyoneが私を助けてください知って助けにはなりません。

OpenGLProjectRenderer.javaコードの上に使用

public class OpenGLProjectRenderer implements Renderer { 

List<Float> points = new ArrayList<Float>(); 

private static final String TAG = "Renderer"; 
private static final int POSITION_COMPONENT_COUNT = 2; 
private static final int BYTES_PER_FLOAT = 4; 
private FloatBuffer vertexData = ByteBuffer 
     .allocateDirect(20000 * BYTES_PER_FLOAT) 
     .order(ByteOrder.nativeOrder()).asFloatBuffer(); 
private Context context; 
private int program; 

private static final String A_POSITION = "a_Position"; 
private int aPositionLocation; 

private static final String U_COLOR = "u_Color"; 
private int uColorLocation; 

private HashMap<Integer, ArrayList<Float>> lines = new HashMap<Integer, ArrayList<Float>>(); 
int position = 0; 

public OpenGLProjectRenderer(Context context) { 

    this.context = context; 
} 

@Override 
public void onDrawFrame(GL10 gl) { 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glUniform4f(uColorLocation, 1.0f, 0.0f, 0.0f, 1.0f); 

    for (int p = 0; p < lines.size(); p++) { 

     vertexData.put(toFloatarray(lines.get(p))); 
     int vertices = (int) lines.get(p).size()/2; 
     int b = vertices % 4 == 0 ? vertices-1 : vertices - 2; 
     Log.d(TAG,""+lines.size()); 
     glDrawArrays(GLES20.GL_LINE_LOOP, 0, lines.size()); 
     vertexData.clear(); 
    } 

} 

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
    gl.glViewport(0, 0, width, height); 

} 

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

    String vertexShaderSource = TextResourceReader.readTextFileFromResource(
      context, R.raw.simple_vertex_shader); 
    String fragmentShaderSource = TextResourceReader.readTextFileFromResource(
      context, R.raw.simple_fragment_shader); 

    int vertexShader = ShaderHelper.compileVertexShader(vertexShaderSource); 
    int fragmentShader = ShaderHelper 
      .compileFragmentShader(fragmentShaderSource); 
    program = ShaderHelper.linkProgram(vertexShader, fragmentShader); 
    ShaderHelper.validateProgram(program); 
    glUseProgram(program); 
    uColorLocation = glGetUniformLocation(program, U_COLOR); 
    aPositionLocation = glGetAttribLocation(program, A_POSITION); 
    vertexData.position(0); 
    glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT, 
      GL_FLOAT, false, 0, vertexData); 
    glEnableVertexAttribArray(aPositionLocation); 
} 

ArrayList<Float> temp = new ArrayList<Float>(); 

public void handleTouchPress(float normalizedX, float normalizedY) { 
    Log.v(TAG + " handleTouchPress", points.size() + "");  

    temp.add(normalizedX); 
    temp.add(normalizedY); 

    lines.put(position, temp); 
} 

public void handleTouchDrag(float normalizedX, float normalizedY) { 

    Log.v(TAG + " handleTouchDrag", points.size() + ""); 
} 

public float[] toFloatarray(List<Float> floatList) { 

    float[] floatArray = new float[floatList.size()]; 
    int i = 0; 

    for (Float f : floatList) { 
     floatArray[i++] = (f != null ? f : Float.NaN); 
    } 

    return floatArray; 
} 

public void handleTouchUp(float normalizedX, float normalizedY) { 
    Log.v(TAG + " handleTouchUp", points.size() + ""); 

    position++; 

}} 

私が作成したポリゴンを埋めることができGL_LINE_LOOPを使用してではなく、コードの上に使用してポリゴンを描画することができています。

+0

あなたが試したコードを入力してください。 –

+0

あなたはどのような結果をもたらしていますか、そして期待される結果は何ですか? –

+0

非凸多角形の描画に問題はありますか?その場合は、http://stackoverflow.com/questions/25422846/how-to-force-opengl-to-draw-a-non-convex-filled-polygonを参照してください。 –

答えて

1

OpenGL ES 2.0では、基本プリミティブとして三角形のみを描画できます。あなたを提供し、あなたがポリゴンを描画する三角形のファンを試すことができますあなたの場合は、三角形を使用してポリゴンを描画する3つの方法、 1)三角形 2)三角形ストリップ 3)

トライアングルファンは、計画内のポイントがあります知っています。

Hereは、円を描く例です。

関連する問題