HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [делюсь] PNG в интерфейс
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



[делюсь] PNG в интерфейс

Посмотрел я игрушку 007: nightfire, выполненую на движке голдсорца. А там - весь интерфейс в png. Собственно, сделал такое же дело в халфу. Оно пока умеет только грузить картинки да отображать их, больше ничего. Требует библиотек zlib и pnglib.
Вызывать это всё чудо надо из CHud, в VidInit создаёте CBitmapPNG* mypngp, делаете Load("textures/mysampletext.png"), в Draw, соответственно mypngp->Draw(top,left). И усё.
MOD_png_file.h

C++ Source Code:
1
#ifndef _PNG_TEX
2
#define _PNG_TEX
3
enum PNG_INFO_E
4
{
5
  PNG_GLOBAL_FAIL,
6
  PNG_GLOBAL_SUCCESS,
7
  PNG_WRONG_INPUTSTREAM,
8
  PNG_WRONG_HEADER,
9
  PNG_WRONG_PNGPTR,
10
  PNG_WRONG_INFOPTR,
11
  PNG_WRONG_JMP
12
};
13
class BitmapPNG
14
{
15
public:
16
  BitmapPNG();
17
  ~BitmapPNG();
18
  int LoadPng(char*fn);
19
  int getw()	{return w;};
20
  int geth()	{return h;};
21
  int getfsize() {return fs;};
22
  int Draw(int t,int l);
23
private:
24
  unsigned char *data;
25
  int w,h,fs;
26
  unsigned int tex_id;
27
  int AssignGL();
28
};
29
#endif

MOD_png_file.cpp
C++ Source Code:
1
#include "hud.h"
2
#include "MOD_png_file.h"
3
#include "../libpng/png.h"
4
#include "stdlib.h"
5
#include <windows.h>
6
#include "gl/gl.h"
7
 
8
BitmapPNG::BitmapPNG() {};
9
BitmapPNG::~BitmapPNG() { delete data;};
10
int ps;
11
void png_help_read(png_structp png_ptr, png_bytep data, png_size_t length)
12
{
13
  char *a = (char*)png_get_io_ptr(png_ptr);
14
  memcpy(data,a+ps,length);
15
  ps+=length;
16
}
17
int BitmapPNG::AssignGL()
18
{
19
  glGenTextures(1,&tex_id);
20
  if (!tex_id) return 0;
21
  glBindTexture(GL_TEXTURE_2D,tex_id);
22
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
23
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
24
  glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,data);
25
  glBindTexture(GL_TEXTURE_2D, NULL);
26
  return 1;
27
}
28
int BitmapPNG::LoadPng(char *fn)
29
{
30
  char *d = (char*)gEngfuncs.COM_LoadFile(fn,5,&fs);
31
  if (!d) return PNG_WRONG_INPUTSTREAM;
32
  png_byte header[8];
33
  memcpy(header,d,8);
34
  if (png_sig_cmp(header,0,8)) return PNG_WRONG_HEADER;
35
  png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
36
  if (!png_ptr) return PNG_WRONG_PNGPTR;
37
  png_infop info_ptr = png_create_info_struct(png_ptr);
38
  if (!info_ptr)
39
  {
40
    png_destroy_read_struct(&png_ptr,(png_infopp)0,(png_infopp)0);
41
    return PNG_WRONG_INFOPTR;
42
  }
43
  if (setjmp(png_jmpbuf(png_ptr))) {
44
    png_destroy_read_struct(&png_ptr,&info_ptr,NULL);
45
    return PNG_WRONG_JMP;
46
  }
47
  ps=0;
48
  png_set_read_fn(png_ptr,d,png_help_read);
49
  png_read_info(png_ptr,info_ptr);
50
  w = png_get_image_width(png_ptr,info_ptr);
51
  h = png_get_image_height(png_ptr,info_ptr);
52
  int rowbytes = png_get_rowbytes(png_ptr,info_ptr);
53
  rowbytes+=3-((rowbytes-1)%4);
54
  data = (unsigned char*)malloc(rowbytes*h*sizeof(png_byte)+15);
55
  png_bytep *row_pointers = (png_bytep*)malloc(h*sizeof(png_bytep));
56
  for (int i = 0; i < h; i++) row_pointers[i] = data+(h-1-i)*rowbytes;
57
  png_read_image(png_ptr,row_pointers);
58
  AssignGL();
59
  return (tex_id)?PNG_GLOBAL_SUCCESS<img src="images/smilies/tongue.gif" border="0" alt="">NG_GLOBAL_FAIL;
60
}
61
int BitmapPNG::Draw(int t,int l)
62
{
63
  if (!data || !tex_id) return PNG_GLOBAL_FAIL;
64
  glLoadIdentity();
65
  glTranslatef(l,t,0);
66
  glBindTexture(GL_TEXTURE_2D,tex_id);
67
  glEnable(GL_BLEND);
68
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
69
  glBegin( GL_QUADS );
70
  glTexCoord2f(0.0,0.0);glVertex2f(0,h);
71
  glTexCoord2f(1.0,0.0);glVertex2f(w,h);
72
  glTexCoord2f(1.0,1.0);glVertex2f(w,0);
73
  glTexCoord2f(0.0,1.0);glVertex2f(0,0);
74
  glEnd();
75
  glDisable(GL_BLEND);
76
  glLoadIdentity();
77
  return 1;
78
}

Отредактировано domded 24-01-2014 в 21:16

Сообщить модератору | | IP: Записан
Сообщение: 131755

Старое сообщение 24-01-2014 21:01
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32212
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
domded писал:
Посмотрел я игрушку 007: nightfire, выполненую на движке голдсорца

Сильномодифицированном движке голдсорса. Там свой формат карт, свой формат моделей и текстуры в PNG.
Я лично не люблю PNG, по двум причинам:
1. PNG текстуры крайне долго грузятся в память, по сравнению со всеми остальными текстурами. Просто ужас как долго. А всё из-за сжатия.
2. Сжатие битмапов зипом - крайне неэффективная штука. А оно еще жмёт по линиям. Т.е. доходит до смешного - оригинальный размер 256 килобайт, после сжатия - 210 килобайт, но время загрузки выросло 5-6 раз.
Неудачный формат во всех отношениях. TGA лучше. Я бы сказал про BMP, но мелкософтовцы уроды встроили туда обязательное выравнивание, за которое руки оторвать мало.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131778

Старое сообщение 25-01-2014 14:25
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2088

Рейтинг



Дядя Миша а ксаш умеет сжатый TGA?

__________________
-Brain is dead-

Сообщить модератору | | IP: Записан
Сообщение: 131779

Старое сообщение 25-01-2014 14:26
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



domded
8ми битная альфа работает? Теперь можно кубать под халфу в Gearcraft .

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 131784

Старое сообщение 25-01-2014 14:33
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34525
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Что именно кубать? HUD?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131785

Старое сообщение 25-01-2014 14:36
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



XaeroX
HD текстуры, не?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 131790

Старое сообщение 25-01-2014 14:39
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34525
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Разве автор пишет про HD-текстуры?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131792

Старое сообщение 25-01-2014 14:40
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32212
Нанёс повреждений: 392 ед.

Рейтинг



KiQ ксаш умеет все форматы TGA. Ну или почти все.
И BMP почти все умеет, кроме сжатых. Но сжатые я даже не уверен что фотошоп умеет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131795

Старое сообщение 25-01-2014 14:43
-
tolerance
Житель форума
Девойс

Дата регистрации: Feb 2013
Проживает: (void)
Сообщений: 739
Возраст: 32

Рейтинг



Черт с ней с загрузкой, один раз загрузил пару PNG'шек и всё. Зато файлы весят меньше TGA/BMP.

