为什么我收到一条错误,说这个代码的'setPixel未定义'?
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include<GL/glut.h>
inline int round(const float a)
{
return int (a+0.5);
}
void init(void)
{
glClearColor(0.0f,0.0f,1.0f,1.0f);
gluOrtho2D(0.0,200.0,0.0,200.0);
glMatrixMode(GL_PROJECTION);
}
void LineSegment(int xa, int ya,int xb,int yb)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,0.0f,0.0f);
printf("Enter the initial value");
scanf("%d%d",&xa,&ya);
printf("Enter the final value");
scanf("%d%d",&xb,&yb);
int dx=xb-xa;
int dy=yb-ya;
int steps,k;
float xIncrement,yIncrement,x=xa,y=ya;
if(fabs(dx)>fabs(dy))
steps=fabs(dx);
else
steps=fabs(dy);
xIncrement=dx/(float)steps;
yIncrement=dy/(float)steps;
setPixel(round(x),round(y));
for(k=0;k<steps;k++);
{
x += xIncrement;
y += yIncrement;
setPixel(round(x),round(y));
}
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutCreateWindow("DDA Line Algorithm");
glutDisplayFunc(LineSegment);
init();
glutMainLoop();
return 0;
}
因为在OpenGL或GLUT中没有setPixel
方法,并且从我的代码中可以看出,你也没有定义。 OpenGL处理渲染基元,如点,线,三角形等,但不直接在屏幕上设置单个像素。既然不清楚你想要达到什么建议:
glBegin(GL_LINES), etc.
(虽然它们已被弃用,不应再使用了。)或glDrawArrays(GL_LINES, ...
。因为你还没有在任何地方定义setPixel
。这不是一个OpenGL调用。你需要自己编写它,它应该在缓冲区上设置像素(如果你正在使用双缓冲),然后你将其用作glDrawPixels()
的参数,或者使用glVertex2i(x,y)
调用显示缓冲区。您可以看到两种方法here和here的示例。
此外,你的LineSegment
功能被打破。在OpenGL中,您可以调用glutDisplayFunc
来指定一个尽可能快地调用的函数来渲染显示。但是,在此函数中,您调用scanf()
来提示用户输入数据 - 这已被破坏。您应该在开始时提示它们一次,然后将该数据传递给函数(一旦调用glutMainLoop
,它将尽可能频繁地运行)。