打开gl画线错误

open gl drawing a line error?

本文关键字:错误 gl 打开      更新时间:2023-10-16
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <GL/glut.h>
#define ROUND(a) ((int)+.5)
void display(void) {    
    int xa = 10, ya = 3, xb = 56, yb = 98;
    int dx = xb - xa, dy = yb - ya, steps, k;
    float xincre, yincre, x = xa, y = ya;
    glColor3f(0.0f, 0.0f, 1.0f);
    if (abs(dx) > abs(dy))
        steps = abs(dx);
    else
        steps = abs(dy);
    xincre = dx / (float)steps;
    yincre = dy / (float)steps;
    glBegin(GL_POINTS);
    glVertex2s(ROUND(x), ROUND(y));
    for (k = 0; k < steps; k++) {
        x += xincre;
        y += yincre;
        glVertex2s(ROUND(x), ROUND(y));
        printf("%f,%f", x, y);
    }
    glEnd();
    glFlush();
}
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("CpViewer");
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

我尝试实现dda算法用于生成一行,但它似乎只是打印一个点。我不明白问题出在哪里?在白色背景下我只能得到一个蓝点作为输出

绘图坐标是根据标准化矩形定义的(x和y都在-1和1之间),而不是根据窗口坐标定义的。因此,绘图的最左边的x坐标在窗口坐标中为0,在绘图坐标中为-1.0,最右边的x坐标在窗口坐标中为窗口宽度(在本例中为500),在绘图坐标中为1.0。y坐标是相同的,但是y轴是从窗口坐标翻转到绘图坐标(绘图坐标中的-1将是窗口坐标中的500)。

尝试用glVertex2f绘制点,并根据窗口大小重新缩放点:

glBegin(GL_POINTS);
for (k = 0; k <= steps; k++) {
    glVertex2f((x - 250.f)/250.f, (250.f - y)/250.f);
    printf("%f,%f", x, y);
    x += xincre;
    y += yincre;
}
glEnd();

您还需要跟踪窗口是否被调整大小,以确保您正确缩放这些坐标,但目前,这应该工作。