Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用GL_LINE_LOOP绘制多个圆_C++_Opengl - Fatal编程技术网

C++ 使用GL_LINE_LOOP绘制多个圆

C++ 使用GL_LINE_LOOP绘制多个圆,c++,opengl,C++,Opengl,使用这些代码在屏幕上渲染许多圆圈时遇到问题 float degree = 0; unsigned int ctr = 0; for(int xi = -3200; xi < 3200; xi+= 2*r) { for(int yi = 4800; yi > -4800; yi-= 2*r) { for(int i = 0; i < 360; ++i) { vertices.push_back(xi + r

使用这些代码在屏幕上渲染许多圆圈时遇到问题

float degree = 0;
unsigned int ctr = 0;
for(int xi = -3200; xi < 3200; xi+= 2*r)
{
    for(int yi = 4800; yi > -4800; yi-= 2*r)
    {
        for(int i = 0; i < 360; ++i)
        {
            vertices.push_back(xi + r * cos(float(degree)));
            vertices.push_back(yi + r * sin(float(degree)));
            vertices.push_back(-8);

            indices.push_back(i+ctr);               
            ++degree;
        }
        ctr += 360;
        degree = 0;
    }
}

unsigned int i = 0;
for(i = 0; i < indices.size()/360; ++i) 
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, &vertices[i*360]);
    glLineWidth(1);
    glDrawElements(GL_LINE_LOOP, 360, GL_UNSIGNED_INT, &indices[i*360]);
    glDisableClientState(GL_VERTEX_ARRAY);
}
浮动度=0;
无符号整数中心=0;
(int x= 3200;席< 3200;席席=2×R)
{
对于(int yi=4800;yi>-4800;yi-=2*r)
{
对于(int i=0;i<360;++i)
{
顶点。向后推(xi+r*cos(浮动(度));
顶点。向后推(yi+r*sin(浮动(度));
顶点。向后推_(-8);
指数。推回(i+ctr);
++学位;
}
ctr+=360;
度=0;
}
}
无符号整数i=0;
对于(i=0;i
结果如下


另外,当我将席值变为[-6400, 6400 ]

时,程序崩溃了,撇开这项技术的可疑性质,你看不正确访问索引。< /P>

glVertexPointer(3, GL_FLOAT, 0, &vertices[i*360]);
glDrawElements(GL_LINE_LOOP, 360, GL_UNSIGNED_INT, &indices[i*360]);
GLD元素的索引指定从glVertexPointer处顶点的偏移。您已将索引定义为相对于顶点缓冲区的起点:

indices.push_back(i+ctr);   
但是您正在移动绘制的每个圆的缓冲区偏移量。所以在索引缓冲区中,第二个圆从索引360开始。但在绘制第二个圆时,也会移动顶点指针,使索引360成为指针的第0个元素


然后,当您尝试访问索引360时,实际上您正在访问元素720(360+缓冲区开始@360)

撇开这项技术的可疑性质不谈,您似乎无法正确访问索引

glVertexPointer(3, GL_FLOAT, 0, &vertices[i*360]);
glDrawElements(GL_LINE_LOOP, 360, GL_UNSIGNED_INT, &indices[i*360]);
GLD元素的索引指定从glVertexPointer处顶点的偏移。您已将索引定义为相对于顶点缓冲区的起点:

indices.push_back(i+ctr);   
但是您正在移动绘制的每个圆的缓冲区偏移量。所以在索引缓冲区中,第二个圆从索引360开始。但在绘制第二个圆时,也会移动顶点指针,使索引360成为指针的第0个元素

然后,当您尝试访问索引360时,实际上您正在访问元素720(360+缓冲区开始@360)