Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 09.11.2014, 00:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

WinXP SP3, GeForce 9600, запуск готового exe-шника:
Ландшафт движется в горизонтальном направлении туда-сюда. Обезьяна качает башкой в центре. 3 баннер не отобразился, чёрный квадрат.

Компилятор недовелен тем, что переменная v в процедуре ParsFaces может быть неопределённой.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 09.11.2014 в 00:42.
Ответить с цитированием
  #17  
Старый 09.11.2014, 10:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Невозможно этот исходник читать
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #18  
Старый 09.11.2014, 10:27
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Смотри какая фигня:
http://i64.fastpic.ru/big/2014/1109/...3269737bfd.png
http://i64.fastpic.ru/big/2014/1109/...c20cb0f042.png
Во втором случае
glbindtexture(GL_TEXTURE_2D,texList[4]); замемено на glbindtexture(GL_TEXTURE_2D,texList[0]);

Сначала думал, что виноват кулинг, но похоже, что у тебя текстуры через раз загружаются.

Вот так прорисовались все стенки:
Код:
 BitMapToPixelArray(DataArray[0],LocalPath+'\TextureCube\'+cubemap[0]);
 for i:=0 to 5 do
 begin

   PrepareImage(DataArray[0],1024,1024,texList[i]);
 end;

Проблема в BitMapToPixelArray. Вносишь в цикл и получается жопа.

Вот тебе грязное решение лечения твоей проблемы:
Код:
      GetDIBits(MemDC, Bitmap.Handle, 0, biHeight, Data, BMInfo, DIB_RGB_COLORS);
      For I := 0 to ImageSize - 1 do
      begin
          Temp := Data^ [I * 3];
          Data^ [I * 3] := Data^ [I * 3 + 2];
          Data^ [I * 3 + 2] := Temp;
      end;
     finally
      DeleteDC (MemDC);
//      Bitmap.Free;
   end;
Обращаю внимание на закомментареный (и на суффиксы) код.

__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 09.11.2014 в 11:06.
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Pilot_Red (09.11.2014)
  #19  
Старый 09.11.2014, 11:01
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Невозможно этот исходник читать
Да, код настолько ужасен, что я бросил это бесполезное занятие. Не умею читать неоформленный код.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #20  
Старый 09.11.2014, 13:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У меня отобразилась только обезьяна, без кубика.
За оформление кода нужно руки оторвать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #21  
Старый 09.11.2014, 13:55
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от angvelem
У меня отобразилась только обезьяна, без кубика.
За оформление кода нужно руки оторвать.
А если закомментить код как у меня, то как себя ведет?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #22  
Старый 09.11.2014, 14:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так же, не показывает.

Разница небольшая есть. Морда обезьянки становится "стеклянной", до этого была чёрной и теперь не показывается второй баннер - 3 показывается.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 09.11.2014 в 14:42.
Ответить с цитированием
  #23  
Старый 09.11.2014, 14:47
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Господа, ну что вы как маленькие, я предупреждал что в сорце бардак!!
Тем не менее, я не знаю КАК(разобраться в чужом говнокоде), но Мэд дал реальное решение проблемы, спасибо тебе!(по крайней мере у меня заработало как надо)
Ответить с цитированием
  #24  
Старый 09.11.2014, 14:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У меня нет.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #25  
Старый 09.11.2014, 15:10
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от angvelem
У меня нет.
Блин это хреново...
Я у себя прогнал раз 10 все работает
попробуй закоментить вот это еще(событие onShow)

Код:
// for i:=0 to countbann-1 do
  // freemem(Databann[i]);
//for i:=0 to 5 do
//freemem(DataArray[i]);
 glReadBuffer( GL_BACK );
Ответить с цитированием
  #26  
Старый 09.11.2014, 15:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ничего не изменило, две очень бледные стенки куба - задняя и верхняя.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #27  
Старый 09.11.2014, 15:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я вообще отказался от TBitmap и DataArray и загрузил через Ole. Та же хрень - куба нет.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #28  
Старый 09.11.2014, 16:37
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Перепишу функцию загрузки текстуры через битмаповский ScanLine, а то что-то меня этот год самого не радует
Ответить с цитированием
  #29  
Старый 09.11.2014, 16:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вот через Ole
Код:
const
  IID_IPicture          : TGUID = '{7BF80980-BF32-101A-8BBB-00AA00300CAB}';

function  OleLoadPicturePath(szURLorPath: POleStr; unkCaller: IUnknown;
			     dwReserved: Longint; clrReserved: TOleColor;
			     const iid: TIID; ppvRet: Pointer): HResult; stdcall; external 'oleaut32.dll';

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

function LoadBMP(FileName : PChar; idTex : GLUINT) : Boolean;
var
  F		  : THandle;
  DC, MemDC	  : HDC;
  bmp		  : HBITMAP;
  pPicture	  : IPicture;
  wszPath	  : array[0..MAX_PATH + 1] of TOleChar;					// Full Path To Picture (WCHAR)
  Width, aWidth,
  Height, aHeight : Integer;
  MaxSize	  : GLint;
  BI		  : PBITMAPINFO;
  pBits		  : Pointer;
begin
  Result := False;

  if FileName = #0 then
    Exit;

  F := CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if F <> 0 then
  begin
    CloseHandle(F);

    MultiByteToWideChar(CP_ACP, 0, FileName, -1, wszPath, MAX_PATH);
    if OleLoadPicturePath(wszPath, NIL, 0, 0, IID_IPicture, @pPicture) <> S_OK then
      Exit;

    glGetIntegerv(GL_MAX_TEXTURE_SIZE, @MaxSize);

    DC := GetDC(0);
    MemDC := CreateCompatibleDC(DC);
    try
      if MemDC = 0 then
        Exit;

      pPicture.get_Width(aWidth);
      pPicture.get_Height(aHeight);
      Width  := MulDiv(aWidth, GetDeviceCaps(DC, LOGPIXELSX), 2540);
      Height := MulDiv(aHeight, GetDeviceCaps(DC, LOGPIXELSY), 2540);

      if Width <= MaxSize then
	Width := 1 shl Floor((Ln(Width) / Ln(2.0)) + 0.5)
      else
	Width := MaxSize;

      if Height <= MaxSize then
	Height := 1 shl Floor((Ln(Height) / Ln(2.0)) + 0.5)
      else
	Height := MaxSize;

      GetMem(BI, SizeOf(TBitmapInfo));
      try
	pBits := NIL;
	FillChar(BI^, SizeOf(TBITMAPINFO), 0);
	with BI^.bmiHeader do
	begin
	  biSize	:= SizeOf(TBITMAPINFOHEADER);
	  biBitCount	:= 24;
	  biWidth	:= Width;
	  biHeight	:= Height;
	  biCompression	:= BI_RGB;
	  biPlanes	:= 1;
	end;

	bmp := CreateDIBSection(MemDC, BI^, DIB_RGB_COLORS, pBits, 0, 0);
	try
	  if bmp = 0 then
	    Exit;

	  SelectObject(MemDC, bmp);
	  pPicture.Render(MemDC, 0, 0, Width, Height, 0, aHeight, aWidth, -aHeight, TRect(NIL^));

	  GetDIBits(MemDC, bmp, 0, BI^.bmiHeader.biHeight, NIL, TBitmapInfo(BI^), DIB_RGB_COLORS);

          glBindTexture(GL_TEXTURE_2D, idTex);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE_EXT);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE_EXT);
          glTexImage2d(GL_TEXTURE_2D, 0, 3, Width, Height, 0, GL_BGR, GL_UNSIGNED_BYTE, pBits);
//	  gluBuild2dMipmaps(GL_TEXTURE_2D, 3, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, pBits);
//          gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Width, Height, GL_BGR, GL_UNSIGNED_BYTE, pBits);
	finally
	  if bmp <> 0 then
	    DeleteObject(bmp);
	end;
      finally
	FreeMem(BI, SizeOf(TBitmapInfo));
      end;
    finally
      if MemDC <> 0 then
	DeleteDC(MemDC);
      if DC <> 0 then
	ReleaseDC(0, DC);
    end;
  end;
  Result := True;
end;

  for i := 0 to 5 do
    LoadBmp(PAnsiChar(LocalPath + 'TextureCube\' + cubemap[i]), texList[i]);
 
  for i := 0 to countbann - 1 do
    LoadBmp(PAnsiChar(PathList[i]), texList[i + 7]);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #30  
Старый 09.11.2014, 16:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вот что сейчас имеется
Вложения
Тип файла: rar monkey.rar (5.8 Кбайт, 5 просмотров)
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter