我有一个顶点数组有8个顶点,每个顶点用两个坐标表示。
我使用glVertexPointer
函数在使用glDrawArray
函数的绘图中使用此数组。
void datasource()
{
GLfloat vertex1[]={ -1.000000, 0.500000, -0.700000, 0.500000, -1.000000, 0.800000, -0.700000, 0.800000, -0.400000, 0.500000, -0.100000, 0.500000, -0.400000, 0.800000, -0.100000, 0.800000 };
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vertex1);
}
void display()
{
frame++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_LINES, 0, 2);
glutSwapBuffers();
glutPostRedisplay();
}
当我尝试使用前两个顶点绘制线条时,我看不到任何东西,但它应该显示为水平线。我做错了什么?
答案 0 :(得分:4)
我做错了什么?
您的数据位于函数堆栈中,您可能会调用设置数组指针。不幸的是,一旦函数返回,它的堆栈帧就会被解除分配并且指针变为无效。
因此,要么首先使用VBO将数据复制到持久性OpenGL对象。或者将该内存分配给堆或作为全局变量。
此外,您应该在相应的glEnableClientState
函数调用之前调用glVertexPointer
和glDraw…
。
答案 1 :(得分:0)
每次拨打glVertexPointer
功能
display
功能