【译】GLSL HACKER 简介
GLSL HACKER 简介
翻译原文章链接:http://www.geeks3d.com/glslhacker/blog/20150509/overview-of-glsl-hacker/ (侵权删)
文章索引:
1.什么是GLSL Hacker
2.GLSL Hacker是如何工作的
3.场景节点
4.帮助和文档
1.什么是GLSL Hacker
GLSL Hacker是一个用于创建如游戏,交互式应用等的3D实时原型样本的跨平台的工具。GLSL Hacker支持所有常见桌面平台:windows,Linux,OSX(所有平台都是64位),还包括32位的Paspberry Pi的平台上。
GLSL Hacker基于常见的语言,如:GLSL(OpenGL着色语言),Lua和Python编程语言。
GLSL Hacker没有复杂的图形接口和大量的菜单和选项。相对应的,它依赖于简单的文本文件来储存Demo的源代码。GLSL Hacker不鼓励用户在文件中使用自定义的结构体。Demo的文件又用户自己决定如何管理。用户可以只用一个单独的文件就包括所有东西(XML节点,lua/python脚本和GLSL程序),也可以将Demo分成若干个文件(一个XML用于主要结构表示,若干个lua/python文件和若干个GLSL shader文件)。GLSL Hacker是相当灵活的你完全可以按你的想法组织程序。
相比它的前辈GeeXLab(GLSL Hacker可以看做GeeXlab的更高的修改版本),GLSL Hacker通过更底层的抽象提供程序接口。虽然更底层的代码导致代码量有所增加但是同时也允许对渲染过程有更好的控制。这里没有场景图管理器,所以需要由用户指定如何管理被渲染的对象。GLSL Hacker还实现一些高层API如读取3D模型和纹理。下面是部分的代码:
对象创建:
· local aspect = screenW / screenH
· camera = gh_camera.create_persp(60.0, aspect, 1.0, 1000.0)
· gh_camera.set_viewport(camera, 0, 0, screenW, screenH)
· gh_camera.set_position(camera, 2, 2, 4)
·
· ground_tex = gh_texture.create_from_file("ground.jpg", 0, 0)
· ground_mesh = gh_mesh.create_plane(100, 100, 10, 10)
·
· -- texture_gpu_prog is a GLSL program defined in the XML file.
· glsl_prog = gh_node.getid("texture_gpu_prog")
场景渲染:
· gh_camera.bind(camera)
· gh_renderer.clear_color_depth_buffers(0, 0, 0, 1.0, 1.0)
· gh_gpu_program.bind(glsl_prog)
· gh_texture.bind(ground_tex, 0)
· gh_object.render(ground_mesh)
这样一看,是不是很简单呢?GLSL Hacker相当好用!高层封装的库可以在Lua或Python中使用,就算是个小孩都能用GLSL Hacker开发原型。
学习GLSL Hacker最好的方式就是学习分析提供的实例代码包(这里下载:http://www.geeks3d.com/glslhacker/download/)。我们还提供的文本编辑器用于更方便编辑Demo文件,下载地址:http://www.geeks3d.com/glslhacker/blog/20150509/text-editors-for-programming-with-glsl-hacker/。
2.GLSL Hacker是如何工作的
GLSL Hacker工作原理就像网页浏览器:用户读取源代码文件然后GLSL Hacker将其实时显示。甚至用户还可以用命令行直接读取场景文件。
它的入口点是XML文件。此文件包括了各种的script(Lua,Python,GLSL)用于创建3D场景。下面是几种脚本的类型:
INIT script:此脚本在创建场景开始时只执行一次。
FRAME script: 此脚本在每一帧执行一次。
SIZE script:此脚本在窗口尺寸改变的时候执行。
DRAG_N_DROP script:此脚本在当导入文件时执行(当前此特性只支持Windows和Mac OS X平台)。
TERMINATE scripte: 此脚本在Demo结束运行是执行,通常由于资源清理。
一个场景可以有若干个同类型脚本。并且Lua和Python脚本可以在同一场景中使用(可以参考实例包里面的Demo:host_api/Lua_Python_ShareVar/)。举个例子:一个场景包括两个INIT 脚本(一个是Lua,一个是Python),两个FRAME脚本(同上一个Lua一个Python)正常使用:
下面这张图不同的脚本是如何执行的:
3.场景节点
在GLSL Hacker中一个场景由多个节点组成。几乎所有的元素都由节点组成如:GLSL程序,纹理,网格。
4.帮助和文档
这里提供所有教程和文档和帮助的链接入口:http://www.geeks3d.com/glslhacker/learn/。
最简单寻求帮助的方式就是到GLSL Hacker论坛。英文论坛链接:http://www.geeks3d.com/forums/index.php?board=5.0。
法文论坛链接:http://www.geeks3d.com/forums/index.php?board=6.0。
这里是所有有脚本API参考指南链接:http://www.geeks3d.com/glslhacker/reference/。
如果这篇文章采纳了我再翻译GLSL相关的教程吧。不知这些翻译过来有人看不(= =!)。