TO DoomCross
|
|
Svake | Дата: Четверг, 21.02.2008, 18:11 | Сообщение # 1 |
 Лейтенант
Группа: Модераторы
Сообщений: 25
Статус: Offline
| я делал так: сделлал класс TEngine т.е. сам движок, в нем происходит инициализация и тд. и рендер. затем создал класс TEngineObject ну это объект создал в нем процедуру прорисовки Draw в нем прописал матрицы, затем создал класс TEngineMesh - наследник класса TEngineObject в нем тоже создал процедуру Draw и унаследовал ее на Delphi это выглядит так: TEngineObject=classs ....... function Draw:HResult; ..... end; TEngineMesh=class(TEngineObject) ......... function Draw:HResult; override; ......... end; .............. function TEngineMesh.Draw:HResult; begin Inherited Draw; ................ end; а в рендере движка писал так: function TEngine.Render:HResult; begin Result := ClearDevice; if FAILED(Result) then EXIT; FD3DDevice.BeginScene; try if FNobj>=0 then for i:=0 to FNobj-1 do FObjects[i].Draw; finally FD3DDevice.EndScene; end; FD3DDevice.Present(NIL, NIL, 0, NIL); end; FObjects - это динамический массив объектов если что то не понятно пиши, в другом случае затери эту тему.
ﻕﺭﯛﻂﻣﻯ ﭳﯛﻭﻣﻕ я ктулху...бойтесь меня
|
|
| |
DoomCross | Дата: Вторник, 26.02.2008, 18:14 | Сообщение # 2 |
 Admin
Группа: Администраторы
Сообщений: 34
Статус: Offline
| Svake, Сам принцип понятен. Но я хочу не отрисовывать объекты через цикл, с помощью массива, а хочу, чтобы каждый объект сам себя рисовал. Но при использовании DXUT все как-то глючит... Заместь черного экрана (как это обычно бывает, если что-то не работает)))) появляется какой-то болотного цвета мигающий монитор... Короче, я думал так, что в конструкторе запустить функцию прорисовки, которая потом сама себя вызывает. Но и так тоже не выходит. Даже не знаю, что еще можно попробовать...
Не мертво то, что в вечности живет. Со смертью времени и смерть умрет. -------------------------------------------- Visual C++ 2005, DirectX9.0 (November), Windows XP
|
|
| |
Svake | Дата: Вторник, 26.02.2008, 19:56 | Сообщение # 3 |
 Лейтенант
Группа: Модераторы
Сообщений: 25
Статус: Offline
| НЕ DXUT я не использую т.ч. не знаю даже чем помочь, можно впринцыпи масивом не делать но от этого пострадает удобность, т.е. писать Device.BeginScene; obj.draw; ....... device.endscene; но разницы я не вижу.
ﻕﺭﯛﻂﻣﻯ ﭳﯛﻭﻣﻕ я ктулху...бойтесь меня
|
|
| |
DoomCross | Дата: Четверг, 28.02.2008, 15:43 | Сообщение # 4 |
 Admin
Группа: Администраторы
Сообщений: 34
Статус: Offline
| Svake, Ты не правильно понял. Я хочу сделать так, чтобы объект сам себя рисовал. Чтобы типа Code Device.BeginScene; obj.draw; ....... device.endscene; было внутри, например, функции Draw() самого объекта. И в конструкторе объекта запускаешь эту самую функцию, и зацикливаешь ее. Так по-моему, проще. Но возможно ли это реализовать?
Не мертво то, что в вечности живет. Со смертью времени и смерть умрет. -------------------------------------------- Visual C++ 2005, DirectX9.0 (November), Windows XP
|
|
| |
Svake | Дата: Четверг, 28.02.2008, 16:34 | Сообщение # 5 |
 Лейтенант
Группа: Модераторы
Сообщений: 25
Статус: Offline
| Quote Device.BeginScene; obj.draw; ....... device.endscene; а это разве не то что ты имеешь ввиду?
ﻕﺭﯛﻂﻣﻯ ﭳﯛﻭﻣﻕ я ктулху...бойтесь меня
|
|
| |
DoomCross | Дата: Четверг, 28.02.2008, 16:44 | Сообщение # 6 |
 Admin
Группа: Администраторы
Сообщений: 34
Статус: Offline
| ?????????? Короче, вот типа так: Code class AnimatedObject { public:
AnimatedObject() //Конструктор { LoadObject() DrawObject() } LoadObject() { ........ //Процедура загрузки меша, текстур и т.д. и т.п. } DrawObject() { ........ //Прорцедура отрисовки с BeginScrene() и EndScene() DrawObject() //Типа зацикливаем отрисовку, но не знаю правильно ли будет так... }
}; Тока не знаю, как это будет на Делфи... Такова моя идея. Но не знаю реальна ли она, и можно ли ее реализовать. Но в програме все будет просто: Code AnimatedObject("FILENAME", pd3dD3vice) //Как параметры в конструктор передаются только путь к файлу, и указатель на Device А потом он сам себя рисует... Такова идея...
Не мертво то, что в вечности живет. Со смертью времени и смерть умрет. -------------------------------------------- Visual C++ 2005, DirectX9.0 (November), Windows XP
|
|
| |
Svake | Дата: Четверг, 28.02.2008, 16:54 | Сообщение # 7 |
 Лейтенант
Группа: Модераторы
Сообщений: 25
Статус: Offline
| Quote DrawObject() { ........ //Прорцедура отрисовки с BeginScrene() и EndScene() DrawObject() //Типа зацикливаем отрисовку, но не знаю правильно ли будет так... } по моему это будет выполнятся бесконечно, и тем более зачем Quote { ........ //Прорцедура отрисовки с BeginScrene() и EndScene() DrawObject() //Типа зацикливаем отрисовку, но не знаю правильно ли будет так... } вызывать повторно?
ﻕﺭﯛﻂﻣﻯ ﭳﯛﻭﻣﻕ я ктулху...бойтесь меня
|
|
| |
DoomCross | Дата: Четверг, 28.02.2008, 16:57 | Сообщение # 8 |
 Admin
Группа: Администраторы
Сообщений: 34
Статус: Offline
| Ну, а как? Эта процедура, получается, как основная процедура отрисовки в главном приложении. Повторяется постоянно.
Не мертво то, что в вечности живет. Со смертью времени и смерть умрет. -------------------------------------------- Visual C++ 2005, DirectX9.0 (November), Windows XP
|
|
| |
Svake | Дата: Четверг, 28.02.2008, 17:02 | Сообщение # 9 |
 Лейтенант
Группа: Модераторы
Сообщений: 25
Статус: Offline
| я имел ввиду бесконечно т.е. в одном рендере, у тебя комп будет показывать 1фпс, а тут пропиши { pd3device->BeginScrene(); // а тут пропиши рендер меша и матрицы pd3device->EndScene() }
ﻕﺭﯛﻂﻣﻯ ﭳﯛﻭﻣﻕ я ктулху...бойтесь меня
|
|
| |