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

本文是关于使用Golang进行2D游戏开发的学习笔记,介绍了如何加载纹理资源,创建游戏对象以及精灵和摄像头的实现。文章涵盖texture2D、gameObj、SpriteRenderer和Camera2D的详细代码实现,通过实例讲解了2D游戏开发的基础概念和技术。
摘要由CSDN通过智能技术生成

片段着色器与上一篇文章的基本相同,唯一区别是加入了一个判断,在图像区域的透明度小于0.1的时候,会放弃对这片区域的渲染。

texture2D.go

package resource

import(

“os”

“image”

“image/png”

“image/draw”

“errors”

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

)

type Texture2D struct{

ID uint32

TEXTUREINDEX uint32

}

func NewTexture2D(file string, TEXTUREINDEX uint32) *Texture2D{

imgFile, err := os.Open(file)

if err != nil {

panic(err)

}

img, err := png.Decode(imgFile)

if err != nil {

panic(err)

}

rgba := image.NewRGBA(img.Bounds())

if rgba.Stride != rgba.Rect.Size().X*4 {

panic(errors.New(“unsupported stride”))

}

draw.Draw(rgba, rgba.Bounds(), img, image.Point{0, 0}, draw.Src)

var textureID uint32

gl.GenTextures(1, &textureID)

gl.BindTexture(gl.TEXTURE_2D, textureID)

gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)

gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)

gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)

gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)

gl.TexImage2D(

gl.TEXTURE_2D,

0,

gl.RGBA,

int32(rgba.Rect.Size().X),

int32(rgba.Rect.Size().Y),

0,

gl.RGBA,

gl.UNSIGNED_BYTE,

gl.Ptr(rgba.Pix))

gl.BindTexture(gl.TEXTURE_2D, 0);

return &Texture2D{ ID: textureID,TEXTUREINDEX:TEXTUREINDEX}

}

func (texture *Texture2D) Use(){

gl.ActiveTexture(texture.TEXTUREINDEX)

gl.BindTexture(gl.TEXTURE_2D, texture.ID)

}

texture2D类用于解析png格式的图片并创建纹理绑定到上下文中

resource.go

package resource

import (

“io/ioutil”

)

var (

textures = make(map[string]*Texture2D)

shaders = make(map[string]*Shader)

)

func LoadShader(vShaderFile, fShaderFile, name string){

vertexString, err := ioutil.ReadFile(vShaderFile)

if err != nil{

panic(err)

}

fragmentString, err := ioutil.ReadFile(fShaderFile)

if err != nil{

panic(err)</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值