繁体   English   中英

如何用变量画一条线

[英]How To Draw a line with variables

例如,在下面的代码中,在function“glVertex3f”中,使用1到-1之间的常数来表示一个点

glBegin(GL_LINES);
{
glColor3ub(255, 0, 0);
glVertex3f(-1,0,0);glVertex3f(1,0,0);
}

但大多数时候,我们更频繁地使用“变量”。 假设window的宽度是450,一半是225。参数输入范围在0到225之间,当我们按照这个区间输入一个integer时,我期望得到一个比例十进制值并使用这个十进制值画一条直线。

void DrawLine(GLint ix, GLint iy,GLint ia,GLint ib)
{
    GLfloat width = 225;
    GLfloat x, y, z;
    GLfloat a, b, c;
    x = (GLfloat)(ix / width);
    y = (GLfloat)(iy / width);
    z = 0.2;
    a = (GLfloat)(ia / width);
    b = (GLfloat)(ib / width);
    c = 0.2;

    glBegin(GL_LINES);
    {
        glColor3ub(255, 0, 0);
        glVertex3f(x, y, z); glVertex3f(a, b, c);
    }
    glEnd();
}

上面的程序根本不起作用。 请告诉我问题是什么。

ix / width是一个整数除法您必须将ix转换为浮点数,以进行浮点除法:

x = (GLfloat)(ix) / (GLfloat)(width);

标准化设备坐标在 [-1.0, 1.0] 范围内。 从 NDC 到 window 坐标的转换是:

x = (GLfloat)(ix) / (GLfloat)(width) * 2.0f - 1.0f; 

但是,我建议使用将 window 坐标映射到 NDC 的正交投影

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, width, -1, 1);

使用此投影矩阵,您可以直接使用积分 window 坐标( ixiy ,...)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM