我正在教自己开放式gl和顶点缓冲区(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。出了什么问题?谢谢你的帮助。
答案 0 :(得分:1)
您的顶点没有Z分量,请尝试{{50,50,-100}, {50,150,-100}, {150,50,-100}};
(默认情况下,您的相机俯视Z轴,因此将它放在-Z中应该将其放在屏幕上)如果您看不到它仍然尝试较小的数字,我不确定你的近距离和远距离截止距离是多少,如果它没有设置我不知道默认是什么。这可能不是唯一的问题,但它是我能看到的唯一问题,只需快速查看即可。
答案 1 :(得分:0)
您需要添加
glViewport(0, 0, 320, 480);
您可以在其中创建帧缓冲区并设置上下文。
用
替换你对glDrawElements的调用glDrawArrays(GL_TRIANGLE_STRIP, ...);