golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇)

2.人物运动图(只展示第一帧)

golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇)_第1张图片

2.方块纹理图

golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇)_第2张图片

将资源准备完成之后,就能开始代码的开发了

五.开始实现!

1.资源管理

在上一篇文章中我们将纹理和着色器分别封装成了两个类,这里我们创建一个资源管理类对这两个类进行管理,由于golang中是没有静态变量的,需要用包内变量对其进行模拟

shader.go

package resource

import(

“github.com/go-gl/gl/v4.1-core/gl”

“github.com/go-gl/mathgl/mgl32”

“strings”

“fmt”

)

type Shader struct{

ID uint32

}

func Compile(vertexString, fragmentString string) *Shader{

vertexShader,err := compile(vertexString+“\x00”, gl.VERTEX_SHADER)

if err != nil{

panic(err)

}

fragmentShader,err := compile(fragmentString+“\x00”, gl.FRAGMENT_SHADER)

if err != nil{

panic(err)

}

progID := gl.CreateProgram()

gl.AttachShader(progID, vertexShader)

gl.AttachShader(progID, fragmentShader)

gl.LinkProgram(progID)

gl.DeleteShader(vertexShader)

gl.DeleteShader(fragmentShader)

return &Shader{ ID: progID}

}

func (shader *Shader) Use(){

gl.UseProgram(shader.ID)

}

func (shader *Shader) SetBool(name string, value bool){

var a int32 = 0;

if(value){

a = 1

}

gl.Uniform1i(gl.GetUniformLocation(shader.ID, gl.Str(name + “\x00”)), a)

}

func (shader *Shader) SetInt(name string, value int32){

gl.Uniform1i(gl.GetUniformLocation(shader.ID, gl.Str(name + “\x00”)), value)

}

func (shader *Shader) SetFloat(name string, value float32){

gl.Uniform1f(gl.GetUniformLocation(shader.ID, gl.Str(name + “\x00”)), value)

}

func (shader *Shader) SetMatrix4fv(name string, value *float32){

gl.UniformMatrix4fv(gl.GetUniformLocation(shader.ID, gl.Str(name + “\x00”)), 1,false,value)

}

func (shader *Shader) SetVector3f(name string, vec3 mgl32.Vec3){

gl.Uniform3f(gl.GetUniformLocatio

你可能感兴趣的:(golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇))