На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

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



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Обработка ввода Delphi & B3D , Проблемы с обработкой ввода. Нужна помощь
    Здравствуйте, посоветуйте что можно сделать для решения проблемы.

    Имеем стандартную форму Delphi7 и графическую библиотеку Blitz3D.

    При инициализации библиотеки можно задать окно, в которое будет делаться рендер.
    Если не задавать окно, то создастся новое.
    При создании нового окна, ввод обрабатывается, функциями библиотеки, но когда в качестве окна задаёшь, например, окно формы обработать клавиши не получается ни функциями библиотеки, ни стандартным обработчиком OnKeyDown формы в которую редерит B3D.

    Вот исходный бредо-код:

    ExpandedWrap disabled
      unit main;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, Blitz3D, OleCtnrs, ExtCtrls, StdCtrls;
       
      type
        TMainForm = class(TForm)
          procedure FormCreate(Sender: TObject);
          procedure FormDestroy(Sender: TObject);
          procedure InitB3D();
          procedure LoopB3D();
          procedure QuitB3D();
          procedure FormKeyDown(Sender: TObject; var Key: Word;
            Shift: TShiftState);
        private
          { Private declarations }
        public
          { Public declarations }
        end;
       
        TNewThread = class(TThread)
        private
          procedure ProcessLoop();
        protected
          procedure Execute; override;
        end;
       
        TModel = class
        private
        obj: BBObject;
        public
        constructor Create(path:string);
        procedure Scale(size:float = 1);
        procedure Position(x,y,z:integer);
        end;
       
      var
        MainForm: TMainForm;
        b3dState: Boolean;
        model: TModel;
        camera: BBCamera;
        light: BBLight;
       
      implementation
       
      {$R *.dfm}
       
      constructor TModel.Create(path:string);
      begin
        obj:=bbLoadMesh(PAnsiChar(path));
      end;
       
      procedure TModel.Position(x, y, z: integer);
      begin
        bbPositionEntity(obj,x,y,z);
      end;
       
      procedure TModel.Scale(size:float);
      begin
        bbScaleEntity(obj,size,size,size);
      end;
       
      procedure TNewThread.Execute();
      begin
        repeat
          sleep(10);
          Synchronize(ProcessLoop);
        until Terminated;
      end;
       
      procedure TNewThread.ProcessLoop();
      begin
        MainForm.LoopB3D();
      end;
       
      procedure TMainForm.InitB3D();
      begin
        b3dState:=LoadLibrary('b3d.dll');
        if(b3dState) then
        begin
        bbSetBlitz3DHWND(MainForm.Handle);
        bbBeginBlitz3D();
        bbGraphics3D(MainForm.Width,MainForm.Height,32,GFX_WINDOWED);
        bbAntiAlias(1);
        bbSetBuffer(bbBackBuffer());
        model:= TModel.Create('models/BMW325I/BMW325I.3ds');
        camera:=bbCreateCamera();
        bbCameraClsColor(camera,200,200,200);
        bbCameraRange(camera,1,100000);
        light:=bbCreateLight();
        bbPositionEntity(light,50,50,100);
        bbLightRange(light,200);
        bbLightColor(light,250,250,250);
        end;
      end;
       
      procedure TMainForm.LoopB3D();
      begin
      if(b3dState)then
        begin
          if(bbKeyDown(KEY_DOWN)=1)then bbMoveEntity(camera,0,0,-500);
          if(bbKeyDown(KEY_UP)=1)then bbMoveEntity(camera,0,0,500);
          bbUpdateWorld();
          bbRenderWorld();
          bbFlip();
        end;
      end;
       
      procedure TMainForm.QuitB3D();
      begin
        if(b3dState)then bbEndBlitz3D();
      end;
       
      procedure TMainForm.FormCreate(Sender: TObject);
      var newThread:TNewThread;
      begin
        InitB3D();
        newThread:=TNewThread.Create(true);
        newThread.FreeOnTerminate:=true;
        newThread.Priority:=tpNormal;
        newThread.Resume;
      end;
       
      procedure TMainForm.FormDestroy(Sender: TObject);
      begin
        QuitB3D();
      end;
       
       
      procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
      begin
        if(Key=KEY_DOWN)then ShowMessage('sss');
      end;
       
      end.
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0206 ]   [ 15 queries used ]   [ Generated: 8.06.23, 21:38 GMT ]