Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2014, 15:40   #1
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию Пример: приложение на opengl

Код:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
#include <string.h>
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
#pragma comment(lib,"user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib,"gdi32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib, "glut32.lib")
HRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
struct c_program
{
WNDCLASSEX wc;
MSG msg;
HWND hwnd;

int pixelformat;
PIXELFORMATDESCRIPTOR pfd;
HDC hdc;
HGLRC hrc;

struct point1
{
float x, y, z;
point1(){x=0;y=0;z=0;}
point1(float a, float b, float c){x=a;y=b;z=c;}
};

struct vertex1
{
struct point1* a;
struct vertex1* next;
vertex1(){a=NULL; next= NULL;}
vertex1(float a1, float b, float c){next=NULL; a= new point1(a1, b, c);}
void add(float a, float b, float c){ struct vertex1* a1 = this; while(a1->next !=NULL) a1 = a1->next; a1->next= new vertex1(a,b,c);}
void draw(){if(a) glVertex3f(a->x, a->y, a->z); if(next!=NULL) next->draw();}
};

struct vertex1* vt;

void construct_data(){ vt = NULL; create_vertices();}
void create_vertices(){vt = new vertex1(0,0,0); vt->add(1.0, 0.0, 0.0); vt->add(1.0, 1.0, 0.0);}
void draw_vertices(){if(vt) vt->draw();}
void draw_sphere(){ GLUquadricObj* quadObj; quadObj = gluNewQuadric(); gluQuadricDrawStyle(quadObj, GLU_FILL); glColor3f(1,0,0); gluSphere(quadObj, 2, 10,10); glRotatef(3,0,1,0); gluDeleteQuadric(quadObj);}
void draw_triangles(){glBegin(GL_TRIANGLES); draw_vertices(); glEnd();}
void clear_opengl(){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glClearColor(0.25f, 0.25f, 0.75f, 0.25f);}
void draw_opengl(){ clear_opengl(); draw_sphere(); draw_triangles(); SwapBuffers(hdc);}

void init_light(){glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); float p[4]={3,3,3,1}; float d[3]={-1,-1,-3}; glLightfv(GL_LIGHT0, GL_POSITION, p); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION,d);}
void init_viewport(){glViewport(0,0,GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-5,5,-5,5,2,12); gluLookAt(0,0,5,0,0,0,0,1,0); glMatrixMode(GL_MODELVIEW); glEnable(GL_COLOR_MATERIAL); glEnable(GL_DEPTH_TEST); init_light();}
void set_pixel_format(){pixelformat=ChoosePixelFormat(hdc, &pfd); SetPixelFormat(hdc, pixelformat, &pfd);}
void init_pixel_format(){ pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion=1;pfd.dwFlags=PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER|PFD_DRAW_TO_WINDOW;pfd.iPixelType=PFD_TYPE_RGBA;pfd.cColorBits=32;}
void init_opengl(){hdc=GetDC(hwnd); init_pixel_format(); set_pixel_format(); hrc=wglCreateContext(hdc); wglMakeCurrent(hdc,hrc); init_viewport();}

c_program(){ set_locale(LC_ALL,"Russian"); construct_data();};
~c_program(){}
int main(){ HINSTANCE hInstance=GetModuleHandle(0); LPSTR CommandLine = GetCommandLine(); return WinMain(hInstance, NULL, CommandLine, SW_SHOWDEFAULT);};
void create_wndclass(HINSTANCE hInst){ wc.cbSize=sizeof(WNDCLASSEX); wc.style=CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc=(WNDPROC)WndProc; wc.cbClsExtra=NULL; wc.cbWndExtra=NULL;wc.hInstance=hInst;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName="MainMenu"; wc.lpszClassName="SimpleWinClass"; wc.hIcon=LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm=LoadIcon(NULL, IDI_APPLICATION); wc.hCursor=LoadCursor(NULL, IDC_ARROW);RegisterClassEx(&wc);}
void create_windows(HINSTANCE hInst){ hwnd=CreateWindowEx(NULL, "SimpleWinClass","host",WS_OVERLAPPEDWINDOW, 100,100,1000,1000,NULL,(HMENU) NULL,hInst, NULL); ShowWindow(hwnd, SW_SHOWNORMAL)! UpdateWindow(hwnd);}
int message_cycle(){while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg); DispatchMessage(&msg);} return msg.wParam;}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR CmdLine, int CmdShow){create_wndclass(hInst); create_windows(hInst); init_opengl(); return message_cycle();}
};
c_program z;
int main(int argc, char* argv[]){ return z.main();}

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY: PostQuitMessage(NULL); return 0;
case WM_PAINT: z.draw_opengl(); return 0;
default: return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return DefWindowProc(hwnd,uMsg, wParam,lParam);
}
Может быть, кому-то пример будет полезным.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 02.09.2014, 16:05   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)форматирование ужас.
2)устаревшая версия OpenGL.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.09.2014, 16:36   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Источники кода:
1. http://www.gamedev.ru/code/articles/?id=4268 (OpenGL: Основы. 16.02.2012)
2. http://www.gamedev.ru/code/articles/OpenGL_Delphi (Основы программирования OpenGL в Borland С++Builder и Delphi. 02.05.2003)
3. MSDN

