初学到SDL的C++反走样线

初学到SDL的C++反走样线,c++,line,sdl,antialiasing,C++,Line,Sdl,Antialiasing,原始问题: 我在面试前被要求了解 反锯齿线是用C或C++在帧缓冲器中绘制的。我没有 使用C,自从我上次使用C++以来,我已经用了几年时间。我是一个 完全初学者当谈到图形。我的C++体验 大多是在简单的命令行程序和排序方法。这个 公司不在乎我是否在线获取代码,他们希望我这样做 理解它,但仍然有一个工作的可执行文件 我曾经在MS VC++2012中设置过SDL库 Express和,用于实际的抗锯齿。我有 对算法有很好的理解,尽管我目前 很难编译它。我只想画一条线,然后 然后我可以继续将代码设置为骨架

原始问题:

我在面试前被要求了解 反锯齿线是用C或C++在帧缓冲器中绘制的。我没有 使用C,自从我上次使用C++以来,我已经用了几年时间。我是一个 完全初学者当谈到图形。我的C++体验 大多是在简单的命令行程序和排序方法。这个 公司不在乎我是否在线获取代码,他们希望我这样做 理解它,但仍然有一个工作的可执行文件

我曾经在MS VC++2012中设置过SDL库 Express和,用于实际的抗锯齿。我有 对算法有很好的理解,尽管我目前 很难编译它。我只想画一条线,然后 然后我可以继续将代码设置为骨架类 给我下了定义。这是我所包括的,除了什么 在该页面上,使用以下算法:

#include <cmath>
#include <math.h>
#include "conio.h"
#include "stdlib.h"
#include "stdio.h"
#include "SDL.h"

const double HEIGHT = 240;
const double WIDTH = 320;
const double X0 = 25.6;
const double X1 = 64.7;
const double Y0 = 30;
const double Y1 = 42;

int round(double number)
{
    return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}

void main()
{
  Uint32 pixelColor = 00000000000000000000000000000000;

  SDL_Surface* myScreen = SDL_CreateRGBSurface(SDL_ALPHA_OPAQUE,WIDTH,HEIGHT,32, 0x000000FF,
我得到以下错误:

错误21错误LNK2019:未解析的外部符号_SDL_main 函数_中引用的主要错误22错误LNK1120:1未解决 外部

我已经看到一些代码示例说明主函数必须 像这样:

int main(int argc, char *argv[])
{
}
同样,我不熟悉图形,所以我知道我的主要功能 这可能是非常错误的;我预计会有人摇头。谁能 解释发生了什么/我需要做什么

新的:

我已经用NoMnMn069的YouTube视频替换了我的主要功能:C++ SDL教程2:创建屏幕并处理基本输入< /P>

#include "SDL.h"

int main(int argc, char * args[])
{
    bool running = true;
    //initialize SDL
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        running = false;
    }

    //set up screen
    SDL_Surface *screen;

    screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_HWSURFACE);

    if (screen == NULL)
    {
        running = false;
    }

    SDL_Event occur;

    //main application loop
    while (running)
    {
        SDL_PollEvent(&occur);

        if (occur.type == SDL_QUIT)
        {
            running = false;
        }

        //drawing occurs here
        SDL_FillRect(screen, NULL, 0);
        SDL_Flip(screen);
    }

    //quit SDL
    SDL_Quit();

    return 0;
}
没有错误,我会弹出一个窗口。太棒了

我现在的问题是关于如何/在何处调用WuLinesAlpha。此函数调用4个双精度、一个Uint32变量和一个SDL_曲面*。我有我的替身,我将Uint32设置为0x000000FF,我假设我设置为screen的SDL_曲面就是传入的曲面

我一直在玩弄WuLinesAlpha函数调用的去处,我一直看到黑屏。我想,正如视频中所解释的那样,这会成为一个循环,但什么都没有发生。我还应该调用其他SDL命令吗?

首先修复主声明。这必须是int mainnt argc,char*argv[]。特别是在Windows上,因为我相信SDL.h实际上会将main重命名为其他名称,并接管库本身的main

接下来,确保正确链接SDL。在我自己的基于SDL 1.2.x的项目中,我的Makefile中有以下几行:

SDL_CFLAGS := $(shell sdl-config --cflags)
SDL_LFLAGS := $(shell sdl-config --libs)
然后,我将这些标志附加到实际的CFLAGS和LFLAGS中。请注意,如果使用make和makefile,则希望使用:=there,否则make将调用$shell。。。命令每次展开$CFLAGS时

我无法帮助您设置Microsoft的GUI产品。本教程针对的是一款稍旧的MSVC产品2010,看起来相当不错,可能会让您走上正确的道路:

最后,不要忘记在某个时候调用SDL_Init,最好是在开始创建曲面之前


祝你好运

谢谢你的回答,但你让我更困惑了。你能解释一下你的建议吗?如果不知道需要修复什么,那么首先修复主声明是没有多大帮助的。正如我所说,这正是我使用的教程。抱歉。我错过了教程中为正确设置的主要功能。我现在已经通过了这个问题。我现在遇到了另一个障碍,我将把这个问题作为一个回答。我试图理解你链接的吴的算法的实现。我必须承认,我不愿意把精力放在理解特定的实现上。MichaelAbrash在他的编程书籍《图形编程的禅宗》中对吴的算法做了一个很好的概述,最早是在他的黑皮书中。这里有一个相关章节的PDF链接:希望您能在希望如何使用SDL和该算法之间架起一座桥梁。不过,我不能告诉你面试问题应该学习哪一部分。而且。。。你确定面试官是在寻找你的划线知识,而不是你本能地寻找并安装一个适当优化的库来完成一项简单的任务吗?
SDL_CFLAGS := $(shell sdl-config --cflags)
SDL_LFLAGS := $(shell sdl-config --libs)