forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   miniB3D + FBO - трабл. прошу помощи. (http://forum.boolean.name/showthread.php?t=7441)

Черный крыс 13.12.2008 15:22

miniB3D + FBO - трабл. прошу помощи.
 
Приветствую!

Пытаюсь сделать рендер в тексуру\в имейдж на движке miniB3D. Заюзал FBO. Но тут появилась проблемма....(смори рисунок). - почему то рендериться текстура со смещением....смещаеться на половину вверх.

Уже 2 недели мучаю, но никак не могу победить этот недуг....=(

КОД:
ТИП ИМЕДЖ БУФФЕРА.

Код:


Type
TImageBuffer
FieldImage:TImage
Fieldrb:Int[1]
Fieldfb:Int[1]
FieldImageframe:TGLImageframe
FieldFrame:Int=0
FieldOrigX:Int
FieldOrigY:Int
FieldOrigW:Int
FieldOrigH:Int

FunctionSetBuffer:TImageBuffer(Image:TImage,Frame:Int=0)
LocalIB:TImageBuffer=NewTImageBuffer
IB.Image
=Image
IB.Frame
=Frame
IB.GenerateFBO()
IB.BindBuffer()
ReturnIB
EndFunction

FunctionInit(Width:Int,Height:Int,Bit:Int=0,Mode:Int=60)
SetGraphicsDriver(GLMax2DDriver())
GraphicsWidth,Height,bit,Mode
glewInit()
EndFunction

MethodGenerateFBO()
ImageFrame
=TGLImageFrame(Image.frame(Frame))

imageframe.v0
=imageframe.v1
imageframe.v1
=0.0

LocalW:Int=Image.width
LocalH:Int=Image.Height

'AdjustTexSize(W,H)


glGenFramebuffersEXT(
1,fb)
glGenRenderbuffersEXT(1,rb)

glBindTexture(GL_TEXTURE_2D,Imageframe.name);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fb[0]);


glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D,Imageframe.name,0);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,rb[0]);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_DEPTH_COMPONENT24,W,H);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT,rb[0])

Localstatus:Int=glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)

Selectstatus
CaseGL_FRAMEBUFFER_COMPLETE_EXT
Print"allright"+":"+Status
CaseGL_FRAMEBUFFER_UNSUPPORTED_EXT
Print"choosedifferentformats"
Default
End
EndSelect

EndMethod

MethodBindBuffer(cam:TCamera=Null)
Ifcam<>Null
endif
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fb[0])
EndMethod
MethodUnBindBuffer()
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT
,0)
EndMethod

MethodCls(r#=0.0,g#=0.0,b#=0.0,a#=1.0)
glClearColorr,g,b,a
glClear
GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT
EndMethod

MethodBufferWidth:Int()
ReturnImage.Width
EndMethod

MethodBufferHeight:Int()
ReturnImage.Height
EndMethod

EndType



ГЛАВНЫЙ ЦИКЛ ПРОГРАММЫ :



Код:


While
NotKeyHit(KEY_ESCAPE)

IfKeyDown(30)d=d+1
IfKeyDown(44)d=d-1
IfKeyDown(203)TurnEntitycamera,0,-3,0
IfKeyDown(205)TurnEntitycamera,0,+3,0

PositionEntitycamera,0,7,0
MoveEntitycamera,0,0,d

TurnEntitypivot,0,1,0

UpdateWorld

ShowEntitycamera
CameraClsColor(camera,0,128,0,128)
Cls
SetViewport0,0,512,512
IB.BindBuffer(camera)
RenderWorld()
IB.UnBindBuffer()
SetViewport0,0,1024,768

ShowEntitycamera
HideEntityplan_cam
RenderWorld

renders=renders+
1

IfMilliSecs()-old_ms>=1000
old_ms=
MilliSecs()
fps=renders
renders=
0
EndIf

BeginMax2D()

SetScale(1,1)
SetBlend(ALPHABLEND)
SetAlpha(1)
SetColor(255,255,255)
SetRotation(0)
DrawImageImg,MouseX(),MouseY(),0
EndMax2D()


Text
0,0,"FPS:"+
String(fps)+"|W="+PixmapWidth(texture.pixmap)+"|H="+PixmapHeight(texture.pixmap)

Flip1
IfKeyHit(KEY_SPACE)
GetScreenShot()
EndIf
Wend

Все остальные установки самого miniB3D - не трогал.



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

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