【发布时间】:2016-09-29 23:03:07
【问题描述】:
这是一个我需要使用 OpenGL 来渲染线条的作业,但只能使用 GL_POINTS。
我正在用 P1(-1,-1) 到 P2(1,-1) 的水平线对其进行测试。
我的函数使用线函数y=mx+c:
void line2(double x1, double y1, double x2, double y2, double precision, int r, int g, int b){
double m = 0.0; // slope
double c = (y1 - m*x1); // constant
double j = y1; // starting y value
// check division by 0
if (x2-x1 == 0)
m = 0;
else
m = (y2-y1)/(x2-x1);
glColor3f(r,g,b);
glBegin(GL_POINTS);
for (double i = x1; i < x2; i+=precision){
j = m*i + c; // result of y from line function
glVertex2f(i,j);
}
glEnd();
}
调用它:
line2(-1,-1,1,-1,0.000001, 102, 102, 255);
给我一条水平虚线。它不是连续的。如果我增加更多精度,我的程序可能由于内存而挂起。
更新:我现在注意到的是渲染多条线,第一条是虚线!所以如果我多次调用line(),不管参数如何,第一行总是虚线,其他都是完美的。
有没有更好的方法(公式或循环)来渲染一条线?
谢谢!
【问题讨论】:
-
尝试使用多个绘图调用(但保持较小,例如
-
您应该先创建一个值向量,然后将它们作为顶点属性传递
-
也许你也可以避免每次都计算
j,因为 j 的增量也是恒定的:double jInc = m * precision并改变你的循环:for (double i = x1, j = y1; i < x2; i+=precision, j += jInc){