|
miniB3D + FBO - трабл. прошу помощи.
Приветствую!
Пытаюсь сделать рендер в тексуру\в имейдж на движке miniB3D. Заюзал FBO. Но тут появилась проблемма....(смори рисунок). - почему то рендериться текстура со смещением....смещаеться на половину вверх.
Уже 2 недели мучаю, но никак не могу победить этот недуг....=(
КОД:
ТИП ИМЕДЖ БУФФЕРА.
TypeTImageBuffer
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
glClearGL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT
EndMethod
MethodBufferWidth:Int()
ReturnImage.Width
EndMethod
MethodBufferHeight:Int()
ReturnImage.Height
EndMethod
EndType
ГЛАВНЫЙ ЦИКЛ ПРОГРАММЫ :
WhileNotKeyHit(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()
Text0,0,"FPS:"+String(fps)+"|W="+PixmapWidth(texture.pixmap)+"|H="+PixmapHeight(texture.pixmap)
Flip1
IfKeyHit(KEY_SPACE)
GetScreenShot()
EndIf
Wend
Все остальные установки самого miniB3D - не трогал.
Последний раз редактировалось Черный крыс, 13.12.2008 в 15:27.
|