forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   ARenderEntity и ZBuffer (http://forum.boolean.name/showthread.php?t=5674)

HolyDel 30.01.2008 13:46

ARenderEntity и ZBuffer
 
есть большая карта и маленький CameraRange.
чтобы влез весь SkyBox, включаля дальний верхиний левый угол, приходится увеличивать CameraRange до величин, когда изображение закрывается туманом.
такая идея оказалась плохой:
CameraClsMode cam,1,1
CameraRange cam,1,1000
ARenderEntity(cam,skybox)
CameraRange cam,1,200
CameraClsMode cam,0,1
RenderWorld
плохой тем, что Z-координаты фрагмета доводятся до интервала 0..1, и такн, находящийся в 100 метрах оказывается "дальше" (и соответсвенно не выводится), чем скайбокс рисующийся в 500 метрах (ведь и CameraRange больше при отрисовке скайбокса).
это конечно касается всех фрагментов. Если с размерами SkyBox-а увеличивать и диапазон CameraRange, то эффекта нет. Если не увеличивать то скайбокса нет.
надо както отключить запись в буффер глубины. как?

а может перейти на скайсферу?

Черный крыс 30.01.2008 14:51

Ответ: ARenderEntity и ZBuffer
 
Сделай скай бокс размером в 1 сантиметр в длинну и ширину....(от скалинга мира зависит) и привяжи к камере по позиции. А дальше EntityOrder(SkyBox,1)

HolyDel 30.01.2008 14:55

Ответ: ARenderEntity и ZBuffer
 
спасибо. попробую.

moka 30.01.2008 15:26

Ответ: ARenderEntity и ZBuffer
 
Ордеры очень благополучно сворачивают ZBuffer ;)

HolyDel 30.01.2008 15:29

Ответ: ARenderEntity и ZBuffer
 
вспомнил. вариант не катит.
тогда будет земля за ним прорисовываться. и техника. ЗА скайбоксом.

ffinder 30.01.2008 17:22

Ответ: ARenderEntity и ZBuffer
 
2 HolyDel:
никто не запрещает поставить EntityOrder отрицательным - тогда рисоваться будет _после_ сцены
и еще если у тебя скайбокс - можешь поставить
Код:

CameraClsMode cam, 0, 1
экономия на стирании Color-buffer'a на старых карточках - все равно Skybox все оставшееся непрорисованное место заполняет.

FDsagizi 31.01.2008 03:31

Ответ: ARenderEntity и ZBuffer
 
СкайБокс- зло:)

tormoz 31.01.2008 04:43

Ответ: ARenderEntity и ZBuffer
 
Цитата:

Сообщение от HolyDel (Сообщение 76090)
вспомнил. вариант не катит.
тогда будет земля за ним прорисовываться. и техника. ЗА скайбоксом.

Наоборот, не будет
Ордер больше нуля - прорисовка после всего
Меньше нуля - перед всем

HolyDel 31.01.2008 11:00

Ответ: ARenderEntity и ZBuffer
 
ага. щас так. картинка получается какой надо, но рендерится лишняя геометрия ЗА скайбоксом.
просто чтобы увидеть дальний верхний угол - надо увеличивать CameraRange. и сцена будте рисоваться чуть больше.
где то в корень из 3 раз. мне бы хотелось чуть оптимизировать.

вопрос ставлю по другому:
можно как нибудь отключить запись в буффер глубины?
в жиле это делается так: glDisable(GL_DEPTH_TEST)

johnk 31.01.2008 11:06

Ответ: ARenderEntity и ZBuffer
 
РендерСтейт ZENABLE. В FFP, это нужно у девайса устанавливать. Собс-но в программируемом конвейере можно установить ZENABLE = false; непосредственно в шейдере.

HolyDel 31.01.2008 11:19

Ответ: ARenderEntity и ZBuffer
 
Вложений: 1
D3DRS_ZENABLE = 7 - это?

вот пояснилка:
красный квадрат это скайбокс
красный круг это текущий радиус обзора
зеленые линии это линии фрустум пирамиды
синий триугольник это камера
серые точки - это танки по 25 000 триугольников каждый.

синий круг - это тот радиус обзора, который необходим чтобы картинка отрисовалась нормально, но у нас раидус больше (красный круг) и будут отрисовываться 6 лишних танков, которых мы гарантированно не увидим :(

johnk 31.01.2008 11:39

Ответ: ARenderEntity и ZBuffer
 
Цитата:

D3DRS_ZENABLE = 7 - это?
Не :) Вот, посмотри: http://www.toymaker.info/Games/html/render_states.html

moka 31.01.2008 11:42

Ответ: ARenderEntity и ZBuffer
 
Хм. По идее, если заюзать сферу, и возможность менять текстурные координаты ручками, для кубемапы, то этот варриант решается.
Видел библиотечку "Shader.dll", но там как я понял совсем не шейдеры были использованы. Там была игра с текстурными координатами. Так вот, если попытатся поменять текстурные координаты для кубымапы, тогда сможешь сделать сферо-кубемапу :)

