Разработка и ромхакинг > Ромхакинг
какие программы использовать для создания своих игр?
ASM:
--- Цитата: Гламурная киса от 22 Декабря 2012, 23:03:36 ---ругается на хедер gl.h
--- Конец цитаты ---
Скорее всего что-то в коде твоего проекта. Ради интереса сейчас попробовал подключить SDL-ку к в свою IDE, QtCreator. В качестве компилятора я использовал порт gcc под винду (MinGW), версии 4.6.2.
1. В начале скомпилировал SDL-библиотеку:
1.1. Взял сорцы тут: http://www.libsdl.org/release/SDL-1.2.15.tar.gz
1.2. Запустил MinGW MSYS, для компиляции выполнил следующее (никакие флаги не указывал, все было по дефолту):
--- Код: ---cd /c/Qt/build/SDL-1.2.15
./configure --prefix=/mingw
make -j3
make -j3 install
--- Конец кода ---
1.3. Скомпилированная динамическая либа, хидеры, и статическая либа - все скопировалось само куда нужно.
SDL.dll в C:\Qt\MinGW\bin
\SDL в C:\Qt\MinGW\include
libSDL.a и libSDLmain.a и прочий стаф в C:\Qt\MinGW\lib
2. Теперь в качестве примера использования OpenGL + SDL, создал следующий проект в QtCreator'е (Non-Qt Project -> Plain C Project).
2.1. Добавил такие параметры в файл проекта .pro:
--- Код: ---LIBS += -L../../MinGW/lib
LIBS += -lmingw32 -lSDLmain -lSDL -lopengl32
INCLUDEPATH += ../../MinGW/include
DEPENDPATH += ../../MinGW/include
--- Конец кода ---
Подробнее на картинке
2.2. Определил переменную окружения для запуска (вкладка Projects -> Run):
2.3. Вставил в main.c код первого попавшегося проекта с OpenGL + SDL:
Этим проектом был SDLgears-1.0.2.tar.gz, взятый на официальном сайте: http://www.libsdl.org/opengl/index.php
Просто скопировал содержимое SDLgears.c в main.c, который был в проекте с заменой содержимого и подправил путь к хэдеру SDL.h:
2.4. Скомпилил проект, всё отлично собралось и запустилось:
Короче, все нормально с этим OpenGL и SDL, смотри в сторону своего кода. Может что-то не так делаешь? Например, не вижу у тебя подлинкованной opengl32.
Есть возможность выложить код сюда?
Проект для QtCreator:
http://rghost.ru/42486023
Гламурная киса:
--- Код: ---#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
#include <GL/gl.h>
#include <GL/glu.h>
float xrf, yrf, zrf;
int fps=0;
void DrawGLScene();
Uint32 my_callbackfunc(Uint32 interval, void *param);
void* my_callback_param;
int main(){
if ( SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) < 0 ){
printf("Unable to init SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
if ( SDL_SetVideoMode(640,480,32,SDL_OPENGL) == NULL ){
printf("Unable to set 640x480 video: %s\n", SDL_GetError());
exit(1);
}
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,640/480,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
SDL_TimerID my_timer_id = SDL_AddTimer(1000, my_callbackfunc, my_callback_param);
int done=0;
while(done == 0){
SDL_Event event;
while ( SDL_PollEvent(&event) ){
if ( event.type == SDL_QUIT ){
done = 1;
}
if ( event.type == SDL_KEYDOWN ){
if ( event.key.keysym.sym == SDLK_ESCAPE ){
done = 1;
}
}
}
DrawGLScene();
glFlush();
SDL_GL_SwapBuffers();
fps++;
}
return 0;
}
void DrawGLScene(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-7.0f); // Сдвинуть вглубь экрана
glRotatef(xrf, 1.0f, 0.0f, 0.0f); // Вращение куба по X, Y & Z
glRotatef(yrf, 0.0f, 1.0f, 0.0f); // Вращение куба по X, Y & Z
glRotatef(zrf, 0.0f, 0.0f, 1.0f); // Вращение куба по X, Y & Z
glBegin(GL_QUADS); // Рисуем куб
glColor3f(0.0f,1.0f,0.0f); // Синий
glVertex3f( 1.0f, 1.0f,-1.0f); // Право верх квадрата (Верх)
glVertex3f(-1.0f, 1.0f,-1.0f); // Лево верх
glVertex3f(-1.0f, 1.0f, 1.0f); // Лево низ
glVertex3f( 1.0f, 1.0f, 1.0f); // Право низ
glColor3f(1.0f,0.5f,0.0f); // Оранжевый
glVertex3f( 1.0f,-1.0f, 1.0f); // Верх право квадрата (Низ)
glVertex3f(-1.0f,-1.0f, 1.0f); // Верх лево
glVertex3f(-1.0f,-1.0f,-1.0f); // Низ лево
glVertex3f( 1.0f,-1.0f,-1.0f); // Низ право
glColor3f(1.0f,0.0f,0.0f); // Красный
glVertex3f( 1.0f, 1.0f, 1.0f); // Верх право квадрата (Перед)
glVertex3f(-1.0f, 1.0f, 1.0f); // Верх лево
glVertex3f(-1.0f,-1.0f, 1.0f); // Низ лево
glVertex3f( 1.0f,-1.0f, 1.0f); // Низ право
glColor3f(1.0f,1.0f,0.0f); // Желтый
glVertex3f( 1.0f,-1.0f,-1.0f); // Верх право квадрата (Зад)
glVertex3f(-1.0f,-1.0f,-1.0f); // Верх лево
glVertex3f(-1.0f, 1.0f,-1.0f); // Низ лево
glVertex3f( 1.0f, 1.0f,-1.0f); // Низ право
glColor3f(0.0f,0.0f,1.0f); // Синий
glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Лево)
glVertex3f(-1.0f, 1.0f,-1.0f); // Верх лево
glVertex3f(-1.0f,-1.0f,-1.0f); // Низ лево
glVertex3f(-1.0f,-1.0f, 1.0f); // Низ право
glColor3f(1.0f,0.0f,1.0f); // Фиолетовый
glVertex3f( 1.0f, 1.0f,-1.0f); // Верх право квадрата (Право)
glVertex3f( 1.0f, 1.0f, 1.0f); // Верх лево
glVertex3f( 1.0f,-1.0f, 1.0f); // Низ лево
glVertex3f( 1.0f,-1.0f,-1.0f); // Низ право
glEnd(); // Закончили квадраты
xrf -= 0.15;
yrf -= 0.2;
zrf -= 0.25;
}
Uint32 my_callbackfunc(Uint32 interval, void *param){
printf("FPS = %d\n", fps);
fps=0;
return interval;
}
--- Конец кода ---
ASM:
У меня этот код отлично собирается последним MinGW'ом.
Единственное - поменял int main() на int main(int argc, char **argv)
tema_crush:
Для создания приставочного типа несложных игрушек Flash должно хватить.
Навигация
Перейти к полной версии