Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 17:45   #1
Alexei89
 
Регистрация: 06.12.2010
Сообщений: 9
Вопрос DirectX-построение пирамиды

Есть программка рисующая Куб, признаюсь не моя, весь день пытался разобраться, были даже успехи но мне нужно построить пирамиду!
Не подскажите как правильно это сделать и как определить координаты!
Код:
function TForm1.LoadSceneFromFile (FileName : string) : HRESULT;
var f:textfile;
  Vertices : ^TCustomVertex;
  Indices  : ^WORD;
  hRet : HRESULT;
  i: LongWord;
  j: word;
  x:Single;
  ColorTmp:LongWord;
begin
{FILE OPERATION}
assignfile(f,filename);
reset(f);

readln(f,VertCount);
readln(f,IndCount);

  hRet := FD3DDevice.CreateVertexBuffer((VertCount) * SizeOf(TCustomVertex), 0,
                                        D3DFVF_CUSTOMVERTEX,
                                        D3DPOOL_DEFAULT, FD3DVB);
  if Failed(hRet) then begin
     Result := hRet;
     Exit;
  end;

  hRet := FD3DDevice.SetVertexShader(D3DFVF_CUSTOMVERTEX);
  if Failed(hRet) then begin
     Result := hRet;
     Exit;
  end;

  hRet := FD3DVB.Lock(0, (VertCount) * SizeOf(TCustomVertex), PByte(Vertices), 0);
  if Failed(hRet) then
    begin
      Result := hRet;
      Exit;
    end;

for i:=1 to VertCount do
  begin
    read(f,x);Vertices.X:=x;
    read(f,x);Vertices.Y:=x;
    readln(f,x);Vertices.Z:=x;
    read(f,x);Vertices.nX:=x;
    read(f,x);Vertices.nY:=x;
    readln(f,x);Vertices.nZ:=x;
    Readln(f,ColorTmp);Vertices.Color:=ColorTmp;
    inc(Vertices);
  end;
  Result := FD3DVB.Unlock;

  hRet:=FD3DDevice.CreateIndexBuffer( IndCount * SizeOf(WORD),
                                      0,
                                      D3DFMT_INDEX16,
                                      D3DPOOL_DEFAULT, FD3DIB);
  if Failed(hRet) then begin
     Result := hRet;
     Exit;
  end;

  hRet := FD3DIB.Lock(0, IndCount*SizeOf(WORD), PByte(INDICES), 0);
  if Failed(hRet) then
    begin
      Result := hRet;
      Exit;
    end;

for i:=1 to IndCount do
  begin
    readln(f,j);INDICES^:=j;
    inc(INDICES);
  end;
  Result := FD3DIB.Unlock;

closefile(f);
end;
Тут текст файла из которого подгружаются координаты
Код:
8
36
-1 1 -1
-1.4142135623730950488016887242097 1.4142135623730950488016887242097 -1.4142135623730950488016887242097
$000000FF
-1 1 1
-1.4142135623730950488016887242097 1.4142135623730950488016887242097 1.4142135623730950488016887242097
$00FF0000
1 1 1
1.4142135623730950488016887242097 1.4142135623730950488016887242097 1.4142135623730950488016887242097
$0000FF00
1 1 -1
1.4142135623730950488016887242097 1.4142135623730950488016887242097 -1.4142135623730950488016887242097
$00FF0000
-1 -1 -1
-1.4142135623730950488016887242097 -1.4142135623730950488016887242097 -1.4142135623730950488016887242097
$0000FF00
-1 -1 1
-1.4142135623730950488016887242097 -1.4142135623730950488016887242097 1.4142135623730950488016887242097
$000000FF
1 -1 1
1.4142135623730950488016887242097 -1.4142135623730950488016887242097 1.4142135623730950488016887242097
$00FF0000
1 -1 -1
1.4142135623730950488016887242097 -1.4142135623730950488016887242097 -1.4142135623730950488016887242097
$000FF000
0
1
2
2
3
0
4
5
6
6
7
4
0
1
5
0
5
4
2
3
6
3
7
6
0
3
7
7
4
0
2
1
5
5
6
2
Alexei89 вне форума Ответить с цитированием
Старый 30.05.2011, 20:13   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Координаты проще простого вручную рассчитать.
X вершины - допустим, 0.
Y вершины - 1.
Z вершины - 0.

Ну а дальше просто задаете координаты нижних углов, с Y = 0. X и Z сами считайте. А дальше загоняйте в буфер вершин и рисуйте.
_-Re@l-_ вне форума Ответить с цитированием
Старый 31.05.2011, 08:02   #3
Alexei89
 
Регистрация: 06.12.2010
Сообщений: 9
По умолчанию

Благодарю!
Alexei89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование пирамиды на канве Eugene Общие вопросы Delphi 4 17.10.2013 17:27
программа пирамиды таблицы mysql vitalik22 SQL, базы данных 6 15.06.2011 00:27
mysql принцип пирамиды.. vitalik22 PHP 4 17.04.2011 20:35
Сортировка методом пирамиды. Dj Troy Паскаль, Turbo Pascal, PascalABC.NET 7 08.04.2011 20:03
объем пирамиды NiCola999 Помощь студентам 4 06.07.2010 23:47