Сообщить модератору | | IP: Записан
Сообщение: 131796

Старое сообщение 25-01-2014 14:46
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34525
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


tolerance
Это новая тенденция?
ЕМНИП, ещё пару лет назад считалось неважным, сколько игра занимает места на диске (оно нынче почти халявное), но чем быстрее грузится - тем меньше нервов отнимает у игрока.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131800

Старое сообщение 25-01-2014 14:54
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32212
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
tolerance писал:
Черт с ней с загрузкой, один раз загрузил пару PNG'шек и всё.

ты же первый завопишь, почему маленькие карты из ка-эс так долго грузятся (ориентировочно 10-30 секунд).
Цитата:
tolerance писал:
Зато файлы весят меньше TGA/BMP.

Сейчас это неактуально. JPEG весит еще меньше и грузится не в пример быстрее, если уж на то пошло.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131801

Старое сообщение 25-01-2014 14:54
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34525
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
JPEG весит еще меньше и грузится не в пример быстрее, если уж на то пошло.

Он с потерями. Тогда уж DXT - его можно, не распаковывая, видеокарте скармливать.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131803

Старое сообщение 25-01-2014 14:55
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32212
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
Тогда уж DXT

DXT ужасен по своему алгоритму. Так переколбашивать картинку ради экономии видеопамяти больше не требуется. Если на то пошло, то тёплая ламповая палитра даёт намного более приятный глазу результат.
И сжатие тоже всегда фиксированное, т.е. мы можем рассчитать конечный размер файла, не выполняя, собственно, индексацию.

Добавлено 25-01-2014 в 19:00:

Кстати, любопытный факт. Кармак индексировал нормалмапы в Doom3, вместо того, чтобы сохранять их в DXT5. А вы вообще видели во что превращается нормалмапа после конвертации в DXT5? У нвидии демка наглядная есть, в SDK 2007.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131805

Старое сообщение 25-01-2014 15:00
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34525
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Нормалмапы нельзя сжимать в дхт, не знаю, какого гамна нвидия пустила по вене, если ты говоришь, что демка есть, но про это я читал в официальных пейперах ати (хехе, ну ещё бы). Для нормалмапов есть 3Dc (модифицированный DXT5), он появился на радеонах, но кармак же поссорился с ати в своё время, и вот результат. Сейчас вроде 3дц везде есть и вошёл в стандарт.
А вообще, емнип, для нормалмап нвидия придумала формат signed hilo, но всем, разумеется, было пофиг, потому что никто не хотел точить двиг только под карточки нвидия.

Добавлено 25-01-2014 в 22:06:

Цитата:
Дядя Миша писал:
Кармак индексировал нормалмапы в Doom3

Можно подробнее? Как именно можно индексировать текстуру на современных гпу, ведь EXT_paletted_texture давно вырезано?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131807

Старое сообщение 25-01-2014 15:06
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32212
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
не знаю, какого гамна нвидия пустила по вене, если ты говоришь, что демка есть

Объясняю. Они на тот момент придумали очередной DXT-style формат, специально для нормалмап. И демка показывала артефакты для DXT5 и артефакты для супернового формата. Сравнение производилось путём вычитания из оригинала. Да сам скачай и посмотри.
Цитата:
XaeroX писал:
Для нормалмапов есть 3Dc

Ну Кармак изобрёл RXGB, но я не уверен что он поддерживается аппаратно.
Цитата:
XaeroX писал:
Можно подробнее?

Нет, он их хранил на диске, с целью экономии места. А в видеопамяти я не помню, может в RXGB перегонял. Надо сорцы освежить в памяти.
Цитата:
XaeroX писал:
ведь EXT_paletted_texture давно вырезано?

Я кстати хоть убей не понимаю как это работает. И DDS-текстуры с палитрой тоже не понимаю. Или там системная палитра берётся.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131812

Старое сообщение 25-01-2014 15:12
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 10:53. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [делюсь] PNG в интерфейс
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024