forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Как задать "все" координаты для DrawImage (http://forum.boolean.name/showthread.php?t=15871)

Dzirt 19.11.2011 17:43

Как задать "все" координаты для DrawImage
 
Нужно для всех четырех точек задать координаты, во внутреностях бмакса не особо шарю, так что буду рад за наставление.
Вообщем нужно примерно так :
Drawimage Timage,x1,y1,x2,y2,x3,y3,x4,y4,frame

SBJoker 19.11.2011 18:11

Ответ: Как задать "все" координаты для DrawImage
 
Отскейль изображение до нужного размера после чего нарисуй в требуемой позиции.

(это если не надо деформаций)

Dzirt 19.11.2011 18:19

Ответ: Как задать "все" координаты для DrawImage
 
К сожалению именно деформации и нужны. =)

За вариант решения спасибо...я уже думал как бы обойтись только ним, но он не подходит для достижениянужной цели, и еффекта =(

Черный крыс 20.11.2011 21:23

Ответ: Как задать "все" координаты для DrawImage
 
Глянь в сторону DrawPoly() - но тут нет текстур, Вобсчем - переписать эту функцию - дело нескольких минут =).

Dzirt 20.11.2011 21:44

Ответ: Как задать "все" координаты для DrawImage
 
Переписать "DrawPoly" или "DrawImage" для достижения цели?
Помоги пожалуйста, буду очень благодарен.

Reizel 20.11.2011 22:38

Ответ: Как задать "все" координаты для DrawImage
 
DrawPoly переписать. А вообще где то в инетах видал сорцы для DrawTexturedPoly

Dzirt 20.11.2011 22:50

Ответ: Как задать "все" координаты для DrawImage
 
То что нужно, спасибо за подсказку!

http://www.blitzbasic.com/Community/...hp?topic=81258

Код:

Function DrawTexturedPoly( image:TImage,xyuv#[],frame=0, vertex = -1)
        Local handle_x#, handle_y#
        GetHandle handle_x#, handle_y#
        Local origin_x#, origin_y#
        GetOrigin origin_x#, origin_y#

        Local D3DDriver:TD3D7Max2DDriver = TD3D7Max2DDriver(_max2dDriver)

        Assert Image, "Image not found"

        If D3DDriver Then
                DrawTexturedPolyD3D ..
                D3DDriver,..
                TD3D7ImageFrame(image.Frame(frame)), ..
                xyuv, handle_x, handle_y, origin_x,origin_y, vertex*4
                Return
        End If

        Local OGLDriver:TGLMax2DDriver = TGLMax2DDriver(_max2dDriver)
        If OGLDriver Then
                DrawTexturedPolyOGL ..
                OGLDriver,..
                TGLImageFrame(image.Frame(frame)), ..
                xyuv, handle_x, handle_y, origin_x,origin_y, vertex*4
                Return
        End If
End Function


Function DrawTexturedPolyD3D( Driver:TD3D7Max2DDriver, Frame:TD3D7ImageFrame,xyuv#[],handlex#,handley#,tx#,ty# , vertex)
        If Driver.islost Return
        If xyuv.length<6 Return
        Local segs=xyuv.length/4
        Local len_ = Len(xyuv)

        If vertex > - 1 Then
                segs = vertex / 4
                len_ = vertex
        End If
        Local uv#[] = New Float[segs*6] ' 6


        Local c:Int Ptr=Int Ptr(Float Ptr(uv))

        Local ii:Int = 0
        For Local i=0 Until len_ Step 4
                Local x# = xyuv[i+0]+handlex
                Local y# = xyuv[i+1]+handley
                uv[ii+0] = x*Driver.ix+y*Driver.iy+tx
                uv[ii+1] = x*Driver.jx+y*Driver.jy+ty
                uv[ii+2] = 0 ' *********** THIS IS THE Z-COORDINATE
                c[ii+3] = Driver.DrawColor
                uv[ii+4] = xyuv[i+2]
                uv[ii+5] = xyuv[i+3]
                ii:+6
        Next

        Driver.SetActiveFrame Frame
        Driver.device.DrawPrimitive(D3DPT_TRIANGLEFAN,D3DFVF_XYZ| D3DFVF_DIFFUSE | D3DFVF_TEX1,uv,segs,0)
End Function

Function DrawTexturedPolyOGL (Driver:TGLMax2DDriver, Frame:TGLImageFrame, xy#[],handle_x#,handle_y#,origin_x#,origin_y#, vertex)
        Private
        Global TmpImage:TImage
        Public
       
        If xy.length<6 Return
       
        Local rot#  = GetRotation()
        Local tform_scale_x#, tform_scale_y#
        GetScale tform_scale_x, tform_scale_y
       
        Local s#=Sin(rot)
        Local c#=Cos(rot)
        Const scale#=1.28
        Local ix#= c*tform_scale_x*scale
        Local iy#= -s*tform_scale_y*scale
        Local jx#= s*tform_scale_x*scale
        Local jy#= c*tform_scale_y*scale
       
        glBindTexture GL_TEXTURE_2D, Frame.name
        glEnable GL_TEXTURE_2D
       
        glBegin GL_POLYGON
        For Local i=0 Until Len xy Step 4
                If vertex > -1 And i >= vertex Then Exit
                Local x#=xy[i+0]+handle_x
                Local y#=xy[i+1]+handle_y
                Local u#=xy[i+2]
                Local v#=xy[i+3]
                glTexCoord2f u,v
                glVertex2f x*ix+y*iy+origin_x,x*jx+y*jy+origin_y
        Next
        glEnd
        If Not tmpImage Then tmpImage = CreateImage(1,1)
        DrawImage tmpImage, -100, - 100 ' Chtob zbit' flag texturi
End Function

Сапсибо также : Dex


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

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