Я просто хочу нарисовать простую прямоугольную рамку, заполненный прямоугольник работает нормально, но я не могу найти простой способ просто нарисовать границу, вот мой класс Rectangle.нарисовать основную прямоугольную рамку в OpenGL для android
Ниже мой прямоугольник класс:
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);
}
}
Хорошо, что вы видите, что проблема заключается в том, что я хочу нарисовать прямоугольную рамку поверх предварительного просмотра камеры, идея проста, как прямоугольник фокуса в приложении камеры, я хочу нарисовать безопасный регион для того, чтобы пользователь разместил их квитанцию внутри и обрезать эту область – user2641657
В чем проблема? Вы знаете координаты для углов вашего прямоугольника для вашей текущей ничьей, поэтому просто замените это на ничью GL_LINES, а не GL_TRIANGLES (вам нужно исправить буфер индекса, чтобы связать правильные точки в виде строк, так как это будет отличаться к треугольному соединению). – solidpixel