0

我正在自学有关开放式 gl es 和顶点缓冲区 (VBO) 的知识,并且我已经编写了代码,它应该绘制一个红色三角形,但它却将屏幕着色为黑色:

- (void)drawRect:(CGRect)rect {

// Draw a red triangle in the middle of the screen:
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
// Setup the vertex data:
typedef struct {
    float x;
    float y;
} Vertex;
const Vertex vertices[] = {{50,50}, {50,150}, {150,50}};
const short indices[3] = {0,1,2};
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
NSLog(@"drawrect");
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
// The following line does the actual drawing to the render buffer:
glDrawElements(GL_TRIANGLE_STRIP, 3, GL_UNSIGNED_SHORT,  indices);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, framebuffer);
[eAGLcontext presentRenderbuffer:GL_RENDERBUFFER_OES];
}

这里 vertexBuffer 是 GLuint 类型。出了什么问题?谢谢你的帮助。

4

2 回答 2

1

您的顶点没有 Z 组件,请尝试{{50,50,-100}, {50,150,-100}, {150,50,-100}};(默认情况下,您的相机向下看 Z 轴,因此将其放在 -Z 中应该将其放在屏幕上)如果您看不到它仍然尝试较小的数字,我不确定您的近处和远处绘制截止距离是,如果它甚至没有设置,我不知道默认值是什么。这可能不是唯一的问题,但它是我通过快速查看可以看到的唯一问题。

于 2013-02-21T07:36:40.443 回答
0

您需要添加

glViewport(0, 0, 320, 480);

在其中创建帧缓冲区并设置上下文。

并将您对 glDrawElements 的调用替换为

glDrawArrays(GL_TRIANGLE_STRIP, ...);
于 2013-02-21T10:09:45.833 回答