C ++ Сглаженная строка для начинающих в SDL

Оригинальный вопрос:

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

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

#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
ссылка в функции _main Ошибка 22 ошибка LNK1120: 1 неразрешена
внешность

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

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

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

Новое:

Теперь я заменил свою основную функцию следующим кодом, основанным на видео NomNomNom069 на YouTube: «Учебное пособие по C ++ SDL 2 Создание экрана и обработка основного ввода»

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

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

1

Решение

Исправь свой 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 а также Makefiles, вы хотите использовать := там, иначе make вызовет $(shell ...) Команда каждый раз, когда она расширяется $(CFLAGS),

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

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

Удачи!

0

Другие решения

Других решений пока нет …