go-gl第一个窗口(二)

Go最新golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇),2024年最新滴滴Golang面试 要注意的是,为了只渲染一张图片中我们需要的部分,纹理图片必须是带有。需要说明的是,着色器程序需要结合具体要绘制的顶点来看,在这个2D游戏中,所有的元素都是由两个三角形组成的矩形构成的,因此在不使用。由于我们开发的是2D游戏,所有顶点的z分量都为0,所以用顶点中每一行的前两位作为顶点坐标,后两位作为纹理坐标,并将顶点坐标和纹理坐标合为一个变量传入着色器中。在前面的文章中已经讲过,不再赘述。片段着色器与上一篇文章的基本相同,唯一区别是加入了一个判断,在图像区域的透明度小于0.1的时候,会放弃对这片区域的渲染。 阅读详情

1. 初始化程序


首先添加引用的包,包括glfw和go-gl

import (
    "runtime"
    "github.com/go-gl/glfw/v3.2/glfw"
    "github.com/go-gl/gl/v3.3-core/gl"
)

程序窗口的创建代码非常简单,需要注意的是runtime.LockOSThread调用是必须的,原因参考:LockOSThread


func main() {
    runtime.LockOSThread()

    window := initGlfw()
    defer glfw.Terminate()

    for !window.ShouldClose() {

        glfw.PollEvents()
        window.SwapBuffers()    
    }
}

2. glfw初始化


glfw初始化中设置窗口的特性(标题、大小等),同时设置OpenGL的版本等信息,并调用CreateWindow创建窗口


func initGlfw() *glfw.Window {
    if err := glfw.Init(); err != nil {
        panic(err)
    }

    glfw.WindowHint(glfw.ContextVersionMajor, 3)
    glfw.WindowHint(glfw.ContextVersionMinor, 3)
    glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)

    window, err := glfw.CreateWindow(width, height, "OpenGL", nil,nil)
    if  err != nil {
        panic(err)
    }
    window.MakeContextCurrent()
    return window
}

3. OpenGL初始化

在调用OpenGL函数之前,需要调用gl.Init初始化OpenGL

func initOpenGL() {
    if err := gl.Init(); err != nil {
        panic(err)
    }
    version := gl.GoStr(gl.GetString(gl.VERSION))
    log.Println("OpenGL version", version)

}
//绘制函数
func draw() {
    gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)


}

完整的代码

package main

import (
    "log"
    "runtime"

    "github.com/go-gl/gl/v3.3-core/gl"
    "github.com/go-gl/glfw/v3.2/glfw"
)

const (
    width  = 800
    height = 600
)

func main() {
    runtime.LockOSThread()

    window := initGlfw()
    defer glfw.Terminate()

    initOpenGL()

    for !window.ShouldClose() {
        draw()

        glfw.PollEvents()
        window.SwapBuffers()
    }
}

func initGlfw() *glfw.Window {
    if err := glfw.Init(); err != nil {
        panic(err)
    }

    glfw.WindowHint(glfw.ContextVersionMajor, 3)
    glfw.WindowHint(glfw.ContextVersionMinor, 3)
    glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)

    window, err := glfw.CreateWindow(width, height, "FirstWindow", nil, nil)
    if err != nil {
        panic(err)
    }
    window.MakeContextCurrent()

    return window
}

func initOpenGL() {
    if err := gl.Init(); err != nil {
        panic(err)
    }
    version := gl.GoStr(gl.GetString(gl.VERSION))
    log.Println("OpenGL version", version)

    gl.ClearColor(0.2, 0.4, 0.6, 1.0)

}

func draw() {
    gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)

}

参考资料:

1.OpenGL & Go Tutorial Part 1: Hello, OpenGL

go_gl:介绍将go与gl一起使用的项目 很高兴知道 gl软件包不支持模块,因此我们需要禁用模块系统才能使用它们。 我们可以通过执行以下命令来永久设置此设置: go env -w GO111MODULE=auto 当代码位于$ GOPATH / src中并且不存在go.mod文件时,这将不适用于模块模式。 在Linux上,如果$ GOPATH为空。 软件包存储在/ home / {user} / go / src /中。 模块存储在/ home / {user} / go / pkg / mod下 如果您在package文件夹之外工作,则可以将GO111MODULE = off设置为: go env -w GO111MODULE=off 另外,您可以将设置作为第一个参数传递: GO111MODULE=off go get github.com/go-gl/gl/v4.1-core/gl GO111MODULE=off 立即下载

相关推荐

Go-Go跨平台glfw库用于创建一个OpenGL上下文和接收事件。

goxjs/glfw - Go跨平台glfw库用于创建一个OpenGL上下文和接收事件。

go-gl搭建开发环境(一)

1. 简介 Go语言(Golang)是Google在2009年推出的一种编程语言。Golang是一门开源的语言,可以从github上找到它的源码。Golang也是一门跨平台的语言,可以运行在Windows、Linux、Mac OS X以及Plan9等操作系统上,更多详细的介绍可以参考Golang的官方网站 本文主要介绍使用Golang如何开发OpenGL程序,搭建go-gl的开发环境。使用...

Frank的专栏 5816

Go-glfw-Go绑定GLFW3

glfw - Go 绑定GLFW 3

Go-GL 项目教程

Go-GL 是一个开源的 Go 语言绑定库,用于与 OpenGL 图形库进行交互。OpenGL 是一个跨平台的图形 API,广泛用于开发 2D 和 3D 图形应用程序。Go-GL 项目的目标是为 Go 开发者提供一个简单且高效的接口,以便他们能够利用 OpenGL 的功能来创建高性能的图形应用。 ## 2、项目快速启动 ### 安装 Go-GL 首先,确保你已经安装了 Go 语言环境。然后,...

gitblog_00284的博客 1077

basic-go-gl:具有go-gl基本用法的存储库(用于Golang的OpenGL)

Golang基本OpenGL示例 该项目使用使用OpenGL创建场景并进行播放。 依存关系 该软件包使用。 每当您运行go build或go test所有依赖项都会自动下载。 请参阅和以查看此包使用的所有模块。 OpenGL for Go: github.com/go-gl/gl/v2.1/gl GLFW: github.com/go-gl/glfw/v3.3/glfw 用法 要执行此示例程序,可以使用make run命令,它将生成golang可执行文件并运行示例程序。 程序执行后,该命令将删除其创建的golang可执行文件。 指令 make run :构建并运行程序 make :将构建所需的所有文件 结果 运行此示例程序时,该程序将创建一个白色窗口并显示2个带有旋转警笛(X)的正方形(汽车)。 一辆车是蓝色的,另一辆是红色的。 您可以按q或ESC退出程序。

Go-mathgl-一个纯Go3D数学库

mathgl - 一个纯 Go 3D 数学库

探索图形编程的新里程:Go语言中的OpenGL绑定库——gl

探索图形编程的新里程:Go语言中的OpenGL绑定库——gl 在寻找一个强大而易用的工具来实现你的图形渲染梦想吗?看看这个令人惊叹的开源项目——gl,它是针对Go语言的OpenGL绑定库。gl的目的是让Go开发者能够轻松地利用强大的OpenGL图形库,享受高效且灵活的3D图形编程。 1、项目介绍 gl是一个基于Go语言的库,它提供了一个全面的API接口,用于与OpenGL进行交互。借助这个库,你可...

gitblog_00062的博客 545

GPS从入门到放弃(十七) --- 对流层延时

GPS从入门到放弃(十七) — 对流层延时 对流层概念 对流层(Troposphere)地球大气层靠近地面的一层。它同时是地球大气层里密度最高的一层,它蕴含了整个大气层约75%的质量,以及几乎所有的水蒸气及气溶胶。 对流层的下界与地面相接,上界高度随地理纬度和季节而变化,在低纬度地区平均高度为1718公里,在中纬度地区平均为1012公里,在高维度地区平均为8~9公里,并且夏季高于冬季。 卫星导航...

