我正在教我自己關於開放式窗口和頂點緩衝區(VBO),我寫了代碼,它應該繪製一個紅色三角形,但是它將屏幕變爲黑色:頂點緩衝區以開放式格式顯示1.X
- (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類型的。出了什麼問題?謝謝你的幫助。
更換您到glDrawElements通話感謝您的幫助!這意味着,即使我只在2D平面上繪製xy平面,我必須指定第三個座標? – 2013-02-21 07:38:02
@MattN。是的,opengl是一個3D圖形api,如果你正在嘗試2D,你只需要保持所有對象的Z距離相等(大致相等,z-fighting可能發生在opengl不知道放哪個對象頂部),如果你正在做2D,你應該使用正交投影,而不是透視投影(可以稍後當你有事情工作)擺弄 – Fonix 2013-02-21 07:41:54
也是你的指數是'short',但你的'glDrawElements'期待'GL_UNSIGNED_SHORT'嘗試使用' GLushort'作爲你的數據類型 – Fonix 2013-02-21 07:46:43