Ich möchte nur eine einfache rechteckige Grenze, zeichnen ein gefülltes Rechteck funktioniert ok, aber ich kann nicht einen einfachen Weg, um nur eine Grenze hier zu zeichnen ist meine Klasse Rectangle.zeichnen Sie grundlegende rechteckige Grenze in OpenGL für Android
Unten ist mein Rechteck-Klasse:
package{
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
import javax.microedition.khronos.opengles.GL10;
public class Rectangle {
private float vertices[]={
-0.5f,0.5f, 0.0f,
-0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0f,
0.5f,0.5f,0.0f
};
// The colors mapped to the vertices.
float[] colors = {
1f, 0f, 0f, 1f, // vertex 0 red
1f, 0f, 0f, 1f, // vertex 1 green
1f, 0f, 0f, 1f, // vertex 2 blue
1f, 0f, 0f, 1f, // vertex 3 magenta
};
private short[] indices = {0,1,2,0,2,3};
private FloatBuffer vertexBuffer;
private ShortBuffer indexBuffer;
// Our color buffer.
private FloatBuffer colorBuffer;
public Rectangle(){
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);
// float has 4 bytes, colors (RGBA) * 4 bytes
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4);
cbb.order(ByteOrder.nativeOrder());
colorBuffer = cbb.asFloatBuffer();
colorBuffer.put(colors);
colorBuffer.position(0);
}
public void draw(GL10 gl){
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
// Enable the color array buffer to be used during rendering.
gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // NEW LINE ADDED.
// Point out the where the color buffer is.
gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer); // NEW LINE ADDED.
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
}
}
naja, das ist das problem ich möchte rechteckige grenze auf eine kamera vorschau zeichnen, die idee ist einfach wie ein fokus rechteck in der kamera anwendung, ich möchte eine sichere region für den benutzer zeichnen ihre quittung innerhalb und den Bereich ausschneiden – user2641657
Was ist das Problem? Sie kennen die Koordinaten für die Ecken Ihres Rechtecks für Ihre aktuelle Zeichnung, ersetzen Sie das also durch eine Zeichnung von GL_LINES statt GL_TRIANGLES (Sie müssen den Indexpuffer korrigieren, um die richtigen Punkte als Linien zu verknüpfen, da dies anders sein wird zur Dreiecksverbindung). – solidpixel