Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > [Borland C++]Графика/Анимация.


Автор: Mariya 21.10.2006, 23:20
Здравствуйте:-).
Да, я понимаю, что это задание не из легких, но может найдутся люди, поторые помогут мне написать эту программу.
Суть ее заключается в том, что необходимо сделать что то вроде анимации, на которой идет человек(руки, ноги - все движется), и садится на стул.
Даже не имею представления, как это можно сделать...

Автор: Mariya 22.10.2006, 12:19
Есть варианты?

Автор: Alexeis 22.10.2006, 12:53
Mariya, Варианты есть нарисовать кучу картинок и скомпилировать из них GIF или AVI и его показывать.

Автор: Mariya 22.10.2006, 14:05
alexeis1, я могу нарисовать этот сюжет покадрово, будет куча картинок(Gif'оф к примеру), но как это запихнуть в С++, не имею понятия.

Автор: Mariya 22.10.2006, 20:25
Буду рада услышать решения данной задачи, как это звучит не банально, а нужно действительно сильно smile

Автор: Alexeis 22.10.2006, 21:21
Цитата(Mariya @  22.10.2006,  14:05 Найти цитируемый пост)
будет куча картинок(Gif'оф к примеру)

Зачем, GIF хранит в себе все кадры анимации.

Автор: Rickert 23.10.2006, 03:59
Тут можно пойти двумя путями(первые пришли мне на ум):
1) Создать модель, содать скелетную(ил по-кадровую) анимацию для неё, экспортировать это из 3D редактора(Maya или 3DS Max, например) и воспроизвести в своём проекте(который по сути, только и будет заниматься вопроизведением).
2) Взять набор картинок(или видео файл) и ворпсроизвести всё это как видео на экране.

Конкретные вопросы, пожалуйста.

Автор: Mariya 23.10.2006, 11:44
Конкретные вопросы вот:
1. Нельзя ли как нибудь связать Макромедию Флеш и Си++(Могу на макромедии сделать этот сюжет) ?
2. Т.е можно все сделать в 3DS Max, а потом экспортировать в С++? Если я правильно поняла, то с этого момента можно поподробнее?
3. Не совсем понятен вротой вариант, мне не нужно видео, главный критерий, этот сюжет должен быть приложением С++.

Автор: Rickert 23.10.2006, 14:31
Цитата(Mariya @  23.10.2006,  11:44 Найти цитируемый пост)
2. Т.е можно все сделать в 3DS Max, а потом экспортировать в С++?

Да

Цитата(Mariya @  23.10.2006,  11:44 Найти цитируемый пост)
Если я правильно поняла, то с этого момента можно поподробнее?

А что подробнее? Идём на www.wotsit.org, в поиске ищем формат файла 3DS Max, делаем модель/анимацию, грузим её в своём приложении и проигрываем.

Автор: Mariya 23.10.2006, 18:24
Rickert, помогите пожалуйста, искала, так и не нашла на этом сайте (www.wotsit.org)...

Автор: Rickert 24.10.2006, 02:49
Там в поиске: "3d studio"
Так же, если дадите мне мыло, то я вам кину готовые примеры на OGL с gametutorials.com(он сейчас платным стал)

Автор: Гарри 24.10.2006, 16:21
А можно мне тоже самое? Пожалуйстаsmile 
А то я что то подобное нашёл для .obj файлов, но если бы вы прислали для 3ds было бы вообще здорово! 

Эл. почта: [email protected]

Автор: Rickert 24.10.2006, 18:09
Гарри, выслал голубем. Там, кстати, ещё и описание формата полное есть.

Автор: Гарри 24.10.2006, 23:55
Rickert,  Большущее С П А С И Б О !

Голубь прилетел smile  Приютили, накормили, распаковали smile 
Теперь будем разбираться.

И еще раз, премного благодарен!

Автор: Mariya 26.10.2006, 18:27
 Мне не нужно 3d, мне и 2д сойдет, если я правильно поняла, то нам сказал препод "написать график фунцкии на Borland C++", вот мне достался такой сложный smile

Автор: Mariya 27.10.2006, 20:03
Проблема все еще не решена....

Автор: Mariya 5.11.2006, 13:12
Все, помощи не ждать?

Автор: Гарри 5.11.2006, 19:39
Не пойму .. график функции это одно, а анимация другое. Анимация такого рода -  даже двумерная, это, по моему работа на весь семестр. А если трёхмерная, то и на все каникулы.
Может быть нужна какая то простая кривая движения?

Автор: Mariya 6.11.2006, 02:07
Гарри, да, мне нужен просто график функции, 2х мерный, на уроке делали что то типа синусоидов, ну вы поняли, что необходимо:-)

Автор: anotherY 20.2.2007, 20:21
Mariya, может вам и не стоит разбираться с выводом на экран .gif файлов? Просто как вариант, взять что-нибудь вроде Borland C++ v. 3.1, подлючить graphics.h, графику 640x480 16 цветов стандартную и рисовать в нем непосредственно, используя поточечную прорисовку графика?

Автор: serglight 23.10.2007, 21:33
Rickert вышли пожалуйста нуждающемуся на ящик литературку! Я тоже как начинающий столкнулся с рисованием графиков в С++. Даже и незнаю с чего начинать! Куда смотреть и чего нажимать. Скинь пожалуйста и на мой почтовый ящик если тебе не трудно. smile  
Премного ,лагодарен за помощь!
[email protected]

Автор: Rickert 24.10.2007, 04:17
Люди, вас не поймёшь: то вам надо человека со стулом, то теперь графики. Какие каникулы?
Рисование графика - этож 10 - 15 минут работы, если есть уравнение графика.
Значит так, не ленемся и используем google.com.

Автор: Lexa007 10.9.2008, 13:00
Примерчик хороший
Писано в С++ Builder 2007. На форме TButton, TTimer и TImage, с именами по умолчанию.
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Main_SimplAnimation.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAnime *Anime;
//---------------------------------------------------------------------------
short int cadr = 0;           // номер кадра
short int H=30;               // длина ноги и руки
short int Xpos = 3 * H;       // координата опорной ноги
short int Ypos = 120;         // "земля"
short int Hmen = 30;          // высота тела
short int Rhead = 10;         // радиус головы
short int revers = 1;         // направление движения
short int L = H * 1.41;       // длина ноги
short int Ncadr=16;           // число кадров на шаг
//---------------------------------------------------------------------------
__fastcall TAnime::TAnime(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TAnime::Draw()
{
    float Angl = M_PI/4*(1+(2.*cadr)/(Ncadr-1));
    short int Yb = Ypos-H*sin(Angl);
    short int Yt = Yb-Hmen;
    short int X = Xpos-revers*H*cos(Angl);

    Image1->Canvas->MoveTo(X-(Xpos-X),Ypos);
    Image1->Canvas->LineTo(X,Yb);        // нога
    if (cadr != Ncadr / 2-1)  Image1->Canvas->LineTo(Xpos,Ypos); // другая нога
    Image1->Canvas->MoveTo(X,Yb);
    Image1->Canvas->LineTo(X,Yt);        // туловище
    short int X1 = X - revers * (Yb-Ypos);
    Image1->Canvas->MoveTo(X1,Yt+5-(Xpos-X));
    Image1->Canvas->Ellipse(X1-Rhead / 2,Yt+5-(Xpos-X)-Rhead / 2,X1+Rhead / 2,Yt+5-(Xpos-X)+Rhead / 2);
    Image1->Canvas->LineTo(X,Yt+5);      // рука
    if (cadr != Ncadr / 2-1)
    {
        Image1->Canvas->Ellipse(X1-Rhead / 2,Yt+5+(Xpos-X)-Rhead / 2,X1+Rhead / 2,Yt+5+(Xpos-X)+Rhead / 2);
        Image1->Canvas->LineTo(X1,Yt+5+(Xpos-X)); // другая рука
    }
    Image1->Canvas->Ellipse(X-Rhead,Yt-2*Rhead,X+Rhead,Yt);
    Image1->Canvas->Rectangle(X-Rhead,Yt-2*Rhead-4,X+Rhead,Yt-2*Rhead-1);  // шляпа
}
//---------------------------------------------------------------------------
void __fastcall TAnime::Button1Click(TObject *Sender)
{
    DoubleBuffered = true;
    Timer1->Enabled = ! Timer1->Enabled;
}
//---------------------------------------------------------------------------
void __fastcall TAnime::FormCreate(TObject *Sender)
{
    Image1->Canvas->MoveTo(0,Ypos+3);
    Image1->Canvas->Pen->Width = 4;
    Image1->Canvas->LineTo(Image1->ClientWidth,Ypos+3); // земля
    Image1->Canvas->Pen->Width = 1;
    Image1->Canvas->Pen->Mode = pmNotXor;
    Timer1->Interval = 600 / Ncadr;
    Draw();
}
void __fastcall TAnime::Timer1Timer(TObject *Sender)
{
     Draw();
     cadr = (cadr+1) % Ncadr;
     if (cadr == 0)
        if ((Xpos < Image1->Picture->Width-revers*3*H) && (Xpos>-revers*3*H))
            Xpos += revers*H*1.41;
        else revers = -revers;
     Draw();
}
//---------------------------------------------------------------------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)