Jumat, 19 Juni 2015

Tekstur objek 2D pada OpenTK 2D

Selamat siang dan salam sejahterah selalu rekan-rekan...

Siang ini aku akan membahas tentang program tekstur pada OpenTK 2D dengan menggunakan VB .Net, artikel ini menyambung artikel sebelumnya, artikel tentang OpenTK dan VB .Net.

Tekstur diperlukan pada pemrograman game untuk menampilkan objek game seperti pesawat, peluru, pohon, rumah dan lain-lain, dengan menggunakan tekstur Anda dapat berkreasi tanpa batas dalam membuat sebuah game.

Pada gambar di bawah dapat dilihat sebuah tekstur bergambar pohon yang dibuat dari sebuah file bitmap 24 bit.


File bitmap 24 bit yang akan digunakan untuk tekstur harus dikonversi terlebih dahulu.

Protected Function LoadBmpTexture(ByRef textureId As Integer, ByVal filename As String) As Boolean
        On Error Resume Next Dim bmp As New Bitmap(filename)
        If Err.Number <> 0 Then
            LoadBmpTexture = False
            Exit Function
        End If
        bmp.RotateFlip(RotateFlipType.RotateNoneFlipY)
        Dim data As BitmapData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height),
                System.Drawing.Imaging.ImageLockMode.ReadOnly,
                System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        GL.GenTextures(1, textureId)
        GL.BindTexture(TextureTarget.Texture2D, textureId)
        GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba,
            bmp.Width, bmp.Height, 0, OpenGL.PixelFormat.Bgra,
            PixelType.UnsignedByte, data.Scan0)
        bmp.UnlockBits(data) GL.TexParameter(TextureTarget.Texture2D,
            TextureParameterName.TextureMinFilter,
            TextureMinFilter.Linear)
        GL.TexParameter(TextureTarget.Texture2D,
            TextureParameterName.TextureMagFilter,
            TextureMagFilter.Linear)
        LoadBmpTexture = True
End Function

Fungsi di atas adalah fungsi yang digunakan untuk mengkonversi file bitmap 24 bit menjadi sebuah tekstur, contoh cara untuk me-load file bmp dan mengubahnya menjadi tekstur dapat Anda lihat seperti berikut ini.

Protected Function Load_Texture() As Boolean
    'BG
    If LoadBmpTexture(BG, My.Application.Info.DirectoryPath & "\texture\BG.bmp") = False Then
        Load_Texture = False
        Exit Function
    End If
    'pohon1
    If LoadBmpTexture(Pohon1BMP, My.Application.Info.DirectoryPath & "\texture\pohon1.bmp") = False Then
        Load_Texture = False
        Exit Function
    End If
    'Red
    If LoadBmpTexture(Red, My.Application.Info.DirectoryPath & "\texture\Red.bmp") = False Then
        Load_Texture = False
        Exit Function
    End If
    'Black
    If LoadBmpTexture(Black, My.Application.Info.DirectoryPath & "\texture\Black.bmp") = False Then
        Load_Texture = False
        Exit Function
    End If
    Load_Texture = True
End Function

Agar poligon persegipanjang yang ditampilkan ke layar monitor bertekstur pohon seperti gambar di bawah maka program yang telah Anda buat sebelumnya perlu diubah sedikit.


Berikut listing kode programnya.

Deklarasi variable untuk tekstur.

Protected BG As UInteger
Protected Pohon1BMP As UInteger
Protected Red As UInteger
Protected Black As UInteger

 Load tekstur.

Private Sub GlControl1_Load(sender As Object, e As EventArgs) Handles GlControl1.Load
    GL.ClearColor(Color.White)
    '''''''''''''''''''''
    'Load tekstur
    '''''''''''''''''''''
    GL.Enable(EnableCap.Texture2D)
    If Load_Texture() = False Then
        GlControl_Loaded = False
        MsgBox("Error loading texture, program dihentikan", vbOKOnly, "Loading Texture")
        End
    End If
    ...
    ...
    ...
    GlControl_Loaded = True
End Sub

Beri tekstur pada polygon / persegipanjang.

Private Sub Render_Pohon()
    'aktifkan tektur pohon
    GL.BindTexture(TextureTarget.Texture2D, Pohon1BMP)
    GL.Begin(BeginMode.Quads)
    'titik kiri bawah
    GL.TexCoord2(0.0, 0.0) : GL.Vertex2(-300, -450)
    'titik kanan bawah
    GL.TexCoord2(1.0, 0.0) : GL.Vertex2(300, -450)
    'titik kanan atas
    GL.TexCoord2(1.0, 1.0) : GL.Vertex2(300, 200)
    'titik kiri atas
    GL.TexCoord2(0.0, 1.0) : GL.Vertex2(-300, 200)
    GL.End()
    If CheckBox2.Checked = True Then
        'warna merah untuk garis
        GL.BindTexture(TextureTarget.Texture2D, Red)
        GL.Begin(BeginMode.LineLoop)
        GL.Vertex2(-300, -450) 'titik kiri bawah
        GL.Vertex2(300, -450) 'titik kanan bawah
        GL.Vertex2(300, 200) 'titik kanan atas
        GL.Vertex2(-300, 200) 'titik kiri atas
        GL.End()
    End If
End Sub

Render grafik.

Private Sub GlControl1_Paint(sender As Object, e As PaintEventArgs) Handles GlControl1.Paint
    GL.Clear(ClearBufferMask.ColorBufferBit)
    GL.Clear(ClearBufferMask.DepthBufferBit)
    Render_BG()
    Render_Pohon()
    GarisSumbuXY()
    'Swap Buffer
    GraphicsContext.CurrentContext.VSync = True
    GlControl1.SwapBuffers()
End Sub

Tuntas sudah cerita tentang tekstur pada OpenTK 2D, program pembuatan tekstur ini amat bermanfaat jika rekan-rekan hendak membuat game 2D, pada lain kesempatan ogut akan membahas tentang teknik masking di OpenTK.

Salam Sukses Selalu


Heriady
heriady.yoh@gmail.com


Download source code progam OpenTK dengan tekstur ada disini.


Artikel terkait
Artikel terkait

VB . Net dan OpenTK 2D

Teknik masking pada OpenTK 2D

Matematika rotasi untuk animasi OpenTK 2D

Animasi Game 2D dengan Translasi

Tidak ada komentar:

Posting Komentar