tyst08的专栏 1万+

探索Go语言与OpenGL的完美结合:go-gl/gl项目推荐

探索Go语言与OpenGL的完美结合:go-gl/gl项目推荐 项目介绍 go-gl/gl 是一个为Go语言提供OpenGL绑定的开源项目。通过这个项目,开发者可以在Go语言环境中直接调用OpenGL的强大功能,从而实现高性能的图形渲染和处理。无论你是游戏开发者、图形应用开发者,还是对图形编程感兴趣的爱好者,go-gl/gl 都能为你提供一个便捷、高效的开发平台。 项目技术分析 go-gl/gl ...

gitblog_00752的博客 1308

第一届“龙信杯”电子数据取证竞赛Writeup

第一届“龙信杯”电子数据取证竞赛Writeup

toto的博客 1万+

rk3326 MIPI休眠唤醒黑屏有背光问题

** 1.问题现象: ** **【开机起来】**开机起来可以正常显示 **【按power按键休眠】**第二次按下Power按键进入休眠,隔10s,再按Power按键唤醒。 **【出现结果】**屏幕黑屏有背光,并提示drm time out错 **【lcd信息】**lcd为480*800 2lane的mipi **【复现概率】**第二次按下休眠唤醒必然复现 【具体错误log如下】 //第一次休眠的log// [ 54.858511] dw-mipi-dsi ff450000.dsi: final DSI-

Ian22l的博客 3944

Go-GL 示例项目常见问题解决方案

Go-GL 示例项目常见问题解决方案 项目基础介绍 Go-GL 示例项目是一个基于 Go 语言的开源项目,旨在为开发者提供使用 Go 语言进行 OpenGL 编程的示例代码。该项目的主要编程语言是 Go,结合了 OpenGL 图形库,帮助开发者快速上手并理解如何在 Go 中使用 OpenGL 进行图形渲染。 新手使用注意事项及解决方案 1. 环境配置问题 问题描述: 新手在尝试运行 Go-GL 示...

gitblog_00375的博客 945

高通 Gen AI 推理扩展 (GENIE)(5):实战指南与Engine API深度解析

本文深入解析高通Gen AI推理扩展(GENIE)的Engine API核心功能与实战应用,涵盖引擎实例化、多引擎动态切换、性能调优及跨平台部署等关键技巧。通过详细代码示例和性能数据,帮助开发者高效利用GENIE进行AI推理,提升应用性能与稳定性。

weixin_29065959的博客 465

go-gl搭建开发环境

1. 简介Go语言(Golang)是Google在2009年推出的一种编程语言。Golang是一门开源的语言,可以从github上找到它的源码。Golang也是一门跨平台的语言,可以运行在Windows、Linux、Mac OS X以及Plan9等操作系统上,更多详细的介绍可以参考Golang的官方网站本文主要介绍使用Golang如何开发OpenGL程序,搭建go-gl的开发环境。使用Golang...

嘿嘿 1474

Android应用隐私合规自动化检测:Frida与Camille实战指南

在移动应用安全与隐私合规领域,动态代码插桩技术已成为核心检测手段。其原理是通过运行时注入,实时监控和修改应用行为,从而绕过传统静态分析的局限。这项技术的核心价值在于能够精准捕获应用在运行时的敏感数据调用与网络传输行为,为隐私合规审计、安全测试提供直接证据。在实际应用场景中,它尤其适用于自动化检测违规收集个人信息、追踪数据流向等任务。本文聚焦于利用Frida这一动态插桩框架,结合Camille隐私合规检测工具集,构建自动化监控环境。通过注入JavaScript代码,实现对Android敏感API(如获取设备标

weixin_34254464的博客 388

Matlab编码转换实战:从GBK到UTF-8的完整解决方案

本文提供Matlab编码转换的完整实战方案,重点解决GBK与UTF-8编码冲突导致的中文乱码问题。通过修改系统配置文件、批量转换项目文件及设置默认保存编码,实现从GBK到UTF-8的彻底迁移,并分享常见避坑指南与自动化脚本技巧,确保代码跨平台协作的稳定性。

weixin_29031057的博客 325

Golang之OpenGL(二)

OpenGL纹理贴图

qq_46100517的博客 1044

保姆级教程:用Docker一键部署vLLM大模型推理服务(附常见报错解决方案)

本文提供了一份详细的Docker化vLLM大模型推理服务部署指南,涵盖从环境准备到性能调优的全流程。通过容器化技术解决大语言模型部署中的显存利用率、吞吐量等核心问题,并附常见报错解决方案,帮助开发者快速构建高效、可扩展的AI推理服务。

weixin_29248313的博客 492

Robo 3T 免费 MongoDB 图形化管理:从安装到第一条查询的完整指南

Robo 3T(前身 Robomongo)是一款免费的跨平台 MongoDB 图形化管理工具,适合想在命令行之外快速查看数据、调试查询的使用者。它把原生 mongo shell 嵌进图形界面:左侧导航树、中间查询编辑器、下方分页结果,让你不离开界面就能跑完整条查询。 ## 先判断:它适不适合你 - ✅ 你需要脱离命令行,图形化地浏览、调试 MongoDB 数据。 - ✅ 你依赖真实的 mong

gitblog_00035的博客 869

Cesium进阶学习四、shadertoy(着色器)

Cesium进阶学习着色器

程迷学习的博客 4322

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

goxjs/gl 项目教程

goxjs/gl 项目教程 1. 项目的目录结构及介绍 goxjs/gl/ ├── examples/ │ ├── basic/ │ ├── cube/ │ ├── texture/ │ └── ... ├── gl/ │ ├── context.go │ ├── context_glfw.go │ ├── context_js.go │ ├── context_n...

gitblog_00750的博客 393

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Golang之OpenGL(一)

使用OpenGL实现窗口中绘制三角形(纯色|彩色)、正方形(变色)

qq_46100517的博客 1354

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

golang游戏开发学习笔记-用golang画一个随时间变化颜色的正方形

保存一个或多个vbo和对应的顶点属性,仅仅有vbo是不能直接渲染图像的,还需要绑定各种属性,比如法线,颜色信息,索引等等,有了vao之后每次绘制同构的vbo时不用在重新绑定。语言编写,学过责任链设计模式的同学可以将着色器理解为责任链中的不同部分,前一个程序的输出是后一个程序的输入,我们分别编写一个顶点着色器和片段着色器并编写一个使用。,所以两个重复的顶点直接省略,而第二个切片的每一行分别代表前一个切面中顶点的索引,分别构成对应的三角形。初始化窗口并设置属性,这里设置窗口不可改变大小,要注意的是。

2401_87198334的博客 1202

Go上的极简OpenGL开发笔记(二)

之后的学习过程默认在原有代码上修改完成 添加 OpenGL相关 添加初始化 OpenGL的函数,打印 version // initOpenGL 初始化 OpenGL 并且返回一个初始化了的程序。 func initOpenGL() uint32 { if err := gl.Init(); err != nil { panic(err) } version := gl.GoStr(gl.GetString(gl.VERSION)) log.Println.

刘阿宾的博客 393

探索生命游戏:用Go和OpenGL实现的康威生命游戏

探索生命游戏:用Go和OpenGL实现的康威生命游戏 项目介绍 conways-gol 是一个用Go语言和OpenGL实现的康威生命游戏(Conway's Game of Life)。这个项目不仅是一个有趣的游戏实现,更是一个学习OpenGL和Go语言的绝佳教程。通过跟随教程,你可以逐步掌握如何使用Go语言与OpenGL结合,实现一个经典的细胞自动机游戏。 项目技术分析 技术栈 Go语言:作为项...

gitblog_01082的博客 775
上一篇: go-gl搭建开发环境(一)
下一篇: go-gl第一个三角形(三)
csxiaoshui
博客等级 码龄16年 873粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值