HolyDel 31.01.2008 11:49

Ответ: ARenderEntity и ZBuffer
 
конечно не шейдеры. шейдеров на dx7 нет.

Цитата:

Хм. По идее, если заюзать сферу, и возможность менять текстурные координаты ручками, для кубемапы, то этот варриант решается.
типа отрисовать на сфере куб? а может просто сферу? закрасить ее под облака.

FDsagizi 31.01.2008 11:55

Ответ: ARenderEntity и ZBuffer
 
сфера- это для этого случая!

moka 31.01.2008 12:04

Ответ: ARenderEntity и ZBuffer
 
HolyDel, ну у сферымапы есть немалый минус - тексели разные, и поэтому некрасиво. Скайбокс намного качественее. Кстати не пробовал текстурить сферу кубемапой с Mode,2 ?

HolyDel 31.01.2008 12:13

Ответ: ARenderEntity и ZBuffer
 
что еще за Mode,2 ?

moka 31.01.2008 12:18

Ответ: ARenderEntity и ZBuffer
 
SetCubeMode Texture,Mode
1 - Normal
2 - Reflection
3 - Refraction

:)
Меняет тип действа нормалей относительно позиции камеры. Это влияет на метод визуального наложение кубемапы.

HolyDel 31.01.2008 12:28

Ответ: ARenderEntity и ZBuffer
 
Это ты где откопал?
1-цу наверное надо делать. и скайбокс боксом.

moka 31.01.2008 12:36

Ответ: ARenderEntity и ZBuffer
 
1 - метод это стандартное.
Откопал непомню где, в какомто сорсике увидел что юзается функция :)
Тут подойдёт 2.
Если наложится на Сферу кубемапа хорошо, тогда твоя проблемма будет решена :)

ffinder 31.01.2008 13:11

Ответ: ARenderEntity и ZBuffer
 
Цитата:

Откопал непомню где, в какомто сорсике увидел что юзается функция
в хэлпе есть :-)
Цитата:

Если наложится на Сферу кубемапа хорошо, тогда твоя проблемма будет решена
вот так:
Код:

sky=CreateSphere(24)
PositionEntity sky, 0,0,0
ScaleEntity sky, 100, 100, 100
EntityFX sky,1+16

env_tex = EnvTex_Load("island\","bmp")
EntityTexture sky, env_tex
SetCubeMode env_tex, 2

у меня только что заработало нормально

HolyDel 31.01.2008 13:14

Ответ: ARenderEntity и ZBuffer
 
EnvTex_Load("island\","bmp") - это встроенная ф-ия?

moka 31.01.2008 13:15

Ответ: ARenderEntity и ZBuffer
 
Откопал эту функцию ещё раньше 1.98 версии.
Дык, выверни ещё сферу, обнови нормали и поставь в позицию камеры.
Окайно выглядит?
Цитата:

EnvTex_Load("island\","bmp") - это встроенная ф-ия?
Нет :)
Там просто грузится кубемапа из нескольких текстур.

ffinder 31.01.2008 13:23

Ответ: ARenderEntity и ZBuffer
 
ЗЫ: SetCubeMode env_tex, 3 тоже дает правильный результат, при единице текстура перевернута вверх ногами, ScaleMesh sky, 1.0, -1.0, 1.0 не помагает

ffinder 31.01.2008 13:27

Ответ: ARenderEntity и ZBuffer
 
Цитата:

Там просто грузится кубемапа из нескольких текстур.
Телепат;-)

ffinder 31.01.2008 13:30

Ответ: ARenderEntity и ZBuffer
 
Код:

FlipMesh sky
UpdateNormals sky

тоже не помогло

HolyDel 31.01.2008 13:43

Ответ: ARenderEntity и ZBuffer
 
скригшоты неправильной работы в студию.
где то на форуме я оставлял ф-ию инвертирования нормалей.

ffinder 31.01.2008 15:39

Ответ: ARenderEntity и ZBuffer
 
у меня трафик не резиновый, просто отрази (мысленно) картинку по оси Y,
я же уже дал работающий вариант, даже два - используй их.
CubeMapping вобще не должен зависеть от заданных нормалей, они считаются от камеры к вершинам и отражаются. Вот как отражаются и задает SetCubeMode.

moka 31.01.2008 15:43

Ответ: ARenderEntity и ZBuffer
 
:))) Отношение нормалей здесь как-раз играет главную роль :)
Разницу почуй, если наложить на кубик или на сферу ;)

HolyDel 31.01.2008 16:04

Ответ: ARenderEntity и ZBuffer
 
при чем здесь нормали? нормальи играют роль только для освещения. у него стоит EntityFX ent,1, знаит освещение вообще не просчитвается. нормали здесь совсем ни к чему.
обяхательно посмотрю твои варианты, но для етого сначала надо попасть домой.

moka 31.01.2008 16:10

