免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2234 | 回复: 0
打印 上一主题 下一主题

Ruby 使用 OpenGL 的例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-15 16:45 |只看该作者 |倒序浏览
  1. require "opengl"
  2. require "glut"

  3. $light_diffuse = [1.0, 0.7, 0.7, 1.0]
  4. $light_position = [1.0, 1.0, 1.0, 0.0]
  5. $n = [
  6.   [-1.0, 0.0, 0.0], [0.2, 1.0, 0.0], [1.0, 0.0, 0.0],
  7.   [0.0, -1.0, 0.0], [0.0, 0.3, 1.0], [0.0, 0.0, -1.0] ]

  8. $faces = [
  9.   [0, 1, 2, 3], [3, 2, 6, 2], [7, 6, 5, 4],
  10.   [4, 2, 1, 2], [5, 6, 2, 1], [7, 4, 0, 3] ]

  11. def drawBox
  12.   for i in (0..5)
  13.     GL.Begin(GL::QUADS)
  14.     GL.Normal(*($n[i]))
  15.     GL.Vertex($v[$faces[i][0]])
  16.     GL.Vertex($v[$faces[i][1]])
  17.     GL.Vertex($v[$faces[i][2]])
  18.     GL.Vertex($v[$faces[i][3]])
  19.     GL.End()
  20.   end
  21. end

  22. display = Proc.new {
  23.   GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
  24.   drawBox
  25.   GLUT.SwapBuffers
  26. }

  27. def myinit
  28.   $v = [[-1, -1,1],[-1, -1,-1], [-1,1,-1], [-1,1,1], [1, -1,1],
  29.       [1, -1,-1], [1, 1,-1], [1,1,1]]

  30.   GL.Light(GL::LIGHT0, GL::DIFFUSE, $light_diffuse)
  31.   GL.Light(GL::LIGHT0, GL::POSITION, $light_position)
  32.   GL.Enable(GL::LIGHT0)
  33.   GL.Enable(GL::LIGHTING)

  34.   GL.Enable(GL::DEPTH_TEST)

  35.   GL.MatrixMode(GL::PROJECTION)
  36.   GLU.Perspective(40.0, 1.0, 1.0,  10.0)
  37.   GL.MatrixMode(GL::MODELVIEW)
  38.   GLU.LookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)

  39.   GL.Translate(0.0, 0.0, -1.0)
  40.   GL.Rotate(60, 1.0, 0.0, 0.0)
  41.   GL.Rotate(-20, 0.0, 0.0, 1.0)
  42. end
  43. GLUT.Init
  44. GLUT.InitDisplayMode(GLUT::DOUBLE | GLUT::RGB | GLUT::DEPTH)
  45. GLUT.CreateWindow("red 3D lighted cube")
  46. GLUT.DisplayFunc(display)
  47. myinit
  48. GLUT.MainLoop()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP