OpenGL -当我在立方体上绘制边界时,会出现额外的线
OpenGL - Extra line appears when I draw a border on a cube
我一直在试图弄清楚这一点,但我失败了。我需要画一个立方体,然后在它周围加上一个边框。立方体工作得很好,我可以画出边界,但总有一条额外的线插入。我使用GL_ARRAY_BUFFER来存储数据,并从gl_triangle(绘制立方体本身)切换到GL_LINES(绘制轮廓边界)。缓冲区中的每个偏移量都有自己的一组顶点。
显示函数(GLUT)的代码:
// cubeLen = number of cube's vertices in buffer
// sidesLen = number of side vertices in buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, cubeLen);
glDrawArrays(GL_LINES, cubeLen, cubeLen + sidesLen);
glutSwapBuffers();
设置缓冲区的代码:
GLuint buffer;
glGenBuffers( 1, &buffer );
glBindBuffer( GL_ARRAY_BUFFER, buffer );
glBufferData( GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors)
+ sizeof(points2) + sizeof(colors2),
NULL, GL_STATIC_DRAW );
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(points), points);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(points), sizeof(colors), colors);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors),
sizeof(points2), points2);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors) + sizeof(points2),
sizeof(colors2), colors2);
我用12个三角形(每个三角形3个顶点)来代表立方体的每一面,用12条线(24个顶点)来覆盖所有的边。立方体和边缘同步位于屏幕的中心(居中为0,0,0)。即使我在显示功能中禁用绘制立方体,也会出现额外的不需要的线(似乎从3D的中左位置延伸到3D的中前位置)。但是,当我不为立方体设置顶点时,它就会消失。知道为什么会这样吗?谢谢大家的帮助。
当调用显示函数时,额外的行是缓冲区的错误索引。基本上,它试图显示颜色数据而不是实际的顶点数据。
相关文章:
- 如何使用 std::累积在 C++ 中计算总和立方体
- std::当在256字节边界上写入整数时,流的奇怪行为
- 使用不变量来确定二分搜索中的边界条件
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 在 64 位边界上对齐C++结构数组?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- std::数组边界检查如何工作?
- CGAL:如何创建填充边界曲线的曲面网格?
- 如何使用采样器立方体作为数组
- 在 c++ 中是否允许创建具有运行时边界的数组?
- OpenGL,为什么这不是一个立方体?
- 在具有 MPI 的超立方体中广播
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- Opengl 和 c++ 绘制多个立方体
- 转换引用对象的边界框?
- 将迭代器作为 3 个元素的滑动窗口,可以超调边界(可能使用 Boost)
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- (中广)获取AABB树生成的边界立方体进行碰撞检测
- OpenGL -当我在立方体上绘制边界时,会出现额外的线