Monday, July 13, 2009

Structure Synthでレンガパターンを描画する

Structure Synthでレンガパターンを描画するには、以下のスクリプトを実行します。

// レンガパターンをy軸に5回、x軸に10回繰り返す
5 * { y 2 } 10 * { x 4 color #e0e0e0 } brick
// レンガパターン
rule brick {
{ x 0.975 y 1.5 s 1.95 0.95 1 } box
{ x 2.975 y 1.5 s 1.95 0.95 1 } box
{ x 0.5 y 0.5 s 1 0.95 1 } box
{ x 2 y 0.5 s 1.95 0.95 1 } box
{ x 3.5 y 0.5 s 1 0.95 1 } box
}

// 白色の地面
{ y 0 s 200 0.1 200 color white } box

Structure Synthで出力した画像


Sunflowで出力した画像

JOGLで12面体を描画する

JOGLで12面体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample19
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -12.0f);

gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(gl.GL_COLOR_MATERIAL);
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_CULL_FACE);
gl.glClear(GL.GL_COLOR_BUFFER_BIT |GL.GL_DEPTH_BUFFER_BIT );

gl.glPushMatrix();
// 面の色を設定
gl.glColor3f(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff
);
// X軸回転
gl.glRotatef(30.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(20.0f, 0.0f, 1.0f, 0.0f);
// 12面体を描画
glut.glutSolidDodecahedron();
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1177a.png"), width, height, true);
context.release();
context.destroy();
}
}


JOGLで描画した12面体

動作環境
JDK6 Upadate13, JOGL 1.1.1

ImageMagickとPHPで背景がぼやける半透明グラデーションを描画する

Imagickで背景がぼやける半透明グラデーションを描画するには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1132(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$hpad = 20;
$im = new Imagick("sf.jpg");
$iw = $im->getImageWidth();
$ih = $im->getImageWidth();
$im2 = $im->clone();
$im2->cropImage($iw-$hpad*2, $ih, $hpad, 0);
$im2->blurImage(0, 5);
$im3 = new Imagick();
$im3->newPseudoImage($iw-$hpad*2, $ih,
"gradient:#00000010-#00000070");
$im2->compositeImage($im3, Imagick::COMPOSITE_OVER,
0, 0, Imagick::CHANNEL_ALL);

$im->compositeImage($im2, Imagick::COMPOSITE_OVER,
$hpad, 0, Imagick::CHANNEL_ALL);
$im->writeImage('sample1132a.png');

$im->destroy();
?>
<img src="sample1132a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample1132a.png)
Imagickで背景がぼやける半透明グラデーションを描画した画像

Sunday, July 12, 2009

Structure Synthで棚を描画する

Structure Synthで棚を描画するには、以下のスクリプトを実行します。

// 水平方向の板
1 * { y -1 } 11 * { y 1 } 1 * { s 10 0.1 1 color #d0d0d0 } box
// 垂直方向の板
1 * { x -6 y 5 } 11 * { x 1 } 1 * { s 0.1 10 1 color #d0d0d0 } box

// 白色の地面
{ y 0 s 200 0.1 200 color white } box

Structure Synthでの出力画像


Sunflowでの出力画像

JOGLで円柱を描画する

JOGLで円柱を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample18
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, -1.0f, -15.0f);

gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(gl.GL_COLOR_MATERIAL);
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_CULL_FACE);
gl.glClear(GL.GL_COLOR_BUFFER_BIT |GL.GL_DEPTH_BUFFER_BIT );

gl.glPushMatrix();
// 面の色を設定
gl.glColor3f(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff
);
// X軸回転
gl.glRotatef(-60.0f, 1.0f, 0.0f, 0.0f);
// 円柱を描画
glut.glutSolidCylinder(2.0f, 2.5f, 16, 4);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1176a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1176a.png)
JOGLで描画した円柱

動作環境
JDK6 Upadate13, JOGL 1.1.1

SWFRendererで画像の上に文字列を描画する

