c - DDA画线算法有错误

标签 c opengl opengl-3

为什么我在使用此代码时收到“setPixel not Defined”错误?

#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 处理点、线、三角形等渲染基元,但不直接在屏幕上设置单个像素。由于还不清楚你想要实现什么建议:

  • 如果您想在 OpenGL 中绘制一条线,请使用适当的方法,例如 glBegin(GL_LINES) 等。(尽管它们已被弃用,不应再使用。)或 glDrawArrays (GL_LINES,...
  • 如果目标是实现 dda 软件光栅化器,那么您可能必须将像素写入纹理,然后显示该纹理。

关于c - DDA画线算法有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806853/

相关文章:

python - Pygame + OpenGL - 如何在 glBegin() 之后绘制文本?

c++ - OpenGL 在自己的轴上旋转 3D 立方体

c++ - 如何在mac上使用cmake链接OpenGL相关库?

opengl - 是什么导致我的立方体面之间出现撕裂?

c++ - LibVLC 空图像

c - 结构与类型 "long long"的参数不兼容

c++ - 如何将整个 C++ 过剩程序编写为可以在另一个程序中调用的函数?

python - 小行星程序使用间接绘制,glMultiDrawArraysIndirect不渲染并绘制空白

c - 如何使用c程序查找没有扩展名的文件类型(格式)?

c - C 中的指针和类型转换