Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 17.08.2011, 17:59   #256
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Имитация водной поверхности.

используй occlusion queries. вроде бы они уже есть в ксорсе... спроси Сквида.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (17.08.2011)
Старый 17.08.2011, 18:15   #257
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Имитация водной поверхности.

OQ еще нет.
Дешевле рисовать вообще все квадратики, чем пытаться понять, видна вершина или нет. Тем более, используя для этого З-буфер о_О
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (17.08.2011)
Старый 18.08.2011, 22:19   #258
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Вопрос Ответ: Имитация зед-буфера.

Handle DepthBuffer = xCreateImage(600,400);
...
if (xKeyDown(42)) xDrawImage (0,0,DepthBuffer);
Чё оно падает?

Самый простой способ займеть буфер глубины для какого-то отдельного меша:
1.Наложить на меш шейдер, как в "первых шагах" только в пиксельном писать цветом расстояние от камеры до текущего пикселя.
2.Поставить xSetBuffer(mydepthbuffer);
3. xRenderEntity(myMesh);
4. xSetBuffer(BackBuffer());
5. Выключить шейдер.
Так?

Самый простой способ получить какой-то буфер. Отрендрить в картинку сцену с включенным xWireframe(true); Потом для спроецированных координат моей вершины читать картинку в соответсвующем месте и если пиксель не черный, значит можно рисовать квадратик?

Последний раз редактировалось dsd, 23.10.2011 в 22:19.
(Offline)
 
Ответить с цитированием
Старый 18.08.2011, 22:26   #259
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Имитация водной поверхности.

Так?
да, получишь карту глубины. только она будет линейная, а реальный з-буффер не совсем таковой. такие карты глубины для многих задач используют.

Потом для спроецированных координат моей вершины читать картинку в соответсвующем месте и если пиксель не черный, значит можно рисовать квадратик?
НЕТ. гонять результат рендера в оперативку полусмертельно.
уже я говорил про OQ, а если их нет, то Сквид сказал что дешевле рисовать все точки.

если будешь рисовать точки после отрисовки загораживающих объектов, видюха автоматически не будет обрабатывать загороженные пиксели.
в плане вертексов квадратики малонапряжные, так что не стоит городить тормознющие проверки, чтобы их отсеять.
в плане кол-ва вызовов отрисовки (отдельных объектов), много квадратиков = проблема, которая решается инстансингом (в ксорсе есть пример).
(Offline)
 
Ответить с цитированием
Старый 18.08.2011, 22:28   #260
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Я какбэ не игру писать начал Подразумевается, что будет видно адин меш и фпс даже 15 будет вполне нормальным
(Offline)
 
Ответить с цитированием
Старый 18.08.2011, 22:43   #261
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Имитация водной поверхности.

я не знаю в каком приложении нужен искуственно пониженый чтением пикселей из текстур фпс ))
(Offline)
 
Ответить с цитированием
Старый 18.08.2011, 22:46   #262
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

В маем, хотя фпс низким врядли будет. Ибо пискселей будет читаться всего несколько тыщь причем на лок буфере.
(Offline)
 
Ответить с цитированием
Старый 18.08.2011, 23:03   #263
ANDREYman
Нуждающийся
 
Аватар для ANDREYman
 
Регистрация: 17.12.2010
Адрес: Санкт-Петербург
Сообщений: 87
Написано 55 полезных сообщений
(для 214 пользователей)
Ответ: Имитация водной поверхности.

dsd,
А это не важно сколько пикселей ты читаешь, хоть все хоть два - текстура перегоняется целиком, от этого и тормоза.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (18.08.2011)
Старый 18.08.2011, 23:07   #264
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Это все здорово, что оно лагать будет, лучше мне скажите че оно падает при xDrawImage()

А может можно в вершинном шейдере писать в цвет вершины флаг видимости точки? Или эти данные обратно в хорс не передадутся?


оффтоп: если в кодеблокс открыт xors3d.h, то функции хорса будут появлятся списком как в Visual Blitz. Не слишком очевидная зависимость

