我试图将我制作的路径查找算法合并到代码中,但是遇到了问题。我正在尝试对代码保持灵活性,并允许使用不同长度的数据集,然后使用openGL绘制点。我的问题是,对于要点,我使用指针数组来完成可变长度,而在尝试转换数据类型时,openGL不喜欢这样做。使用函数glVertex2i(),它需要GLint作为其两个参数,但是当我尝试将数组转换为GLint时,我得到了一个空白窗口。我知道这是一个typedef,但它不会从数组中提取常规int。请帮忙!
struct Points { int x, y; }; //My struct to hold the x,y cords
int size; //This is the size of the array
Points *crds = new Points[size]; //The data for this array was input in another function
for (int i = 0; i < size; i++)
{
//These are some things to help configure the look of the points
glEnable(GL_POINT_SMOOTH);
glPointSize(100);
glColor3f(250, 250, 250);
glBegin(GL_POINTS);
for (int i = 0; i < size; i++)
{
glVertex2i((GLint)crds[i].x, (GLint)crds[i].y);
}
glEnd();
答案 0 :(得分:0)
使用GLint
作为坐标
因为int
不能保证是32位的,所以在编译器和平台之间是不同的,并且现在可以是16/32/64位。您的解决方案也应该工作,但是如果您使用GLint
,则无需在glVertex中强制转换(GLint)
,也可以使用矢量版本:
GLint pnt[100][2];
glVertex2iv(pnt[i]);
或类似这样:
GLint pnt[100<<1];
glVertex2iv(pnt[i<<1]);
但是真正的问题在于以下子弹...
矩阵
我们没有看到任何矩阵,也没有看到您的积分范围。 OpenGL 默认情况下使用单位矩阵,这意味着您的点应该<-1,+1>
可见,这在整数上不可行。因此,如果您的点以像素为单位且屏幕为xs,ys
分辨率,则应在渲染之前添加以下内容:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-1.0,-1.0,0.0);
glScalef(2.0/float(xs),2.0/float(ys),0.0);
glColor3f(250,250,250)
OpenGL 中颜色的浮点范围为<0.0,1.0>
,因此您设置的颜色错误。尝试以下方法:
glColor3f(1.0,1.0,1.0);
glPointSize(100)
100太大,因为大小以像素为单位,请尝试:
glPointSize(8);
这就是我能想到的所有问题...看这里:
相关的 QA 包含旧的和新的 API 的有效示例。