gpt4 book ai didi

c++ - opengl画线出错?

转载 作者:行者123 更新时间:2023-11-28 06:45:39 25 4
gpt4 key购买 nike

#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();

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

关于c++ - opengl画线出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com