2013-08-11 2 views
1

Оригинальный вопрос:C++ Сглаживание линии для начинающего SDL

Меня попросили до собеседования, чтобы понять, как сглаживается линия рисуется в буфере кадра, используя C или C++ , Я не использовал C, и для меня это было несколько лет с тех пор, как я использовал C++. Я доволен, когда дело доходит до графики. Мой опыт в C++ имеет , в основном, в простых командных программах и методах сортировки. Компания не волнует, хватаю ли я код онлайн, они хотят, чтобы я понимал это, но все еще имеет рабочий исполняемый файл.

Я использовал this tutorial для настройки библиотек SDL в MS VC++ 2012 Express и this algorithm для фактического сглаживания. У меня есть хорошее понимание алгоритма, хотя в настоящее время у меня есть проблема с его компиляцией. Я просто хочу, чтобы линия была нарисована, и , тогда я могу идти вперед с установкой кода до класса скелета определений, которые мне даны. Это то, что я включил в стороне от того, что на этой странице с алгоритмом:

#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, 

0x0000FF00, 0x00FF0000, 0xFF000000);

WULinesAlpha(X0, X1, Y0, Y1,pixelColor,myScreen); 

    return; 
} 

Я получаю следующие ошибки:

Ошибка 21 Ошибка LNK2019: неразрешенный внешний символ _SDL_main ссылается функция _Главная Ошибка 22 ошибки LNK1120: 1 неразрешенных Externals

Я видел несколько примеров кода говорят основная функция должна выглядеть так:

int main(int argc, char *argv[]) 
{ 
} 

Опять же, графический материал мне незнаком, поэтому я знаю, что моя основная функция , скорее всего, очень не прав; Я предвкушаю трясущиеся головы. Может кто-то объяснить, что происходит/что мне нужно делать?

Новое:

Я теперь заменил мою главную функцию со следующим кодом, основанный на видео YouTube NomNomNom069 в: "C++ SDL Tutorial 2 Создание экрана и Handling Basic Input"

#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 double s, a Uint32 переменную и SDL_Surface*. У меня есть double с, я установил Uint32 к 0x000000FF, и я полагаю, что SDL_Surface я настроил, как screen это один проходили в.

Я играл вокруг с тем, где вызов WuLinesAlpha функции идет, и я продолжаю получив черный экран. Я подумал, что, как объяснено в видео, оно будет идти в цикле, но ничего не произошло. Есть ли еще команды SDL, которые я должен вызывать?

ответ

0

Закрепите свою декларацию main. Это должно быть int main(int 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 s, вы хотите использовать :=, иначе make будет вызывать команду $(shell ...) при каждом ее расширении $(CFLAGS).

Я не могу помочь вам настроить продукты графического интерфейса Microsoft. Этот учебник для немного более старшего продукта MSVC (2010) выглядит неплохо и может поместить вас на нужную дорожку: http://lazyfoo.net/SDL_tutorials/lesson01/windows/msvsnet2010e/index.php

И, наконец, не забудьте позвонить в SDL_Init() в какой-то момент, желательно, прежде чем приступать к созданию поверхностей.

Удачи вам!

+0

Благодарю вас за ваш ответ, но вы меня больше смутили. Не могли бы вы дать некоторые пояснения к своим рекомендациям? «Исправить вашу основную декларацию сначала» не очень полезно, не зная, что нужно исправлять. Это точный урок, который я использовал, как я уже говорил. – user2672543

+0

Извинения. Я пропустил основную функцию, указанную в руководстве для правильного. Теперь я перешел к этому вопросу. Теперь я достиг еще одного препятствия и поставил этот вопрос в качестве ответа. – user2672543

+0

Я попытался понять реализацию алгоритма Ву, с которым вы связаны. Должен признаться, я не хотел прикладывать усилия к пониманию этой конкретной реализации. Майкл Абраш дал довольно хорошее истолкование алгоритма У в своих книгах по программированию («Дзен графического программирования», изначально, и совсем недавно его Черная книга). Вот ссылка в формате PDF на соответствующую главу: http://downloads.gamedev.net/pdf/gpbb/gpbb42.pdf Надеюсь, вы сможете установить мост между тем, как вы хотите использовать SDL и этот алгоритм. Однако я не мог сказать вам, какую часть вы должны изучить для интервью. –

Смежные вопросы