29.05.2013, 11:01
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OpenGL вопросы
Сообщение от tempora
|
Уверен, что для запуска OpenGL'ного окружения потребовалось бы больше времени, чем для написания простого GD-ёвого.
|
Ошибаешься . Вот пример . Пока не мой, но практически все что нужно.
Окромя масштабирования . Весит debug -38 кб + либа фриглута 230 кб/
Release - 10kб.
Код:
|
#include ‹stdlib.h›
#include ‹time.h›
#include ‹gl/glut.h›
// constants representing the window size
#define WINDOW_WIDTH 320
#define WINDOW_HEIGHT 240
// Initialization
void init ();
// Callback functions
void display (void);
void mouse (int button, int state, int x, int y);
void keyboard (unsigned char key, int x, int y);
// Support Functions
void centerOnScreen ();
// define the window position on screen
int window_x;
int window_y;
// variable representing the window title
char *window_title = "Image Generator";
// Tells whether to display the window full screen or not
// Press Alt + Esc to exit a full screen.
int full_screen = 0;
// Generates a random image...
void generateImage ();
// Represents the pixel buffer in memory
GLubyte buffer[WINDOW_WIDTH][WINDOW_HEIGHT][3];
//-------------------------------------------------------------------------
// Set OpenGL program initial state.
//-------------------------------------------------------------------------
void init ()
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
srand (time(NULL));
generateImage();
}
//-------------------------------------------------------------------------
// This function is passed to glutDisplayFunc in order to display
// OpenGL contents on the window.
//-------------------------------------------------------------------------
void display (void)
{
glClear(GL_COLOR_BUFFER_BIT);
glDrawPixels(WINDOW_WIDTH, WINDOW_HEIGHT, GL_RGB,
GL_UNSIGNED_BYTE, buffer);
glutSwapBuffers ();
}
//-------------------------------------------------------------------------
// This function is passed to the glutMouseFunc and is called
// whenever the mouse is clicked.
//-------------------------------------------------------------------------
void mouse (int button, int state, int x, int y)
{
if (state == GLUT_DOWN)
{
generateImage ();
glutPostRedisplay ();
}
}
//-------------------------------------------------------------------------
// This function is passed to the glutKeyboardFunc and is called
// whenever the user hits a key.
//-------------------------------------------------------------------------
void keyboard (unsigned char key, int x, int y)
{
switch (key)
{
case 'g':
generateImage ();
glutPostRedisplay ();
break;
case 27:
exit (0);
}
}
//-------------------------------------------------------------------------
// This function sets the window x and y coordinates
// such that the window becomes centered
//-------------------------------------------------------------------------
void centerOnScreen ()
{
window_x = (glutGet (GLUT_SCREEN_WIDTH) - WINDOW_WIDTH)/2;
window_y = (glutGet (GLUT_SCREEN_HEIGHT) - WINDOW_HEIGHT)/2;
}
//-------------------------------------------------------------------------
// Generate new image with random colors
//-------------------------------------------------------------------------
void generateImage ()
{
int i, j;
for (i = 0; i ‹ WINDOW_WIDTH; i++)
{
for (j = 0; j ‹ WINDOW_HEIGHT; j++)
{
buffer[i][j][0] = (GLubyte) (rand () % 256);
buffer[i][j][1] = (GLubyte) (rand () % 256);
buffer[i][j][2] = (GLubyte) (rand () % 256);
}
}
}
//-------------------------------------------------------------------------
// Program Main method.
//-------------------------------------------------------------------------
void main (int argc, char **argv)
{
// Connect to the windowing system
glutInit(&argc, argv);
// create a window with the specified dimensions
glutInitWindowSize (WINDOW_WIDTH, WINDOW_HEIGHT);
// Set the window x and y coordinates such that the
// window becomes centered
centerOnScreen ();
// Position Window
glutInitWindowPosition (window_x, window_y);
// Set Display mode
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE);
// Create window with the specified title
glutCreateWindow (window_title);
// View in full screen if the full_screen flag is on
if (full_screen)
glutFullScreen ();
// Set OpenGL program initial state.
init();
// Set the callback functions
glutDisplayFunc (display);
glutKeyboardFunc (keyboard);
glutMouseFunc (mouse);
// Start GLUT event processing loop
glutMainLoop();
} |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 29.05.2013 в 11:28.
|
|
|
|
29.05.2013, 11:35
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OpenGL вопросы
minGW в составе CodeBlocks . Правленый шаблон под glut .
Здесь конечно надобно посмотреть - как у него с дабагом .
Кстати кто что насоветует на эту тему ?
В чем дебажить лучше ?
__________________
Осторожно , злой кот
|
|
|
|
29.05.2013, 19:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: OpenGL вопросы
Сообщение от dosikus
|
Ошибаешься. Вот пример.
|
Сразу предупрежу - я не спорю, так как твоего интереса к OpenGL'ю уже достаточно, чтобы остановить свой выбор на поиске решения именно в этом направлении, но всё же...
интересно, как это ты решил, что X меньше Y, зная значение только X ... а?
Если бы интерес был только в том, чтобы отлаживать на ПиСе алгоритмы формирования дисплейного буфера, перед их зашиванием в кристалл, то достаточно было бы освоить ( а скорее всего - просто вспомнить) команды текстового редактора, чтобы сразу же и приступить к тестированию. То есть, никаких либ, никакого API - "сразу в бой", или, по-ихнему - " up and run".
И только из-за твоего отдельного интереса к OpenGL'ю я перестал рекомендовать это решение.
__________________
There's always more than one way to skin a cat.
|
|
|
|
29.05.2013, 19:59
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Сообщение от tempora
|
Если бы интерес был только в том, чтобы отлаживать на ПиСе алгоритмы формирования дисплейного буфера,
|
Ну допустим , что я не только openGL пробовал и буду пробовать. И уж обвязка и манипуляции с созданием проекта /установкой IDE и т.д. и т.п. НЕ ТОЛЬКО OPENGL мне известны . Пока все не в пользу остальных.
И я же не озвучил что остановлюсь на этом варианте окончательно.
Кусок кода что я привел, тем более не все что нужно в итоге. Я думал что ты поймешь. Имелось ввиду - все что нужно для дальнейшей работы .
Кстати , а что ты все хочешь предложить ? Только не QT и подобное ...
Сообщение от tempora
|
то достаточно было бы освоить (а скорее всего - просто вспомнить) команды текстового редактора, чтобы сразу же и приступить к тестированию. То есть, никаких либ, никакого API - "сразу в бой", или, по-ихнему - "up and run".
|
Это не осознал полностью . Ты о чем счас ? Колись .
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 29.05.2013 в 20:18.
|
|
|
|
29.05.2013, 20:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: OpenGL вопросы
Сообщение от dosikus
|
Я думал что ты поймешь.
|
По такому куцему "описанию" поймёшь, как же.
Сообщение от dosikus
|
Ты о чем счас? Колись.
|
Отписал в личку.
__________________
There's always more than one way to skin a cat.
|
|
|
|
02.06.2013, 19:36
|
|
Частый гость
Регистрация: 30.01.2009
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: OpenGL вопросы
Сообщение от dosikus
|
minGW в составе CodeBlocks . Правленый шаблон под glut .
Здесь конечно надобно посмотреть - как у него с дабагом .
Кстати кто что насоветует на эту тему ?
В чем дебажить лучше ?
|
Лично я дебажу диагностическими сообщениями (printf), поэтому ничего не посоветую. Дебаггер вещь удобная, но не всегда применимая - сетевые приложения, многопоточные ему не по зубам обычно. Хотя может я не умею их готовить просто.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:50.
|
|