p.s. На сфере с 32 чего там, выдает 130 фпс. Шмертельные лаги, я ф такой пичали а с 64 так вообсче 60 фпс всего. Чорт побери!!! А с 128 так вообще всего 40, этого мало что бы вертексами подрыгать мышкой ((

Последний раз редактировалось dsd, 19.08.2011 в 00:20.
(Offline)
 
Ответить с цитированием
Старый 19.08.2011, 15:34   #265
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

При xCameraProject (camera,x1,y1,z1)
ProjectedX() - пишется x точки на экране
ProjectedY() - пишется y точки на экране
ProjectedZ() - пишется значение лежащее в (0,1)

Из непроверенных источников мне стало известно, что и z-buffer имеет значение в подозрительно похожем интервале (0,1).
Это совпадение?
И если нет, то как преобразовать это значение в расстояние от камеры до отрисованного видеокартой пикселя?
(Offline)
 
Ответить с цитированием
Старый 19.08.2011, 15:48   #266
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Имитация водной поверхности.

Зачем приобразовывать, если есть функция просчёта дистанции между двумя точками в 3ёх мерном пространстве?
(Offline)
 
Ответить с цитированием
Старый 19.08.2011, 15:56   #267
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Имитация водной поверхности.

Сообщение от dsd Посмотреть сообщение
ProjectedZ() - пишется значение лежащее в (0,1)
Щито?
__________________

(Offline)
 
Ответить с цитированием
Старый 19.08.2011, 16:13   #268
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Ладно, что туда пишется? Ведь явно это значение зависит от расстояния между точкой и камерой.
(Offline)
 
Ответить с цитированием
Старый 19.08.2011, 18:12   #269
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений
(для 6,854 пользователей)
Ответ: Имитация водной поверхности.

Сообщение от .Squid Посмотреть сообщение
Щито?
Считай зум возвращает
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 19.08.2011, 20:49   #270
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Вопрос по шейдеру рисующему расстояние от камеры до пикселей.


float4x4 matrixWorldViewProj : MATRIX_WORLDVIEWPROJ; // матрица итоговая
float4x4 matrixWorld : MATRIX_WORLD; // матрица мировая
float3 lightDirection : LIGHT0_DIRECTION; // направление
float4 lightColor : LIGHT0_COLOR; // цвет
float4 entityColor : COLOR_DIFFUSE; // цвет объекта
texture diffuseTexture : TEXTURE_0; // текстура
// описываем sampler
sampler diffuseSampler = sampler_state
{
Texture = <diffuseTexture>; // привязываем текстуру
// устанавливаем адресацию координат
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
// устанавливаем фильтрацию
MinFilter = ANISOTROPIC;
MagFilter = ANISOTROPIC;
MipFilter = ANISOTROPIC;
// устанавливаем уровень фильтрации
MaxAnisotropy = 4;
};
// входная структура для вершинного шейдера
struct VSInput
{
float4 position : POSITION;
float3 normal : NORMAL;
float2 texCoords : TEXCOORD0;
};
// структура для результата вершинного шейдера
struct VSOutput
{
float4 position : POSITION;
float depth : TEXCOORD1;
float2 texCoords : TEXCOORD0;
};
// вершинный шейдер
VSOutput VSMain(VSInput input)
{
// объект для выходных данных
VSOutput output;
// трансформируем позицию вершины
output.position = mul(input.position, matrixWorldViewProj);
// пишу глубину
output.depth = output.position.z;
// переписываем текстурные координаты
output.texCoords = input.texCoords;
// возвращаем результат
return output;
}
// пиксельный шейдер
float4 PSMain(VSOutput input) : COLOR0
{

//кодирую в красный то, что больше 256 и обрезаю его до диапозона (0,255)
//int red=clamp(trunc(input.depth/256), 0, 255);
int red=trunc(input.depth/25);
// пишу в зеленый то, что меньше 256
int green=trunc(input.depth-red*25);
//дробная часть
int blue=trunc(25*frac(input.depth));


return float4(0,green,blue,0);//input.depth;
}
// техника для отрисовки
technique Diffuse
{
pass p0
{
VertexShader = compile vs_2_0 VSMain();
PixelShader = compile ps_2_0 PSMain();
}
}
Вот этот слегка модифицированный шейдер из шагов рисует такую картинку.
То что линии на модели рисуются паралельно экрану радует. Но я ожидал нечто более близкое к градиенту или так и должно было получиться?

Теперь основной вопрос. Будет ли расстояние которое я записал цветом в шейдере равным расстоянию между видимой вершиной и камерой в хорсе?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:40.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com