在所有象限中绘制Bresenham的线算法

时间:2013-11-07 15:33:33

标签: opengl

我是OpenGL的新手。我正在练习我教科书中的练习,但我无法得到所有象限中Bresenham线算法的输出。

以下是编码:

#include <Windows.h>
#include <GL/glut.h>
void init(void) {
   glClearColor(0.0, 0.0, 0.0, 0.0);
   glShadeModel(GL_FLAT);
}
void BresnCir(void) {
   int delta, deltadash;
   glClear(GL_COLOR_BUFFER_BIT);
   glPointSize(3.0);
   int r = 150;
   int x = 0;
   int y = r;
   int D = 2 * (1 - r);
   glBegin(GL_POINTS);
   do {
      glVertex2i(x, y);
      if (D < 0) {
         delta = 2 * D + 2 * y - 1;
         if (delta <= 0) {
            x++;
            Right(x);
         } else {
            x++;
            y--;
            Diagonal(x, y);
         }
         glVertex2i(x, y);
      } else {
         deltadash = 2 * D - 2 * x - 1;
         if (deltadash <= 0) {
            x++;
            y--;
            Diagonal(x, y);
         } else {
            y--;
            Down(y);
         }
         glVertex2i(x, y);
      }
      if (D == 0) {
         x++;
         y--;
         Diagonal(x, y);
         glVertex2i(x, y);
      }
   } while (y > 0);
   glEnd();
   glFlush();
}
int main(int argc, char** argv) {
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize(400, 150);
   glutInitWindowPosition(100, 100);
   glutCreateWindow(argv[0]);
   init();
   glutDisplayFunc(BresnCir);
   glutMainLoop();
   return 0;
}

但是,它仍然存在错误C3861。

1 个答案:

答案 0 :(得分:1)

  

但是,它会出现错误C3861

如果您使用的是Visual Studio,则错误C3861 表示未找到标识符即使您没有使用Visual Studio,错误代码可能仍然意味着相同。

以下示例将生成 C3861错误

void f2() {}

int main() {
    f(); // Generate C3861 Error
    f2(); // OK
}

正如您在示例中所见,我们尝试调用函数f(),但该函数不存在,因此未找到标识符

在您的代码中,您使用以下功能。

  • Diagonal(x, y)
  • Right(x)
  • Down(y)

但我没有看到你真正宣布这些功能的任何地方。所以我猜,这些函数是你得到错误的原因,因为没有定义。