Ответ: ARenderEntity и ZBuffer
 
Нормали влияют полюбому :))) Тут как никрути.
Кубемапа проецируется таким способом: вычесляется вектор наклона между позицией камеры и вершины, затем поворачивается исходя из нормали, таким образом мы имеет отражение кубемапой.
В случае с Скайбоксом, там только вектор относительно вершинам (если в пиксельном, то пикселям).

HolyDel 31.01.2008 16:43

Ответ: ARenderEntity и ZBuffer
 
при чем здесь нормали?
яж сделал без вообще каких либо нормалей сферическое отрашение.
и кубическое будет точно таким же.
влияет только позиция вершины.

правка: вот статья, правда это жила, но все равно, но все равно:
http://steps3d.narod.ru/tutorials/cu...-tutorial.html

tormoz 31.01.2008 17:54

Ответ: ARenderEntity и ZBuffer
 
Опять не понял проблемы
1 сделай скайбокс маленьким
2 помести в поз. камеры (это в цикле)
3 поставь ордер больше 0

все
это никаким боком не затронет отсечения ентити по растоянию

HolyDel 31.01.2008 17:56

Ответ: ARenderEntity и ZBuffer
 
проблема в том - что будет отрисовываться геометрия, которую я гарантированно не увижу.
а может и нет.

tormoz 31.01.2008 19:17

Ответ: ARenderEntity и ZBuffer
 
Не будет
Скайбокс никак не повлияет на отрисовку других ентити

зы. что за танки на 25 к поли ?

HolyDel 31.01.2008 20:04

Ответ: ARenderEntity и ZBuffer
 
25к поли это для примера.
вроде должно сработать.

CRASHER 29.06.2009 22:13

Ответ: ARenderEntity и ZBuffer
 
А у меня вот такая проблемка, отражение в воде.
Здесь загружаю стороны для водного скайбокса. Когда над водой нахожусь всё норм, но под водой он отражает дно, что и немудрено.

Код:

                texturesize=TextureWidth(tex)
                CameraViewport camera,0,0,texturesize,texturesize
                SetCubeFace tex,0:RotateEntity camera,0,-90,0:RenderWorld;PE
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,1:RotateEntity camera,0,0,0:RenderWorld;PR
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,2:RotateEntity camera,0,90,0:        RenderWorld;Z
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,3:RotateEntity camera,0,180,0:        RenderWorld;L
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,4:RotateEntity camera,90,0,0:        RenderWorld
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,5:RotateEntity camera,-90,0,0:        RenderWorld
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)

Мне же надо чтобы видно было тоже самое, когда нет поверхности воды.
Только это должно отображаться на водной глади.
Здесь перевернул стороны по икс и вродебы всё заработало, но отражение под водой отражает зеркально в сторону (вправо в моём случае) то что я вижу на берегу.

Код:

                texturesize=TextureWidth(tex)
                CameraViewport camera,0,0,texturesize,texturesize
                SetCubeFace tex,0:RotateEntity camera,180,-90,0:RenderWorld;PE
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,1:RotateEntity camera,180,0,0:RenderWorld;PR
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,2:RotateEntity camera,180,90,0:        RenderWorld;Z
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,3:RotateEntity camera,180,180,0:        RenderWorld;L
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,4:RotateEntity camera,90,0,0:        RenderWorld
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)
                SetCubeFace tex,5:RotateEntity camera,-90,0,0:        RenderWorld
                CopyRect 0,0,texturesize,texturesize,0,0,BackBuffer(),TextureBuffer(tex)

как убрать отражение в сторону?
Перепробовал много чего , вертел стороны по всякому, не помогает. Подскажите пожалуст:)
Скрин проблемы


Справа отражение под водой, а слева терейн который видно сквозь воду.

CRASHER 01.07.2009 19:29

Ответ: ARenderEntity и ZBuffer
 
Ну что? никто ничего не подскажет? Мне тему отдельную создавать чтоль :)

ABTOMAT 01.07.2009 19:55

Ответ: ARenderEntity и ZBuffer
 
Хз я уж давно Ашадов не юзаю. Заведи новую, может, Андрей ответит. (он тут бывает иногда)

CRASHER 02.07.2009 05:42

Ответ: ARenderEntity и ZBuffer
 
Это не Ашодоу :)
Это полностью на блитце написано

SKA_DIMKA 02.07.2009 09:58

Ответ: ARenderEntity и ZBuffer
 
CRASHER да тут все просто, у тебя это происходит из за SetCubeMode, сделай что то вопщем вроде того...надеюсь там все понятно:)

CubeTexture-текста кубмапы
Water-меш воды(плоскость)
Camera-камера

p.s Единственное что вставь этот кусок кода прям в начале той функции что писал то есть перед рендером кубмапы должно работать;)

Код:

If EntityY#(camera) > EntityY#( water)
SetCubeMode CubeTexture,1
Else
SetCubeMode CubeTexture,3
EndIf



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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot