Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Простое средство создания простой графики:

14K
19 ноября 2008 года
Vurdilla
11 / / 10.05.2006
Люди, вот такой вопрос. Нужно сделать простую визуализацию науки - шарики, цилиндры, полупрозрачность, оттенение, чтобы было видно, что оно объемно. Ну и вращение мышкой и т.п.

Повозился с OpenGL - умри и не встань, из пушек по воробьям, там столько не нужных мне заморочек. Есть средство PovRay - что надо : ты ему говоришь "мне, пожалуйста, сюда цилиндрик такой, сюда такую сферу, сюда вот треугольник; давай, делай картинку". Но очень медленно работает, просто умри, как медленно.

Может, есть какие-то надстройки для OpenGL или альтернативные простые средства, чтобы не думать о том, кто там шейдер, кто там рейдер, а кого потом еще удалить надо?
397
19 ноября 2008 года
SergPas
527 / / 03.02.2007
Цитата:
Простое средство создания простой графики

Что может быть проще OpenGL и её библиотеки glu32.dll (glu.h)... Используй её для визуализации:

Цитата:
шарики, цилиндры

Ну а настройка камеры, света, материалов и т.д. - это уже дело техники... Но тоже не составляет большого труда...

7.2K
19 ноября 2008 года
polaroid
94 / / 05.07.2008
Добавлю, что если ты вообще не хочешь заморачиваться по поводу инициализации граф. режима и обработки сообщений, юзай еще и glut
14K
20 ноября 2008 года
Vurdilla
11 / / 10.05.2006
Цитата: SergPas
Что может быть проще OpenGL и её библиотеки glu32.dll (glu.h)... Используй её для визуализации:
Ну а настройка камеры, света, материалов и т.д. - это уже дело техники... Но тоже не составляет большого труда...



Может, я что-то не то ищу, но вот, например, цитата:
"В заключение, добавлю, что если вы поменяете местами создание цилиндра и сферы, то никакого эффекта прозрачности не увидите. Это не баг, а фича - так задумано. Секрет прост: вы должны сначала рисовать дальние объекты, а потом ближние. Связано это с тем, что выполняется тест глубины. Теперь смотрите, что получается. Если вы сначала рисуете сферу(она удалена), а потом цилиндр, то выполняется это следующим образом. "

И про такого рода "фичи" я везде читаю. Но это же бред!!! Какого рожна простой смертный должен заморачиваться такими, с позволения сказать, фичами?
Там, что, никакой автоматики нет? Включил, пусть FPS=1.0, он мне не важен вообще, но только чтобы просто я задаю объекты - программа рисует.

Надо-то всего на всего вывести трехмерный массив векторов в трехмерном пространства (каждый вектор единичной длины, расположен в узле прямоугольной сетки фиксированного шага, и представляется, как состыкованный конус и цилиндр), причем один слой непрозрачный, остальные - с убывающей прозрачностью + юзер вращает мышкой или клавой все это.
Может, где-то есть готовые решения (заготовки) для вращения мышкой, автосвета и т.п.?

5.1K
20 ноября 2008 года
12345678
93 / / 16.12.2006
Цитата: SergPas
Что может быть проще OpenGL...



Етим все сказано.

Освещение делаеться просто: нужны нормали к векторам и включенный режим GL_LIGHTING. Так же просто выводятся разные графические объекты:

примечание: для разных типов чисел в opengl есть разные функции работы с ними: glVertex3f (принимает три числа float), glVertex3d (принимает три числа типа double) и тд.

Код:
...
glEnable (GL_LIGHTING); // будет свет
glBegin (GL_TRIANGLES); //GL_TRIANGLES - режим построения геометрии
glNormal3f (x,y,z); // нормаль для вектора 0 (а шоп был свет)

glVertex3f (x,y,z); //вектор 0
...
glNormal3f (x,y,z); // нормаль для вектора n
glVertex3f (x,y,z); //вектор n
glEnd ();

SwapBuffers (hDC); // переключаем буфера (копируем на екран)


Три вызваных подряд функции glVertex в данном режиме рисуют трехугольник. Куда проще? Надо понять сам принцип конвеера OpenGL и будет все пучком. А с наскоку (даже с готовыми надстройками над OpenGL ничего небывает).

Нехочу показаться навязчивым, но думаю стоит тебе покопаться в вещах не для "простых смертных" и заглянуть глубже в программирование. Оно тебе ещё пригодитсо (надеюсь).

Кстати, про "фичи":

Что странного в том что нарисованый ранее в буфере кадра объект не меожет быть прозрачным по отношению к следующему объекту?

Да и "фичь" таких не такуж и много.

Забыл добавить:

Относительно вражения сцены:

Код:
float rotatex, rotatey;
bool keys[256];

void draw () {

process_keys ();

glLoadIdentity();

glRotatef (rotatex, 1, 0, 0);
glRotatef (rotatey, 0, 1, 0);

// рисуем сцену

SwapBuffers (hDC);

}

void process_keys () {

if (keys['W']) rotatex -= 0.1;
if (keys['A']) rotatex += 0.1;
if (keys['S']) rotatey -= 0.1;
if (keys['D']) rotatey += 0.1;

}


Код писался с головы но по идее сцена вращаеться по нажатию на те клавиши.
1.9K
24 ноября 2008 года
andriano
474 / / 10.01.2008
Полупрозрачность и тени никаким образом не относятся к простым вещам.
Так что ты уж определись: либо просто, но без полупрозрачности и теней, либо с полупрозрачностью и тенями, но без претензий на простоту.

PS. Можно, конечно, создать API, которое подходит для твоего конкретного случая, и которым тебе будет легко пользоваться, но внутри оно неизбежно будет довольно сложным. И кто кроме тебя его будет писать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог