|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
WinXP SP3, GeForce 9600, запуск готового exe-шника:
Ландшафт движется в горизонтальном направлении туда-сюда. Обезьяна качает башкой в центре. 3 баннер не отобразился, чёрный квадрат. Компилятор недовелен тем, что переменная v в процедуре ParsFaces может быть неопределённой. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 09.11.2014 в 00:42. |
#17
|
||||
|
||||
Невозможно этот исходник читать
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#18
|
||||
|
||||
Смотри какая фигня:
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
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |
#20
|
||||
|
||||
У меня отобразилась только обезьяна, без кубика.
За оформление кода нужно руки оторвать. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#21
|
||||
|
||||
Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#22
|
||||
|
||||
Так же, не показывает.
Разница небольшая есть. Морда обезьянки становится "стеклянной", до этого была чёрной и теперь не показывается второй баннер - 3 показывается. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 09.11.2014 в 14:42. |
#23
|
||||
|
||||
Господа, ну что вы как маленькие, я предупреждал что в сорце бардак!!
Тем не менее, я не знаю КАК(разобраться в чужом говнокоде), но Мэд дал реальное решение проблемы, спасибо тебе!(по крайней мере у меня заработало как надо) |
#24
|
||||
|
||||
У меня нет.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#25
|
||||
|
||||
Цитата:
Я у себя прогнал раз 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
|
||||
|
||||
Ничего не изменило, две очень бледные стенки куба - задняя и верхняя.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#27
|
||||
|
||||
Я вообще отказался от TBitmap и DataArray и загрузил через Ole. Та же хрень - куба нет.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#28
|
||||
|
||||
Перепишу функцию загрузки текстуры через битмаповский ScanLine, а то что-то меня этот год самого не радует
|
#29
|
||||
|
||||
Вот через 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
|
||||
|
||||
Вот что сейчас имеется
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |