忍者ブログ
凡人の日々の経過を記録
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



世の中の流れからすると遅すぎかもしれないが、今までローカルアプリばっかり興味を持っていたのだが、最近になってWebアプリに興味を惹かれ始めた。

まだ勉強中につき話せるネタがないが、今後継続して勉強できるようならこの日記にメモしていくことにする。

拍手[0回]

PR


どこぞのページにRuby+QtだとOpenGLが簡単にできると書いてあったので、試してみた。


--------------------
#!/usr/bin/env ruby

require 'Qt4'
require 'opengl'

class MyGLWidget < Qt::GLWidget
@@light_position = [0.25, 1.0, 0.25, 0.0]
@@light_deffuse = [1.0, 1.0, 1.0]
@@light_ambient = [0.25, 0.25, 0.25]
@@light_specular = [1.0, 1.0, 1.0]

@@diffuse = [1.0, 0.0, 0.0] # R,G,B
@@ambient = [0.25, 0.25, 0.25]
@@specular = [1.0, 1.0, 1.0]
@@shininess = [32.0]

@@vertices = [
-0.5, -0.5, -0.5,
-0.5, -0.5, +0.5,
+0.5, -0.5, +0.5,
+0.5, -0.5, -0.5,
-0.5, +0.5, -0.5,
-0.5, +0.5, +0.5,
+0.5, +0.5, +0.5,
+0.5, +0.5, -0.5,
-0.5, -0.5, -0.5,
-0.5, +0.5, -0.5,
+0.5, +0.5, -0.5,
+0.5, -0.5, -0.5,
-0.5, -0.5, +0.5,
-0.5, +0.5, +0.5,
+0.5, +0.5, +0.5,
+0.5, -0.5, +0.5,
-0.5, -0.5, -0.5,
-0.5, -0.5, +0.5,
-0.5, +0.5, +0.5,
-0.5, +0.5, -0.5,
+0.5, -0.5, -0.5,
+0.5, -0.5, +0.5,
+0.5, +0.5, +0.5,
+0.5, +0.5, -0.5
].pack("f*")
@@normals = [
+0.0f, -1.0f, +0.0f,
+0.0f, -1.0f, +0.0f,
+0.0f, -1.0f, +0.0f,
+0.0f, -1.0f, +0.0f,
+0.0f, +1.0f, +0.0f,
+0.0f, +1.0f, +0.0f,
+0.0f, +1.0f, +0.0f,
+0.0f, +1.0f, +0.0f,
+0.0f, +0.0f, -1.0f,
+0.0f, +0.0f, -1.0f,
+0.0f, +0.0f, -1.0f,
+0.0f, +0.0f, -1.0f,
+0.0f, +0.0f, +1.0f,
+0.0f, +0.0f, +1.0f,
+0.0f, +0.0f, +1.0f,
+0.0f, +0.0f, +1.0f,
-1.0f, +0.0f, +0.0f,
-1.0f, +0.0f, +0.0f,
-1.0f, +0.0f, +0.0f,
-1.0f, +0.0f, +0.0f,
+1.0f, +0.0f, +0.0f,
+1.0f, +0.0f, +0.0f,
+1.0f, +0.0f, +0.0f,
+1.0f, +0.0f, +0.0f

].pack("f*")
@@normals = [
+0.0, -1.0, +0.0,
+0.0, -1.0, +0.0,
+0.0, -1.0, +0.0,
+0.0, -1.0, +0.0,
+0.0, +1.0, +0.0,
+0.0, +1.0, +0.0,
+0.0, +1.0, +0.0,
+0.0, +1.0, +0.0,
+0.0, +0.0, -1.0,
+0.0, +0.0, -1.0,
+0.0, +0.0, -1.0,
+0.0, +0.0, -1.0,
+0.0, +0.0, +1.0,
+0.0, +0.0, +1.0,
+0.0, +0.0, +1.0,
+0.0, +0.0, +1.0,
-1.0, +0.0, +0.0,
-1.0, +0.0, +0.0,
-1.0, +0.0, +0.0,
-1.0, +0.0, +0.0,
+1.0, +0.0, +0.0,
+1.0, +0.0, +0.0,
+1.0, +0.0, +0.0,
+1.0, +0.0, +0.0
].pack("f*")
@@indices = [
0, 2, 1,
0, 3, 2,
4, 5, 6,
4, 6, 7,
8, 9, 10,
8, 10, 11,
12, 15, 14,
12, 14, 13,
16, 17, 18,
16, 18, 19,
20, 23, 22,
20, 22, 21
].pack("i*")
def initialize
super
end

def initializeGL
@vbuf = GL.GenBuffers 2
@ibuf = GL.GenBuffers 1
GL.BindBuffer GL_ARRAY_BUFFER, @vbuf[0]
GL.BufferData GL_ARRAY_BUFFER, @@vertices.length, @@vertices, GL_STATIC_DRAW
GL.BindBuffer GL_ARRAY_BUFFER, @vbuf[1]
GL.BufferData GL_ARRAY_BUFFER, @@normals.length, @@normals, GL_STATIC_DRAW
GL.BindBuffer GL_ELEMENT_ARRAY_BUFFER, @ibuf[0]
GL.BufferData GL_ELEMENT_ARRAY_BUFFER, @@indices.length, @@indices, GL_STATIC_DRAW

GL.BindBuffer GL_ARRAY_BUFFER, 0
GL.BindBuffer GL_ELEMENT_ARRAY_BUFFER, 0

GL.Enable GL::GL_DEPTH_TEST
GL.Enable GL::GL_NORMALIZE
GL.Enable GL::GL_CULL_FACE

GL.Enable GL::GL_LIGHTING
GL.Enable GL::GL_LIGHT0

GL.ClearColor 0.0, 0.0, 0.0, 1.0
GL.ClearDepth 1.0
end

def resizeGL width, height
GL.Viewport 0, 0, width, height
GL.MatrixMode GL_PROJECTION
GL.LoadIdentity
GLU.Perspective 45.0, width.to_f/height.to_f, 1, 100
end

def paintGL
GL.Clear GL::COLOR_BUFFER_BIT | GL::GL_DEPTH_BUFFER_BIT

GL.Lightfv GL::GL_LIGHT0, GL::GL_POSITION, @@light_position
GL.Lightfv GL::GL_LIGHT0, GL::GL_DIFFUSE, @@light_deffuse
GL.Lightfv GL::GL_LIGHT0, GL::GL_AMBIENT, @@light_ambient
GL.Lightfv GL::GL_LIGHT0, GL::GL_SPECULAR, @@light_specular

GL.Materialfv GL::FRONT, GL::GL_DIFFUSE, @@diffuse
GL.Materialfv GL::FRONT, GL::GL_AMBIENT, @@ambient
GL.Materialfv GL::FRONT, GL::GL_SPECULAR, @@specular
GL.Materialfv GL::FRONT, GL::GL_SHININESS, @@shininess

GL.MatrixMode GL_MODELVIEW
GL.LoadIdentity
GLU.LookAt 3, 4, 5, # from
0, 0, 0, # to
0, 1, 0 # up

GL.BindBuffer GL_ELEMENT_ARRAY_BUFFER, @ibuf[0]

GL.BindBuffer GL_ARRAY_BUFFER, @vbuf[0]
GL.VertexPointer 3, GL_FLOAT, 0, 0

GL.BindBuffer GL_ARRAY_BUFFER, @vbuf[1]
GL.NormalPointer GL_FLOAT, 0, 0

GL.EnableClientState GL_VERTEX_ARRAY
GL.EnableClientState GL_NORMAL_ARRAY

GL.DrawElements GL_TRIANGLES, @@indices.size/3, GL_UNSIGNED_INT, 0

GL.DisableClientState GL_VERTEX_ARRAY
GL.DisableClientState GL_NORMAL_ARRAY

end

end

app = Qt::Application.new(ARGV)
widget = MyGLWidget.new
widget.show
app.exec
-----------------------



拍手[0回]



RubyのGraphライブラリを見つけた。
さっそく使ってみた。

<インストール>
% sudo gem install rgl

% gem env
  ・・・
- INSTALLATION DIRECTORY: /var/lib/gems/1.8
  ・・・
% cd /var/lib/gems/1.8/gems/grb-xxx
% sudo ruby install.rb

あと、dotファイルを画像に変換するためにgraphvizもいれておく
% sudo apt-get install graphviz

<サンプル>

#!/usr/bin/env ruby

require 'rgl/adjacency'
require 'rgl/dot'

dg=RGL::DirectedAdjacencyGraph[1,2, 2,3, 2,4, 4,5, 6,4, 1,6]

dg.write_to_graphic_file('jpg')





補足
dg.write_to_graphic_file('svg')
とすることで、SVG(XML)画像を作成することも可能。


拍手[1回]



ruby 1.8に標準で含まれるWEBrickを使ってみます。

・httpserver.rb

#!/usr/bin/env ruby

require 'webrick'
include WEBrick

s = HTTPServer.new(
:Port => 8000,
:DocumentRoot => File.join(Dir::pwd,"public_html")
)

trap("INT") { s.shutdown}
s.start



アクセスには、「http://localhost:8000」で。

拍手[0回]



今日は、GLSLのジオメトリシェーダで影行列の計算を実装して、動作させることができた。
正しい正しくないはともかく、自分としてはかなりクリエイティブな気分になった。

やっぱりプログラミングをしていて一番楽しいのは、このクリエイティブな気分を味わえたときだと思う。
そうでないと、部屋に閉じこもってずぅっとパソコンが面を見つめているだけなら憂鬱になってしまう。

また明日から仕事、がんばろう。

拍手[1回]




Powered by 忍者ブログ  Design by © まめの
Copyright © [ ずくのない凡人の日記 ] All Rights Reserved.
http://bambooflow.blog.shinobi.jp/