{{notification.text}}

MirGames

battlemakc

Сызрань
Зарегистрирован 06.08.08 19:37
Последний раз был в сети 28.05.10 01:38
Текст Не Выводится
29.08.09 20:28
Все короче я сам разобрался. За сутки) Пойду щас выругаюсь хорошенько на когонибудь но сначало дам пример рабочьего кода:

Цитата
D3DXCreateFont(
Direct3DDevice9,
24,
0,
FW_NORMAL,
500,
false,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
DEFAULT_PITCH or FF_DONTCARE,
PChar('Arial'),
Font
);
Перевернутые нормали?
28.08.09 19:26
Цитата(ws_ @ 12.03.2009 - 11:28) [snapback]94105[/snapback]

Поменял свойство FreeForm.NormalsOrientation на mnoDefault
вначале загружаю гриб
Изображение

меняю на чайнек
Изображение
Вы правы, похоже что моделька гриба неправильная)


Это не моделька не пральная) Она предназначенна для использования в ролe комнаты в демке. А уже потом ее приделали как гриб.
Текст Не Выводится
28.08.09 18:11
Цитата
3. Вывод текста с ID3DXFont

В D3D существует много различных способов вывода текста, один из них это интерфейс ID3DXFont. Если вы ещё не скопировали D3DX библиотеку в WINDOWS/System, то сейчас самое время. Для начала нужно добавить юнит D3DX9 в uses и создать переменную g_Font: ID3DXFont. Далее его нужно инициализировать:
Код на языке Delphi
function TForm1.CreateFont(FontName: string; Size: cardinal): HRESULT;
begin
Result := E_FAIL;

//Здесь можно указать множество параметров шрифта
//после выполнения этой функции g_Font должен стать
//рабочим объектом.
Result := D3DXCreateFont(
g_Device,
Size,
0,
FW_NORMAL,


Ты думаешь тут все такие глупые? Это не ширина буквы. ЛОЛ
Текст Не Выводится
28.08.09 01:44
Ща пробну

Direct3DDevice9.BeginScene;

TextRect := Rect(0,0,0,0);
Font.DrawTextA(nil,PChar('Hellow World!!!'),-1,@TextRect,DT_LEFT or DT_NOCLIP,clRed);

Direct3DDevice9.EndScene;

не пашет.
Текст Не Выводится
28.08.09 01:32
Цитата(XProger @ 27.08.2009 - 21:27) [snapback]97703[/snapback]

Почему текст рисуется только при создании формы и вообще вне блоков BeginScene/EndScene без установки матриц?

Потомучто так писал Den в статье на этом сайте) Там просто была своя процедура отрисовки текста а куда ее засунуть написанно не было.
Текст Не Выводится
28.08.09 01:13
Привет. Непойму почему не показывает текст. Вот код программы:

Цитата

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Direct3D9, D3DX9, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Direct3D: IDIrect3D9;
Direct3DDevice9: IDirect3DDevice9;
Font: ID3DXFont;
function Initialize: HRESULT;
end;

var
Form1: TForm1;
TextRect: TRect;

implementation

{$R *.dfm}

function TForm1.Initialize: HRESULT;
var
D3DPresentParameters: TD3DPresentParameters;
begin
//Данная процедура считается не успешно выполненой если
//она не дошла до конца.
Result:= E_FAIL;

//Создание главного объекта D3D
Direct3D := Direct3DCreate9(D3D_SDK_VERSION);
//Если по какой-то причине D3D объект не был создан, то прекращаем работу
if (Direct3D = nil) then Exit;

//Очищаем переменную с параметрами
FillChar(D3DPresentParameters, SizeOf(D3DPresentParameters), 0);

//Настраиваем оконный режим
//(для инициализации в полноэкранном режиме не достаточно смены параметра Windowed на false)
D3DPresentParameters.Windowed := true;// Режим окна.
//Этот параметр влияет на вертикальную синхронизацию в полноэкранном режиме,
//в оконном режиме для включения вертикальной синхронизаци, нужно поставить
//этот параметр на D3DPRESENT_INTERVAL_ONE и изменить SwapEffect на D3DSWAPEFFECT_COPY.
//D3DPRESENT_INTERVAL_IMMEDIATE - выключение вертикальной синхронизации
//D3DPRESENT_INTERVAL_ONE - включение вертикальной синхронизации
D3DPresentParameters.PresentationInterval := D3DPRESENT_INTERVAL_IMMEDIATE;

D3DPresentParameters.MultiSampleType := D3DMULTISAMPLE_NONE;
D3DPresentParameters.EnableAutoDepthStencil := true;


//формат Z и Stencil буффера (D3DFMT_D16 - 16 битный z буффер, stencil буффер выключен)
D3DPresentParameters.AutoDepthStencilFormat := D3DFMT_D16;

//В большинстве случаев SwapEffect должен быть установлен на D3DSWAPEFFECT_DISCARD
//Если в оконном режиме требуется вертикальная синхронизация, то этот
//параметр должен быть D3DSWAPEFFECT_COPY
D3DPresentParameters.SwapEffect := D3DSWAPEFFECT_DISCARD;
D3DPresentParameters.Flags:=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
//BackBuffer есть поверхность на которой будет отображаться вся графика,
//следовательно здесть устанавливаются её параметры.
//в оконном режиме BackBufferFormat должен всегда быть D3DFMT_UNKNOWN,
//т.к. D3D придётся работать с тем форматом который уже стоит в системе.
D3DPresentParameters.BackBufferCount := 1;
D3DPresentParameters.BackBufferWidth := Width;
D3DPresentParameters.BackBufferHeight := Height;
D3DPresentParameters.BackBufferFormat := D3DFMT_UNKNOWN;//D3DFMT_A8R8G8B8 - в полноэкранном режиме.