SWFRendererで画像の上に文字列を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1058a.swf", 200, 200){
image(file: "sf.jpg")
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 26))
text( x:10, y:100,
text: "San Francisco",
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1058a.swf)
SWFRendererで文字列を描画した画像

動作環境
groovy 1.6.0, JDK6 update12

Saturday, July 11, 2009

Structure Synthでストーンヘンジ風の画像を描画する

Structure Synthでストーンヘンジ風の画像を描画するには、以下のスクリプトを実行します。

// 5つのゲートを72度ずつy軸回転させる
5 * { ry 72 } 1 * { x 6 } gate
// ゲートのルール
rule gate {
{ z -2 y 2 s 1 4 1 color #d0d0d0 } box
{ z 2 y 2 s 1 4 1 color #d0d0d0 } box
{ y 4 s 1 1 6 color #d0d0d0 } box
}

// 白色の地面
{ y 0 s 200 0.1 200 color white } box


Structure Synthでの出力画像


Sunflowでの出力画像


関連項目
Structure SynthとSunflowのインストールと連携

ImageMagickとPHPでピントがぼけたようなセピア調の画像に変換する

Imagickでピントがぼけたようなセピア調の画像に変換するには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1155(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick("sf2.jpg");
$im->evaluateImage(imagick::EVALUATE_MULTIPLY, 0.5);
$im->modulateImage(130, 20, 100);
$im->medianFilterImage(2);
$im->sepiaToneImage(80);
$im->writeImage('sample1155a.png');

$im->destroy();
?>
<img src="sample1155a.png" /><br />

</body>
</html>


元画像(sf2.jpg)


出力画像(sample1155a.png)
Imagickでピントがぼけたようなセピア調に変換した画像

SWFRendererでサイの形を描画する

SWFRendererでサイの形を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1057a.swf", 200, 200){
rhinoShape( x:0, y:10, width:200, height:180,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1057a.swf)
SWFRendererで描画したサイの形

動作環境
groovy 1.6.0, JDK6 update12

Friday, July 10, 2009

Structure Synthで市松模様の台座を描画する

Structure Synthで市松模様の台座を描画するには、以下のスクリプトを実行します。

// 市松模様のルールを5*5回繰り返し
5 * { z 2 } 5 * { x 2 } checker
// 市松模様のルール
rule checker {
{ color white } box
{ x 1 color black } box
{ z 1 color black } box
{ x 1 z 1 color white } box
}
// 水色の地面
{ y -1 s 200 0.1 200 color #bbddff } box

Structure Synthで出力した画像


Sunflowで出力した画像

RMagickで画像をビデオ風に変換する

RMagickで画像をビデオ風に変換するには、以下のコードを実行します。


require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
images.rows.times { |py|
line = images.get_pixels(0, py, images.columns, 1)
line.size().times { |px|
if (py % 2) == 0 then
line[px].red = line[px].red/2;
line[px].green = line[px].green/2;
line[px].blue = line[px].blue/2;
end
}
images.store_pixels(0, py, images.columns, 1, line)
}
images.write("sample1149a.png")
exit


元画像(sf.jpg)


出力画像(sample1149a.png)


動作環境
ruby1.8.6, rmagick2.9.0

SWFRendererで正多角形を描画する

SWFRendererで正多角形を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1056a.swf", 200, 200){
regularPolygon( cx:100, cy:100, radius:80, sides:5,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1056a.swf)
SWFRendererで描画した正多角形

動作環境
groovy 1.6.0, JDK6 update12

Thursday, July 09, 2009

Structure Synthでリングを描画する

Structure Synthでリングを描画するには、以下のスクリプトを実行します。

// 1440回0.25度ごと回転させて、半径5で球を描画
1440 * { ry 0.25 } 1 * { x 5 color #7799ff } sphere
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

Structure Synthでの出力画像


Sunflowでの出力画像

JOGLで円錐を描画する

JOGLで円錐を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample17
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, -1.0f, -15.0f);

gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(gl.GL_COLOR_MATERIAL);
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_CULL_FACE);
gl.glClear(GL.GL_COLOR_BUFFER_BIT |GL.GL_DEPTH_BUFFER_BIT );

gl.glPushMatrix();
// 面の色を設定
gl.glColor3f(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff
);
// X軸回転
gl.glRotatef(-70.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(10.0f, 0.0f, 1.0f, 0.0f);
// 円錐を描画
glut.glutSolidCone(2.0f, 3.5f, 16, 4);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1175a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1175a.png)
JOGLで描画した円錐

動作環境
JDK6 Upadate13, JOGL 1.1.1

SWFRendererで車の形を描画する

SWFRendererで車の形を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1055a.swf", 200, 200){
raceCarShape( x:0, y:40, width:200, height:120,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1055a.swf)


動作環境
groovy 1.6.0, JDK6 update12

Wednesday, July 08, 2009

Structure Synthでギアが重なった画像を生成する

Structure Synthでギアが重なった画像を生成するには、以下のスクリプトを実行します。

// 20回y軸5度ずつ回転させてy軸方向に1.5移動を繰り返して以下を実行
// 18回20度ごと回転させて、半径5で立方体を描画
20 * { ry 5 y 1.2 } 18 * { ry 20 } 1 * { x 5 color #7799ff } box
// 20回y軸5度ずつ回転させてy軸方向に1.5移動を繰り返して以下を実行
// 360回1度ごと回転させて、半径4で立方体を描画
20 * { ry 5 y 1.2 } 360 * { ry 1 } 1 * { x 4 color #7799ff } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box


Structure Synthで出力した画像


Sunflowで出力した画像

ImageMagickとPHPで画像を青く滲ませる

Imagickで画像を青く滲ませるには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1154(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick("sf2.jpg");
$im->modulateImage(100, 50, 100);
$im->spreadImage(3);
$im->motionBlurImage(0,7,270);
$im->tintImage(new ImagickPixel("#bbddff"),new ImagickPixel("#f0f0f0"));
$im->writeImage('sample1154a.png');

$im->destroy();
?>
<img src="sample1154a.png" /><br />

</body>
</html>


元画像(sf2.jpg)


出力画像(sample1154a.png)

SWFRendererで二次曲線を描画する

SWFRendererで二次曲線を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1054a.swf", 200, 200){
quadCurve( x1:200, y1:0, ctrlx:0, ctrly: 100,
x2:200, y2:200,
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1054a.swf)


動作環境
groovy 1.6.0, JDK6 update12

Tuesday, July 07, 2009

Structure Synthでギアを描画する

Structure Synthでギアを描画するには、以下のスクリプトを実行します。

// 18回20度ごと回転させて、半径5で立方体を描画
18 * { ry 20 } 1 * { x 5 color #7799ff } box
// 360回1度ごと回転させて、半径4で立方体を描画
360 * { ry 1 } 1 * { x 4 color #7799ff } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

Structure Synthでの出力画像
Structure Synthで描画したギア

Sunflowでの出力画像


関連項目
Structure Synthで円形に配置された立方体を描画する
Structure SynthとSunflowのインストールと連携

JOGLで立方体を描画する

JOGLで立方体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample16
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(gl.GL_COLOR_MATERIAL);
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_CULL_FACE);
gl.glClear(GL.GL_COLOR_BUFFER_BIT |GL.GL_DEPTH_BUFFER_BIT );

gl.glPushMatrix();
// 面の色を設定
gl.glColor3f(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff
);
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(25.0f, 0.0f, 1.0f, 0.0f);
// 立方体を描画
glut.glutSolidCube(2.0f);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1174a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1174a.png)
JOGLで描画した立方体

動作環境
JDK6 Upadate13, JOGL 1.1.1

SWFRendererでアイスクリーム形を描画する

SWFRendererでアイスクリーム形を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1053a.swf", 200, 200){
iceCreamShape( x:0, y:40, width: 200, height:120,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1053a.swf)
SWFRendererで描画したアイスクリーム形

動作環境
groovy 1.6.0, JDK6 update12