gpt4 book ai didi

android - 为什么我们不能像三角形一样画正方形?

转载 作者:搜寻专家 更新时间:2023-11-01 08:45:17 26 4
gpt4 key购买 nike

我在 android 文档中找到了代码。

public class Square {

private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;

// number of coordinates per vertex in this array
static final int COORDS_PER_VERTEX = 3;
static float squareCoords[] = {
-0.5f, 0.5f, 0.0f, // top left
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f, // bottom right
0.5f, 0.5f, 0.0f }; // top right

private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices

public Square() {
// initialize vertex byte buffer for shape coordinates
ByteBuffer bb = ByteBuffer.allocateDirect(
// (# of coordinate values * 4 bytes per float)
squareCoords.length * 4);
bb.order(ByteOrder.nativeOrder());
vertexBuffer = bb.asFloatBuffer();
vertexBuffer.put(squareCoords);
vertexBuffer.position(0);

// initialize byte buffer for the draw list
ByteBuffer dlb = ByteBuffer.allocateDirect(
// (# of coordinate values * 2 bytes per short)
drawOrder.length * 2);
dlb.order(ByteOrder.nativeOrder());
drawListBuffer = dlb.asShortBuffer();
drawListBuffer.put(drawOrder);
drawListBuffer.position(0);
}

为什么我们不能简单地编写以下代码来完成任务?

private short drawOrder[] = {0,1,2,3};

这样写只是出于性能原因,还是这样做的唯一方法?

最佳答案

您可以使用{0,1,2,3} 作为索引缓冲区的内容。您必须指定 GL_TRIANGLE_FAN 作为 glDrawElements() 的第一个参数,而不是使用 GL_TRIANGLES 作为基本类型。

或者,如果您交换最后两个索引使其成为 {0,1,3,2},您可以使用更常用的 GL_TRIANGLE_STRIP 原语绘制它们类型。

GL_TRIANGLE_STRIPGL_TRIANGLE_FAN 都用于绘制连接的三角形集。

事实上,如果您的索引只是一个简单的序列,您根本不需要它们。您可以简单地摆脱整个 drawOrder 东西,并使用 glDrawArrays() 而不是 glDrawElements() 绘制正方形:

glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

关于android - 为什么我们不能像三角形一样画正方形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com