Учитывая то, что делается в первый раз, устаревшая версия или нет, неважно.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 02.09.2014, 16:44   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Учитывая то, что делается в первый раз, устаревшая версия или нет, неважно.
вполне важно, ибо рисование в 4+ совсем иное.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2014, 16:08   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)форматирование ужас.
2)устаревшая версия OpenGL.
ПОСМОТРИ ФОРМАТИРОВАНИЕ jQuery В КЭШЕ СВОЕГО БРАУЗЕРА
НЕМАЛО lulz СЛОВИШЬ и от самого кода и от форматирования
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 23.09.2014, 00:41   #6
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Не, это все фигня. OpenGL - кроссплатформенная библиотека. Так жестко привязывать ее к винде очень плохо. Ладно, если бы вы assembler код выложили - другое дело.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 23.09.2014, 09:52   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
ПОСМОТРИ ФОРМАТИРОВАНИЕ jQuery В КЭШЕ СВОЕГО БРАУЗЕРА
НЕМАЛО lulz СЛОВИШЬ и от самого кода и от форматирования
У, какая печалька.
Вы в курсе, большинство js-фреймворков поставляются в 2 версиях - "девелоперской" и "клиентской", первая из которых красиво оформленая, с комментами и прочими няшками, а вторая обрезанная по самое не могу для уменьшения контента, затягиваемого из инета на комп юзера, являющая собой только код, сваленный в нечитамую, но работающую кашу, и часто даже файлик с такой версией фреймворка имеет приписку 'min'.

И уж тем более, нашли, чем оправдываться, если так даже и делает кто-то где-то там, это не повод писать говнокод с говностайлом.
А уж про архитектуру кода вообще молчу. Это у вас всё write-only и не подходит практически больше ни для каких целей, ни для усовершенствования/развития в какой-то готовый проект, ни для обучения.
phomm вне форума Ответить с цитированием
Старый 23.09.2014, 10:15   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
ПОСМОТРИ ФОРМАТИРОВАНИЕ jQuery В КЭШЕ СВОЕГО БРАУЗЕРА
НЕМАЛО lulz СЛОВИШЬ и от самого кода и от форматирования
я прекрасно знаю что там происходит, и в отличие от вас знаю причины.
вы бы еще обфусцировали код по самое не куда и говорили бы тоже самое.

дев версия кода приятно отформатирована.
https://github.com/jquery/jquery

продакш версия квери пожата чтоб меньше грузить трафика(причем там солидная разница)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.09.2014, 15:43   #9
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
У, какая печалька.
Вы в курсе, большинство js-фреймворков поставляются в 2 версиях - "девелоперской" и "клиентской", первая из которых красиво оформленая, с комментами и прочими няшками, а вторая обрезанная по самое не могу для уменьшения контента, затягиваемого из инета на комп юзера, являющая собой только код, сваленный в нечитамую, но работающую кашу, и часто даже файлик с такой версией фреймворка имеет приписку 'min'.

И уж тем более, нашли, чем оправдываться, если так даже и делает кто-то где-то там, это не повод писать говнокод с говностайлом.
А уж про архитектуру кода вообще молчу. Это у вас всё write-only и не подходит практически больше ни для каких целей, ни для усовершенствования/развития в какой-то готовый проект, ни для обучения.
Выложите свой код чтобы мы могли оценить ваш код и ваш стайл в создании игры heroes of might and magic , а то трындеть не мешки ворочать
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 26.09.2014, 08:26   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

"Вы хочите песен? Их есть у меня" © Шнур.

Сильвупле
http://code.google.com/p/aethra-cronicles-remake/ В общих чертах это типа 2д движок для рогаликов и адвенчур с рендерером на GDI с планами на кроссрендер (пока на FastLib хотя бы). Ну и там заготовка (в даунлоадс старая версия 0.14) с "бегающими кружочками" для типа игры, которую хотели писать поверх движка, но не сложилось. Возможно, когда-то вернусь и слабаю что-то удобоваримое.
самая мякотка http://code.google.com/p/aethra-cron...nk/Upixeng.pas

Писалось, правда, не для паблика, поэтому код не прибран (не нужные/тестовые вещи откоменчены, нейминг и стаел не везде отслежен), хотя для Вас, как я понимаю, нет разницы, писать для паблика или нет.
Большинству вопросов служит оправданием 2,5 годичная давность кода (последние коммиты не в счёт, т.к. я их просто не кидал в репо до декабря 2013, последняя реальная работа над кодом заморожена была в марте 2012, это видно по даунлоадсам от июля 2012, я ушёл на другой проект тогда, и этот не трогал, если не считать копеечных правок да добавления стороннего басс-саунд-враппера от друга), но даже тогда я старался писать грамотно, хотя был ещё "начинающим".
Свежий билд можно собрать из исходников, но можно просто чекаутом всё вытащить и запускать экзешник.

Если в паскале ниасилятор, могу запилить из недавнего на сишарпе, всё хочу в тему "учебного-фидбекового" характера оформить работу написанную на заказ.

Текущий же свой код я не показываю практически, хотя кое-что есть на паблике, если поискать, но то не самые сильные мои проекты.

Резюмируя - не стоит позиционировать свою работу как учебную, как "пример". Лучше работайте "в стол", а как будет что показать - выкладывайте (Я вот не лезу учить, хотя индивидуально учу людей, когда просят).
А примеров и статей по опенглу, причём хороших, достаточно (NeHe, ogltutor или Крендель), а такими вбросами вы только путаете новичка.

Последний раз редактировалось phomm; 26.09.2014 в 08:45.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Каталог-приложение по OpenGL в Delphi P.A.S.C.A.L. Помощь студентам 0 24.04.2011 17:02
Простейшее приложение в OpenGL Fataller Общие вопросы .NET 6 10.09.2010 23:19
Не открывается приложение OpenGL LMnet Помощь студентам 1 03.03.2010 18:51
как сделать что-бы приложение считывало с Editа пример (6+2-4*3) и решало его zmey31313 Общие вопросы Delphi 2 11.01.2010 14:40
Задача:в вижуал с++ Разработать приложение-сервер и приложение (смотри дальше сообщение) Мила777 Фриланс 2 21.10.2009 11:05