//После того как все параметры установлены можно создавать g_Device
//почти все дальнейшие действия будут выполняться через g_Device
//а не через g_D3DObject
Result := Direct3D.CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
Handle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
@D3DPresentParameters,
Direct3DDevice9);

//Если по какой-то причине g_Device не был создан,
//то прекращаем выполнение функции, при этом нужно
//освободить все ранее созданные объекты
if FAILED(Result) then
begin
Direct3DDevice9 := nil;
Exit;
end;

//Если процедура дошла до конца, то она считается успешно выполненой
Result := S_OK;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
// Очищаем поверхность и готовим к отрисовке.
Direct3DDevice9.Clear(0,
nil,
D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,$AACCFFBB,1.0,0);
Direct3DDevice9.BeginScene;
// Отрисовка.

Direct3DDevice9.EndScene;
Direct3DDevice9.Present(nil,nil,0,nil);// Показ.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Initialize;
// Создание шрифта.
D3DXCreateFont(
Direct3DDevice9,// Устройство.
12,// Высота.
0,// Ширина.
FW_NORMAL,// Тип.
1,
false,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
DEFAULT_PITCH or FF_DONTCARE,
PChar('Arial'),
Font// Фонт который создаем.
);

// Рисуем текст.
TextRect := Rect(0,0,0,0);
Font.DrawTextA(nil,PChar('Hellow World!!!'),-1,@TextRect,DT_LEFT or DT_NOCLIP,clRed);

end;

end.
Glscene+камера+перемещение
28.08.09 00:35
Цитата(Hexer @ 27.08.2009 - 19:31) [snapback]97700[/snapback]

Спасибо друг) Помогло)))))) А вообще, щас порылся на GLScene и нашел исходники авиасимулятора там...Если интересно и не видел посмотри))))

Рад что помогло) Исходники я видел и даж свою стрелялку писал.
Glscene+камера+перемещение
27.08.09 02:34
В общем делаешь Dummy Cube вроди так называетцо. В него суешь модельку корабля и камеру. Камере задаешь координаты и ставишь в таргер другой Dummy cube который тоже находится в первом. При повороте корабля поварачиваешь основной Dammy. Короче погоди щас те напишу пример. Не уходи)
Rand()
22.08.09 19:09
Блииин. Проблема в том что в гугле ниче нету по этой теме там всякая ерунда. Проблема еще в том, что вызвать ранд мне надо не 2 раза а 10 000 это ваще блин нафик даже незнаю((((((((((( Помогите!

return rand()*100000 + rand()*10000 + rand()*1000 + rand()*100 + rand()*10; тож нето( Может свой генератор придумать?


**************
Давайте соберемся и реально напишем генератор случайных чисел в диапазоне от 0 до 1000 000 000 000

или -500 000 000 000 до +500 000 000 000 ^_^
Rand()
22.08.09 19:00
О май гайребал у меня тоже(((


Спс пробну)
Rand()
22.08.09 18:55
ТЫ мне скажи что делать надо )

Черт и что делать-то если надо большую точность получить!?
Rand()
22.08.09 18:53
Аа. Точно. Хм. И что это значит?
Rand()
22.08.09 18:20
x =((float)(rand()%1000000000-500000000))/(float)10000000;


<_< <_< <_< Ниче не работает все тоже самое!

Я разочароан в С++ :wacko:


P.S. Выдает значения от -49.9950 до -50 почему!?!??! Чтото я психовать начинаю уже. Как бы не заругатцо... :angry:
Rand()
22.08.09 18:06
Цитата(visual @ 22.08.2009 - 13:48) [snapback]97592[/snapback]

Код
#include <stdio.h>

int main()
{
  float f = 1756/1000; // выполнит операцию как div в delphi
  printf("%f\n", f);
  f = (float)1756/(float)1000; // выполнит дробное деление
  printf("%f\n", f);
  return 0;
}



Спс. Это и есть приведение типов?
Rand()
22.08.09 17:42
Вот блин. У меня в книге ничего нету про приведение типов. Сделай одолжение объясни тупому чайнику как оно работает, а то в нете только примеры и никакого разжевывания нету. Заранее благодарен) :blush:
Rand()
22.08.09 17:29
Цитата(visual @ 21.08.2009 - 23:46) [snapback]97577[/snapback]

Battlemakc
Ты учитываешь разницу между целочисленным делением и float-ным? Нужно к float явно приводить.

А насчет

Нифига, перепрочти свой первый пост:


:) Точно. Эт там так, но в программе там все путем. Щас пробну привести к др типу.
Rand()
22.08.09 01:13
Цитата(visual @ 21.08.2009 - 21:07) [snapback]97573[/snapback]

А делить на 10000000 не нужно? C++ это сам должен сделать?

ТЫк я делю и всеравно) Я же говорю делаю: ((rand()1000 000 000) - 500 000 000)/10 000 000;


То что я щас представил как код программы немного изменен но даже при написании так как я щас сделал всеравно что то нето получается.

Разве так не прально?:

x =((rand()%100000)-50000)/1000;
y =((rand()%100000)-50000)/1000;
z =((rand()%100000)-50000)/1000;