0

我一直在尝试将我的一些代码转换为现代 OpenGL。我已经达到了没有任何 OpenGL 错误的地步,但是当我尝试绘制对象时没有任何显示。这是我的代码(减去上下文创建和错误检查):

//Compile shaders and create/link program
//I very highly doubt the problem's here (all my tests say it worked fine),
//so I'm leaving this out for now,  but I'll dig it out of my classes if
//there's no obvious problem with the VBO code.

//Create VAO, VBO

unsigned vaoId, vboId;
int positionAttributeLocation;
float vertices[] = {...vertex data here...};
unsigned indices[] = {...index data here...};

positionAttributeLocation = glGetAttribLocation(programId, "position");

glGenVertexArrays(1, &vaoId);
glGenBuffers(1, &vboId);

glBindVertexArray(vaoId);
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(positionAttributeLocation, 3, GL_FLOAT, GL_FALSE, 0, null);
glEnableVertexAttribArray(positionAttributeLocation);

//Create index buffer
unsigned indexId;
glGenBuffers(1, &indexId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexId);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

glUseProgram(programId);
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(unsigned int), GL_UNSIGNED_INT, null);

不完全是 SSCCE,但我认为这就是所有可能导致问题的代码,而且它几乎是独立的。

4

3 回答 3

0

glUseProgram()在您的glGetAttribLocation()/glEnableVertexAttribArray()电话之前尝试。

于 2012-06-19T16:22:42.520 回答
0

您的问题很可能在于您的 cg 程序和模型视图空间。

cgGLSetStateMatrixParameter(modelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);在 gldrawarrays 之前添加到您的程序中,并在您的 cg 文件中添加OUT.HPos = mul(ModelViewProj, IN.position);.

modelViewMatrix还要在您的 initcg 部分中添加为 cg 参数。

我从 cgtoolkit 中的基本 opengl 示例中解决了这个问题,我的渲染功能与你的非常相似,现在在遇到同样的问题后可以工作。

于 2012-08-10T18:18:50.063 回答
0

我想到了。通过一些重构,我忘记了正确设置宽度和高度变量,创建了一个 0 x 0 视口。哎呀...

于 2012-08-18T03:46:10.040 回答