Оригинальный вопрос:
Перед собеседованием меня попросили понять, как
сглаженная линия рисуется в буфере кадров с использованием 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*
, У меня есть мой double
s, я установил Uint32
в 0x000000FF
и я предполагаю, что SDL_Surface
Я настроил как screen
это тот, который прошел в.
Я играл с тем, где WuLinesAlpha
вызов функции идет, и я продолжаю получать черный экран. Я думал, как объяснено в видео, это пошло бы в петле, но ничего не произошло. Есть ли еще команды SDL, которые я должен вызывать?
Исправь свой 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()
в какой-то момент, предпочтительно, прежде чем начать создавать поверхности.
Удачи!
Других решений пока нет …