![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопросы по OpenGL [Delphi, Windows]
Pa5ha © (2005-04-01 00:20:00)Решил написать небольшой симулятор на ОпенГЛ и столкнулся с некоторыми тонкостями.
1. скайбокс из-за интерполяции имеет стыки, которые всё сильно портят. Как их можео убрать?
2. как удалять текстуры имея только GLUint? Просто, сцены надо менять по ходу дела, а старые текстуры не удаляются до завершения (и удаляются ли вообще).
Вопросы будут поступать ещё скорее всего =)
П7 (2005-12-18 13:31:00) [21]Ничё и не ресурсоёмко. Нету обычного цветового ключа в Опене.Читай Краснова в общем.
Pa5ha (2005-12-18 13:16:00) [22]П7, аотфа-канал, как и маска (сужу только по названию) отпадают т.к. требуют отдельного слоя с альфа-компонентой. Можно поподробнее. Требуется просто задать прозрачность для определенного цвета без гимора. Т.е. переписывать загрузчик текстур и добвлять альфаканал - не канает. Да и ресурсоёмко.
П7 (2005-12-17 19:24:00) [23]1. Есть альфа-канал.
2. Есть блендинг.
3. Есть альфа-маска.
Pa5ha (2005-12-17 17:45:00) [24]Итак, пришло время продолжить :)
Есть ли в ОпенГЛ цветовой ключ и как его юзать? Искал, не нашел. А в директ Иксе есть :)
DeadMeat (2005-07-28 19:01:00) [25]
> ПАМАГИТЕ!!! Хачу в свой движок (пока што еще практически
> никакой) приделать скайбокс. Как ево сделать? Хачу такойже
> как и в Serious Sam. Падскажите.
Хъыы...
Приколист..
---
...Death Is Only The Begining...
3DMan (2005-07-28 18:14:00) [26]ПАМАГИТЕ!!! Хачу в свой движок (пока што еще практически никакой) приделать скайбокс. Как ево сделать? Хачу такойже как и в Serious Sam. Падскажите.
Pa5ha (2005-05-06 00:11:00) [27]XProger, очень такая впечатляющая игрулина ) Сделать хочу так же и даже кажись знаю, как такое реализовать в коде. Будут вопросы, обращусь )
XProger (2005-05-05 22:36:00) [28]http://XProger.narod.ru(IE)
найди там XEngine... заберись на второй этаж и посмотри на лампочки. Так хотишь? ;)
Pa5ha (2005-05-05 21:26:00) [29]XProger, знать то знаем, но при выглюченом тесте глубины блик (так называется) будет рисоваться всегда. Вощем, на геймдеве написано, что надо проверять расстояние до источника света. Пока что то мне лень это делать. И так номано )
XProger (2005-05-05 19:55:00) [30]glDisable(GL_DEPTH_TEST) знаем такое? ;)
Pa5ha (2005-05-05 19:23:00) [31]
> МЛЯ! Сколько раз уже повторял, не Джон, а Ян! ;)
Ы, первый раз слышу:)
Модуль тот, который грузит тока БМП. Так и наз-ся BMP.pas =)
Ващета мне надо было сделать свечение вокруг фонаря (лампы). Сделал блендингом. Вроде так ничо. Жить можно. Но хотел восьмибитной альфитекстурой все же ) Ладно.
Насчет скайбокса тоже думал... ХЗ чо там и как ) По идее, если это модельный симулятор, то камера будет все время на земле, но хотелось сделать преследующую камеру. Посмотрем. Будем искать.
Кста, ещё насчет света фар/фонарей. Рисую плоскость с текстурой (блендингом), перпендикулярную линии взгляда. При повороте эта плоскость проходит через капот/крыло/что угодно и получается некрасиво. Если не понятно, сделаю скрин. Давно хотел узнать как от этого избавиться.
XProger (2005-05-05 18:28:00) [32]МЛЯ! Сколько раз уже повторял, не Джон, а Ян! ;)
И вообще, в его модуле нет поддержки 8 битных текстур! Там же ясно написанно 24 bit онли!
function LoadTex(const FileName: string): DWORD;
type
TaRGB = array [0..1] of record B, G, R : Byte; end;
PRGB = ^TaRGB;
TaRGBA = array [0..1] of record R, G, B, A : Byte; end;
PRGBA = ^TaRGBA;
var
bmp : TBitmap;
x, y : integer;
Data : PRGBA;
p : PRGB;
idx : integer;
begin
Result := 0;
bmp := TBitmap.Create;
try
bmp.LoadFromFile(FileName);
bmp.PixelFormat := pf24bit;
GetMem(Data, bmp.Width*bmp.Height*4);
idx := 0;
for y := 0 to bmp.Height - 1 do
begin
p := bmp.ScanLine[y];
for x := 0 to bmp.Width - 1 do
begin
Data[idx].R := p[x].R;
Data[idx].G := p[x].G;
Data[idx].B := p[x].B;
// Вот если чёрный то альфа текселя равна 0... вот :)
if Data[idx].R + Data[idx].G + Data[idx].B = 0 then
Data[idx].A := 0
else
Data[idx].A := 255;
inc(idx);
end;
end;
except
bmp.Free;
Exit;
end;
glGenTextures(1, @Result);
glBindTexture(GL_TEXTURE_2D, Result);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// $8058 - это типа GL_RGBA8, т.е. насильное отменение сжатия текстур видяхой...
gluBuild2DMipmaps(GL_TEXTURE_2D, $8058, bmp.Width, bmp.Height, GL_RGBA, GL_UNSIGNED_BYTE, Data);
bmp.Free;
FreeMem(Data);
end;
Грузит любой bmp в 32 битную текстурку, при этом чёрный цвет - прозрачный!
Ну не правда ли гениально а? ;)
Далее по поводу 50 км. А вот когда ты взлетаешь... линия горизонта меняет своё положение? Впринципе этим можно принебреч. А следовательно вот тебе и те самые скай боксы ;) Сделай голубой горизонт и голубой туман (так оно на самом деле и есть по свойствам атмосферы). И вроде никаких проблем возникнуть не должно :)
P.S.
8 bit bmp жмутся намного хуже ч/б tga ;)
Sapersky (2005-05-05 18:21:00) [33]http://Gamedev.ruне пойдет =)
И всё-таки http://Gamedev.ru:)
По лодам для ландшафта (геомипмэппингу) там была весьма неплохая статья. Как раз применительно к симулятору.
Ещё можно поискать по словосочетанию "chunked lod".
Pa5ha (2005-05-05 15:35:00) [34]Привет! Это опять я. Что то часто не грузиться у меня форум... =(
На гейм деве что то ничего не нашел интересного. Скорее всего, не там смотрел.
Интересно, как в авиасимах отрисовывается ландшафт на 50км? Это так далеко задняя отсекающая плоскость? А потом как отрисовывается модель? Плз, нет ли у кого ссылочки на грамотное создание лодов? http://Gamedev.ruне пойдет =)
Пытался сделать ауру от света фонарей (ну или как это наз-ся...) Не получается создать из восьмибитного BMP-файла восьмибитную текстуру. Модуль ДжонаХорна вылетает при возвращении управления из функции LoadBitmap, но первая строка (запись в лог) после вызова этой функции не выполняется. Не могу пока понять, в чем дело. Не поможет ли кто кодом создания 8-мибитной текстуры из 8-битного BMP-файла (с загрузкой последнего)?
XProger (2005-04-19 13:07:00) [35]Да... со слипом эт я сморозил...
Но можно и так:
while not isQuit do
begin
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
if isQuit then
Exit;
end;
... // тут апдейт и отрисовка
if not glActive then // этот флажок меняешь когда сворачивают/разворачивают прогу
WaitMessage;
end;
Pa5ha (2005-04-19 12:51:00) [36]Ну дак а как этот цикл остановить? В том то и дело.
parovoZZ (2005-04-19 09:47:00) [37]А sleep винду не затормозит? Как-то засунул этот слип (1000), так вся винда в предсмертные судуроги впала.
XProger (2005-04-19 02:19:00) [38]Если прогу минимизировали останавливай цикл. Или добавь в него Sleep :) До тех пор, пока не откроют снова...
Pa5ha (2005-04-18 23:02:00) [39]А как сделать, чтоб прога в свернутом состоянии меньше жрала?
XProger (2005-04-16 01:28:00) [40]Тебе помогут ГеймДевки! =)
http://GameDev.ru