[英]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 坐标( ix
, iy
,...)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.