黑色屏幕,左边和右边有两条橙色线
这是我的代码:
#include <iostream>
#include <GL/glut.h>
#define WIDTH 1000
#define HEIGHT 400
#define OFFSET 200
using namespace std;
float x = 0;
float y = 0;
void init (void)
{
//glClearColor (1.0, 1.0, 1.0, 0.0);
glClear (GL_COLOR_BUFFER_BIT);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho (0.0, 5.0, 0.0, 5.0, -2.0, 2.0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
}
void drawline (float x1, float y1, float x2, float y2)
{
glBegin (GL_LINES);
glVertex2f (x1, y1);
glVertex2f (x2, y2);
glEnd();
}
void drawgrid()
{
glClearColor (1.0, 1.0, 1.0, 1.0);
glColor3ub (240, 57, 53);
for (float i = 0; i < HEIGHT; i += 10)
{
if ((int) i % 100 == 0) glLineWidth (3.0);
else if ((int) i % 50 == 0) glLineWidth (2.0);
else glLineWidth (1.0);
drawline (0, i, (float) WIDTH, i);
}
for (float i = 0; i < WIDTH; i += 10)
{
if ((int) i % 100 == 0) glLineWidth (3.0);
else if ((int) i % 50 == 0) glLineWidth (2.0);
else glLineWidth (1.0);
drawline (i, 0, i, (float) HEIGHT);
}
}
void display()
{
drawgrid();
glFlush();
glutSwapBuffers();
}
int main (int argc, char **argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA);
glutInitWindowSize (WIDTH, HEIGHT);
glutCreateWindow ("ECG");
init();
glutDisplayFunc (display);
glDisable (GL_TEXTURE_2D);
glutMainLoop();
return 0;
}
我做错了什么?如何使背景变白并正确绘制网格?
答案 0 :(得分:2)
您可以设置投影以将坐标范围[0,5]映射到屏幕。然后,您在10个单位的距离处绘制线条,因此仅显示y = 0的线条。
实际上,图像是特定于实现的。你可以看到底部的水平线,或者你看不到它,因为你不是在底部像素中心绘制底部像素行的底部边框。一个实现可能会围绕这一点。这就是你的左边垂直线x = 0时发生的事情。
因此,您应该设置glOrtho
调用以匹配您要使用的坐标范围,并且您将看到正在绘制的线条。
使用glClearColor
更改背景颜色。
也不要将glutInitDisplayMode(GLUT_SINGLE | ...)
与glutSwapBuffers()
结合使用。使用单缓冲,然后没有交换缓冲区,或者,如我所建议的,在帧完成后使用双缓冲和交换缓冲区。同时删除glFlush
,如果使用glutSwapBuffers
则不需要。{/ p>
答案 1 :(得分:2)
另一种绘画方式
void drawSquare()
{
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glColor3f(1.0, 0.0, 0.0);
int xsize=0,ysize=0;
for(int j=0;j<10;j++)
{
xsize=0;
for(int i=0;i<10;i++)
{
glBegin(GL_POLYGON);
glVertex3f(-50.0+xsize, -50.0+ysize, 0.0);
glVertex3f(-40.0+xsize, -50.0+ysize, 0.0);
glVertex3f(-40.0+xsize, -40.0+ysize, 0.0);
glVertex3f(-50.0+xsize, -40.0+ysize, 0.0);
glEnd();
xsize+=10.0;
}
ysize+=10.0;
}
glFlush();
}