[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

CLGO3D解释器发布

本帖最后由 happy886rr 于 2017-6-6 08:37 编辑

CLGO3D 绘图脚本语言,是CLGO平面绘图语言的3D版,目前处在测试阶段。将GDI+绘图库更换为OPENGL库,因此实现了三维线段绘制。
下载外链图,存为a.zip,解压即是(含全部源码)。


CLGO3D 1.0版
_____________________________________________________________________________
CLGO3D 绘图脚本语言,是CLGO平面绘图语言的3D版,目前是测试阶段。
_____________________________________________________________________________

W、A、S 键分别控制x、y、z轴视角。对.CL3后缀的文件直接拖拽到CLGO3D上运行。

_全局变量:
  1. -----------------------------------------------------------------------------
  2. 关键词(不区分大小写)        中文释义                    用法说明
  3. -----------------------------------------------------------------------------
  4. :PENX                       横坐标
  5. :PENY                       纵坐标
  6. :PENZ                       竖坐标
  7. :PENY                       纵坐标
  8. :PENW                       笔宽                        取值0-255
  9. :PENC                       笔色                        取值0-15
  10. :PENB                       笔背景色                    取值0-15
  11. :PENS                       笔光滑度                    取值0-6
  12. :PENA                       笔透明度                    取值0-255
  13. :HEADING                    笔头角度                    取值0-360
  14. :PEN0 - :PEN9               用户变量                    供用户使用的全局变量
复制代码
代码太长(1911行)不再贴出。后续版本会继续改进语法,以便封装更多的GL函数进入脚本,从而实现复杂的三维绘图。
补充:从测试效果看OPENGL性能还是有瓶颈,后续版本可能换用DX绘图。
1

评分人数

本帖最后由 523066680 于 2017-6-5 23:00 编辑

um ...

TOP

回复 3# 523066680


    ……想说就说嘛

TOP

回复 2# 老刘1号
彩色球
  1. TO MORNING_GLORY :R :H
  2. FOR ::A -:R :R
  3. IF ::A%10=0
  4. MAKE :PENC=RAND(15)+1 :PENZ=::A
  5. MAKE :H=SQRT(:R^2-::A^2)
  6. REPEAT 36
  7. PU
  8. FD :H
  9. PD
  10. FD 10
  11. BK :H+10
  12. RT 10
  13. ]
  14. ]
  15. ]
  16. TO MAIN
  17. MAKE :PENW=6
  18. MORNING_GLORY 300 0
  19. WAIT
复制代码

TOP

期待更好的作品
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 6# ivor
感谢支持

TOP

本帖最后由 523066680 于 2017-6-6 09:48 编辑

回复 4# 老刘1号

如此单纯的示例,没有用到DrawArrayElements,没有用到CallList,
就能说是OPENGL性能瓶颈,未免有些太轻松了。

如果仅仅是截图中的绘制量,再加上 Anti-aliasing 和 Z-fighting Test 也不能体现出瓶颈。

要说瓶颈,那可能是接口调用造成的消耗。

我并没有偏袒 OpenGL 的意思,而是觉得这句话说的太轻松了。
1

评分人数

TOP

回复 8# 523066680
一般的图还行,只是我在测试用opengl画分形时,递归量太大,直接卡住。

TOP

本帖最后由 523066680 于 2017-6-6 09:57 编辑

回复 9# happy886rr


    那是因为没有用 Shader,
DX提供类似的机制,把计算交给GPU而不是CPU。

TOP

回复 10# 523066680
我发现opengl就是为脚本而生的,glbegin 画点东西,glend结束。然后继续这样画,所以就很容易封装为脚本,从而脱离C语言。

TOP

本帖最后由 523066680 于 2017-6-6 11:22 编辑

这个机制是降低了门槛,但是新的GL很快淘汰了所有 begin 和 end 系列的函数,是因为性能瓶颈的缘故。
有大量的图像优化、像素操作可以交给 GPU。
特别是像Julia 集合图像,程序这边只需要给出画布范围大小,比如 800 * 600
把公式交给 GPU,GPU着色器在渲染图形的每一个像素点时候,通过你给定的公式计算该点的颜色值。



原图是 800x600 的(拉至全屏也不影响渲染效率,工作电脑的显卡是 GT430)

性能和易用性、自由度,往往很难兼得。

简单的脚本绘图可以脱离C语言,但是到了Shader层次,仍然是在 C/C++ 的语法上进行扩充

片元着色器/代码来自蓝皮书
  1. // Julia set renderer - Fragment Shader
  2. // Graham Sellers
  3. // OpenGL SuperBible
  4. #version 150 core
  5. in vec2 initial_z;
  6. out vec4 color;
  7. uniform sampler1D tex_gradient;
  8. uniform vec2 C;
  9. void main(void)
  10. {
  11.     vec2 Z = initial_z;
  12.     int iterations = 0;
  13.     float rate;
  14.     const float threshold_squared = 16.0;
  15.     const int max_iterations = 256;
  16.     while (iterations < max_iterations && dot(Z, Z) < threshold_squared)
  17.     {
  18.         vec2 Z_squared;
  19.         Z_squared.x = Z.x * Z.x - Z.y * Z.y + C.y;
  20.         Z_squared.y = Z.x * Z.y * 2.0 + C.x;
  21.         Z = Z_squared;
  22.         iterations++;
  23.     }
  24.    
  25.     if (iterations == max_iterations)
  26.         color = vec4(0.0, 0.0, 0.0, 1.0);
  27.     else
  28.         rate =  float(iterations) / 10.0;
  29.         color = vec4( sin(rate), cos(1.0-rate), exp(rate), 1.0);
  30. }
复制代码
1

评分人数

    • happy886rr: 666 ,你这个代码怎么编译,环境咋配?技术 + 1

TOP

本帖最后由 523066680 于 2017-6-6 12:04 编辑

我只能推荐两本书:
OpenGL Superbible 7th

OpenGL Programming Guide 8th
书的官方网站有示例代码,可以 cmake 编译。

讲真,学习成本挺高的,特别是业余学,耗时。DirectX 学习成本也不低,DX11 和 DX12 的英文教学拳头这么厚。
Introduction to 3D Game Programming: With Directx 11
Introduction to 3D Game Programming: With Directx 12

所以当楼主说 OGL有瓶颈,换DX 的时候我特别激动,这根本不是件轻松的事情,
当真的了解整个框架,把能优化的技巧都用上了,遇到的瓶颈才算是瓶颈。
1

评分人数

TOP

回复 13# 523066680
好资料,我没显卡,用的是cpu核显测试的,所以感觉太卡了。

TOP

256色色相环怎么写?每层16色,共16层环形

TOP

本帖最后由 happy886rr 于 2017-6-8 23:45 编辑

回复 17# 3518228042

你画个图出来,我看看是啥样。
莫非是要这种效果?

(本图仅为外链)

TOP

返回列表