forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Непропорцональность разрешений (http://forum.boolean.name/showthread.php?t=14007)

ELIAS 06.01.2011 17:17

Непропорцональность разрешений
 
Например игруха делается под разрешение 1024*768.
А ее запускают на весь экран на разрешении 1280*1024.
Эти два разрешения немного не пропорциональны, в итоке ровный круг будет чуть вытянутым по высоте.
сейчас во многих играх встречаю решение этой проблемы: внизу и вверху образуются маленькие черные полоски высотой наверное по 20 пикселей, а сама рабочая область игры пропорционально растягивается. (В качестве примера можно взять любую веселую ферму начиная с третьей части, кажется)

Как они такое делают?
Видимо на блитце решение отсутсвует((((
Спасибо!

ABTOMAT 06.01.2011 17:44

Ответ: Непропорцональность разрешений
 
Ну, значит, сам делай растягивание - ручками. Не всему же быть предусмотренным в движке?

Reizel 06.01.2011 20:17

Ответ: Непропорцональность разрешений
 
SetVievport нахрена прописали, а?

SBJoker 06.01.2011 20:55

Ответ: Непропорцональность разрешений
 
Ну давай блесни умом как ему это поможет.

impersonalis 06.01.2011 21:04

Ответ: Непропорцональность разрешений
 
чтобы сместить точку начала рисования (Letterbox, windowbox). Только команда - Origin x,y.
Что любопытно -SetOrigin и SetViewport подсвечиваются, но хелпа к ним нет (Blitz3D Documentation Version No: 1.85 [1.88])

RBK 06.01.2011 21:42

Ответ: Непропорцональность разрешений
 
Цитата:

Сообщение от ELIAS (Сообщение 174603)
Например игруха делается под разрешение 1024*768.
А ее запускают на весь экран на разрешении 1280*1024.
Эти два разрешения немного не пропорциональны, в итоке ровный круг будет чуть вытянутым по высоте.
сейчас во многих играх встречаю решение этой проблемы: внизу и вверху образуются маленькие черные полоски высотой наверное по 20 пикселей, а сама рабочая область игры пропорционально растягивается. (В качестве примера можно взять любую веселую ферму начиная с третьей части, кажется)

Если 2D используй Viewport x, y, ширина, высота
Если 3D используй CameraViewport перем, x, y, ширина, высота

impersonalis 06.01.2011 23:57

Ответ: Непропорцональность разрешений
 

Igor 07.01.2011 00:12

Ответ: Непропорцональность разрешений
 
Если в игре это не предусмотрено, и не хочется потом путать квадраты и прямоугольники, то можно просто потыкаться в настройках экрана (не в компе, а прям на мониторе кнопочки есть). Одна из настроек-в случае несоответствия соотношения ширины-высоты экран добавляет по краям черные полоски когда надо, очень полезная штука

Tadeus 07.01.2011 02:10

Ответ: Непропорцональность разрешений
 
Код:

Graphics3D 1280,1024,32,1
SetBuffer BackBuffer()

setProporcialViewport(1280,720)

camera=CreateCamera()
PositionEntity camera,0,0,-3
;привет, nuprahtor!
CameraClsColor camera,0,0,255

cub=CreateCube()

While Not KeyDown(1)
    TurnEntity cub,0,1,0
    RenderWorld
    Flip
Wend


Function setProporcialViewport(width%,height%)
    If Float(width)/Float(height)=Float(GraphicsWidth())/Float(GraphicsHeight()) Then Return
    vw=GraphicsWidth()
    vh=height*GraphicsHeight()/width
    Viewport 0,(GraphicsHeight()-vh) Shr 1,vw,vh
End Function

Это?

SBJoker 07.01.2011 02:25

Ответ: Непропорцональность разрешений
 
А чо у кого то проблемы с 3D были?

RBK 07.01.2011 02:42

Ответ: Непропорцональность разрешений
 
Цитата:

Сообщение от SBJoker (Сообщение 174692)
А чо у кого то проблемы с 3D были?

В 3D команду Viewport нужно использовать до создания камеры, иначе она не будет работать.
Попробуйте перенести функцию setProporcialViewport(1280,720) после камеры сами увидите.
Повторю еще раз:
Если 2D используй Viewport x, y, ширина, высота
Если 3D используй CameraViewport перем, x, y, ширина, высота

Tadeus 07.01.2011 02:50

Ответ: Непропорцональность разрешений
 
Цитата:

Сообщение от RBK (Сообщение 174693)
В 3D команду Viewport нужно использовать до создания камеры, иначе она не будет работать.
Попробуйте перенести функцию setProporcialViewport(1280,720) после камеры сами увидите.
Повторю еще раз:
Если 2D используй Viewport x, y, ширина, высота
Если 3D используй CameraViewport перем, x, y, ширина, высота

Судя по первому посту, менять viewport потом автору не понадобится, значится можно вызвать и до создания камеры.

RBK 07.01.2011 03:15

Ответ: Непропорцональность разрешений
 
Согласен. Но лично мне не нравится когда команды в коде работают через раз. Нестабильный код потом трудно отладить.

Amatsu 07.01.2011 10:52

Ответ: Непропорцональность разрешений
 
Что-то не пойму суть проблемы. Если у тебя размеры отрисовки круга были привязаны к разрешению экрана (что-то типа ширина=GWidth*0.1/высота=GHeight*0.15) - то да, при изменении разрешения круг растянется. Только накуя? Если круг фиксированного размера в пикселях, он будет круглым смотреться при любом разрешении. Исключение - если ты на широкоэкранном мониторе выставляешь разрешение от 4:3 и наоборот. Но это опять же изврат
з.ы. если у тебя размер круга должен оставаться одинакового размера на экране при любом разрешении - делай привязку его размера только к GHeight (то есть ширина=GHeight*0.15/высота=GHeight*0.15), тогда смена разрешения на широкоэкранное и обратно тебе не страшна

ant2on 08.03.2011 15:13

Ответ: Непропорцональность разрешений
 
Вот доработанная функция. Добавлены черные полоски по бокам, например, для ноутбуков.

Код:

Graphics3D 1280,800,32,2
SetBuffer BackBuffer()

setProporcialViewport(1024,768)

camera=CreateCamera()
PositionEntity camera,0,0,-3
;привет, nuprahtor!
CameraClsColor camera,0,0,255

cub=CreateCube()

While Not KeyDown(1)
    TurnEntity cub,0,1,0
    RenderWorld
    Flip
Wend


Function setProporcialViewport(width%,height%)
   
        k# =  Float(width)/Float(height)
       
        kr# = Float(GraphicsWidth())/Float(GraphicsHeight())
       
        If k = kr Then Return
   
        If k > kr Then
                vw=GraphicsWidth()
                vh=vw/k
                Viewport 0,(GraphicsHeight()-vh) Shr 1,vw,vh
        Else
                vh=GraphicsHeight()
                vw=vh*k
                Viewport (GraphicsWidth()-vw) Shr 1,0,vw,vh
        EndIf
End Function



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

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