Structure Synthで色相と彩度を変えて描画するには、以下のスクリプトのようにhueとsatを使用します。
10 * { sat 0.8 y 2 } 1 * { hue -10 } 360 * { hue 10 ry 10 x 2 } box
Structure Synthでの出力画像
Sunflowでの出力画像
Saturday, July 25, 2009
JOGLでテクスチャの張られたポリゴンを描画する
JOGLでテクスチャの張られたポリゴンを描画するには、以下のコードを実行します。
出力画像(sample1138a.png)
import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
import com.sun.opengl.util.texture.*;
public class JoglSample30
{
// 出力画像サイズ
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);
try
{
Texture texture = TextureIO.newTexture(
new File("sf.jpg"), true);
texture.enable();
texture.bind();
}
catch(IOException ioex){}
}
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();
// Y軸回転
gl.glRotatef(20.0f, 0.0f, 1.0f, 0.0f);
// テクスチャが張られたポリゴンを描画
gl.glBegin(GL.GL_POLYGON);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-1.5f, -1.5f, 0.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(1.5f, -1.5f, 0.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(1.5f, 1.5f, 0.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-1.5f, 1.5f, 0.0f);
gl.glEnd();
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("sample1188a.png"), width, height, true);
context.release();
context.destroy();
}
}
出力画像(sample1138a.png)
ImageMagickとPHPで画像をタイル配置にして台形変形する
ImageMagickとPHPで画像をタイル配置にして台形変形するには、以下のコードを実行します。
元画像(sf.jpg)
出力画像(sample1138a.png)
<!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>sample1138(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick('sf.jpg');
$iw = $im->getImageWidth();
$ih = $im->getImageHeight();
$im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TILE);
$points = array(
0,0, $iw/8,$ih/8,
$iw,0, $iw*3/4,$ih/4,
$iw,$ih, $iw*3/4, $ih*3/4,
0,$ih, $iw/8,$ih*7/8
);
// PerspectiveDistortion in distort.h
$im->distortImage(4, $points, false);
$im->writeImage('sample1138a.png');
$im->destroy();
?>
<img src="sample1138a.png" /><br />
</body>
</html>
元画像(sf.jpg)
出力画像(sample1138a.png)
Friday, July 24, 2009
JOGLでつぶれた球を描画する
JOGLでつぶれた球を描画するには、以下のコードを実行します。
出力画像(sample1187a.png)
import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
public class JoglSample29
{
// 出力画像サイズ
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(45.0f, 0.0f, 1.0f, 0.0f);
// 球を描画
gl.glScalef(1f,1f,0.5f);
glut.glutSolidSphere(1.5f, 32, 32);
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("sample1187a.png"), width, height, true);
context.release();
context.destroy();
}
}
出力画像(sample1187a.png)
groovyでドット文字列を描画する
groovyでドット文字列を描画するには、以下のコードを実行します。
出力画像(sample1144a.png)
import groovy.swing.j2d.*
def gr = new GraphicsRenderer()
gr.renderToFile("sample1144a.png", 240, 80){
antialias("on")
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 64))
text( x:0, y:0,
text: "Groovy",
fill: color("#4466ff"),
borderColor: no,
){
filters {
mosaic(blockSize: 4)
}
}
}
出力画像(sample1144a.png)
Thursday, July 23, 2009
Structure Synthで町並みを描画する
Structure Synthで町並みを描画するには、以下のスクリプトを実行します。
1 * { x -100 z 100 } 5 * { x 40 color #e0e0e0 } 5 * { z -40 } block
rule block {
{ x -20 z -20 } building
{ x -10 z -20 } building
{ x -0 z -20 } building
{ x -20 z -10 } building
{ x -10 z -10 } building
{ x -0 z -10 } building
{ x -15 z 0 } building1x2
{ x -0 z 0 } building
}
rule block {
{ x -20 z -20 } building
{ x -10 z -20 } building
{ x -0 z -20 } building
{ x -20 z -10 } building
{ x -10 z -10 ry 90 } building
{ x -0 z -10 } building
{ x -20 z 0 } building
{ x -10 z 0 ry 90 } building
{ x -0 z 0 } building
}
rule building {
1 * { x -4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
{ y 10.5 s 7 21 9 } box
1 * { y -3 s 9 1 9 } 8 * { y 3 } box
{ y 22 s 8 1 8 } box
}
rule building {
1 * { x -4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
{ y 10.5 s 7 22 9 } box
1 * { y -2 s 9 1 9 } 12 * { y 2 } box
{ y 23 s 8 2 8 } box
{ y 24 s 6 1 6 } box
{ x 2 z 2 y 25 s 2 2 2 } box
}
rule building {
1 * { y -2 s 9 1 9 } 9 * { y 2 } box
1 * { x -5 z -5 y -1 } 8 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 18 s 7 3 3 } box
}
rule building {
1 * { y -2 s 9 1 9 } 8 * { y 2 } box
1 * { x -5 z -5 y -1 } 7 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 14 s 7 1 7 } 6 * { y 2 } box
1 * { x -4 z -4 y 13 } 6 * { y 2 } 7 * { x 1 } 7 * { z 1 } 1 * { s 0.95 } box
1 * { y 27 s 5 1 5 } box
}
rule building1x2 {
1 * { y -2 z -0.5 s 19 1 8 } 8 * { y 2 } box
1 * { x -10 z -5 y -1 } 7 * { y 2 } 19 * { x 1 } 8 * { z 1 } 1 * { s 0.95 } box
{ s 6 2 1 z 4 y 0.25 } box
}
// 白色の地面
{ y -0.5 s 400 0.1 400 color white } box
Structure Synthでの出力画像(道路から)
Sunflowでの出力画像(道路から)
Structure Synthでの出力画像(高い位置から)
Sunflowでの出力画像(高い位置から)
1 * { x -100 z 100 } 5 * { x 40 color #e0e0e0 } 5 * { z -40 } block
rule block {
{ x -20 z -20 } building
{ x -10 z -20 } building
{ x -0 z -20 } building
{ x -20 z -10 } building
{ x -10 z -10 } building
{ x -0 z -10 } building
{ x -15 z 0 } building1x2
{ x -0 z 0 } building
}
rule block {
{ x -20 z -20 } building
{ x -10 z -20 } building
{ x -0 z -20 } building
{ x -20 z -10 } building
{ x -10 z -10 ry 90 } building
{ x -0 z -10 } building
{ x -20 z 0 } building
{ x -10 z 0 ry 90 } building
{ x -0 z 0 } building
}
rule building {
1 * { x -4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
{ y 10.5 s 7 21 9 } box
1 * { y -3 s 9 1 9 } 8 * { y 3 } box
{ y 22 s 8 1 8 } box
}
rule building {
1 * { x -4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
{ y 10.5 s 7 22 9 } box
1 * { y -2 s 9 1 9 } 12 * { y 2 } box
{ y 23 s 8 2 8 } box
{ y 24 s 6 1 6 } box
{ x 2 z 2 y 25 s 2 2 2 } box
}
rule building {
1 * { y -2 s 9 1 9 } 9 * { y 2 } box
1 * { x -5 z -5 y -1 } 8 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 18 s 7 3 3 } box
}
rule building {
1 * { y -2 s 9 1 9 } 8 * { y 2 } box
1 * { x -5 z -5 y -1 } 7 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 14 s 7 1 7 } 6 * { y 2 } box
1 * { x -4 z -4 y 13 } 6 * { y 2 } 7 * { x 1 } 7 * { z 1 } 1 * { s 0.95 } box
1 * { y 27 s 5 1 5 } box
}
rule building1x2 {
1 * { y -2 z -0.5 s 19 1 8 } 8 * { y 2 } box
1 * { x -10 z -5 y -1 } 7 * { y 2 } 19 * { x 1 } 8 * { z 1 } 1 * { s 0.95 } box
{ s 6 2 1 z 4 y 0.25 } box
}
// 白色の地面
{ y -0.5 s 400 0.1 400 color white } box
Structure Synthでの出力画像(道路から)
Sunflowでの出力画像(道路から)
Structure Synthでの出力画像(高い位置から)
Sunflowでの出力画像(高い位置から)
Structure Synthでビルを描画する - その5
Structure Synthでビルを描画するには、以下のスクリプトを実行します。
{ color #e0e0e0 } building
rule building {
1 * { y -2 z -0.5 s 19 1 8 } 8 * { y 2 } box
1 * { x -10 z -5 y -1 } 7 * { y 2 } 19 * { x 1 } 8 * { z 1 } 1 * { s 0.95 } box
{ s 6 2 1 z 4 y 0.25 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
{ color #e0e0e0 } building
rule building {
1 * { y -2 z -0.5 s 19 1 8 } 8 * { y 2 } box
1 * { x -10 z -5 y -1 } 7 * { y 2 } 19 * { x 1 } 8 * { z 1 } 1 * { s 0.95 } box
{ s 6 2 1 z 4 y 0.25 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
JOGLで立方体の市松模様を描画する
JOGLで立方体の市松模様を描画するには、以下のコードを実行します。
出力画像(sample1186a.png)
import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
public class JoglSample28
{
// 出力画像サイズ
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)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(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(-4.0f, -6.0f, -25.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();
// X軸回転
gl.glRotatef(30.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(35.0f, 0.0f, 1.0f, 0.0f);
float cs = 0.4f;
float gs = 0.5f;
int xs = 20;
int ys = 20;
for(int ly=0;ly<ys;ly++){
for(int lx=0;lx<xs;lx++){
if( (lx+ly)%2 == 0 ){
gl.glColor3f(
(float)0xff/(float)0xff,
(float)0xff/(float)0xff,
(float)0xff/(float)0xff
);
} else {
gl.glColor3f(
(float)0xe0/(float)0xff,
(float)0xb0/(float)0xff,
(float)0x40/(float)0xff
);
}
gl.glTranslatef(gs, 0.0f, 0.0f);
glut.glutSolidCube(cs);
}
gl.glTranslatef(-gs*xs, gs, 0.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("sample1186a.png"), width, height, true);
context.release();
context.destroy();
}
}
出力画像(sample1186a.png)
ImageMagickとPHPでひねりの入ったストライプ画像を作成する
Imagickでひねりの入ったストライプ画像を作成するには、以下のコードを実行します。
出力画像(sample1137a.png)
<!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>sample1137(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 画像サイズ */
$sx=200;
$sy=200;
/* 放射ストライプの中心 */
$cx=100;
$cy=100;
/* ストライプ数 */
$rays=24;
$sr=360/$rays;
/* 背景色 */
$bc="white";
/* ストライプ色 */
$sc="#99bbff";
$im = new Imagick();
$im->newImage($sx, $sy, $bc);
$idraw = new ImagickDraw();
$idraw->setFillColor($sc);
for($lc=0;$lc<$rays;$lc++){
$points[] = array(
'x' => $cx, 'y' => $cy);
$points[] = array(
'x' => $cx+cos(pi()*$sr*$lc/180)*$sx,
'y' => $cy+sin(pi()*$sr*$lc/180)*$sy);
$points[] = array(
'x' => $cx+cos(pi()*($sr*$lc+$sr/2)/180)*$sx,
'y' => $cy+sin(pi()*($sr*$lc+$sr/2)/180)*$sy);
$idraw->polygon($points);
}
$im->drawImage($idraw);
$im->swirlImage(120);
$im->writeImage('sample1137a.png');
$idraw->destroy();
$im->destroy();
?>
<img src="sample1137a.png" /><br />
</body>
</html>
出力画像(sample1137a.png)
Wednesday, July 22, 2009
Structure Synthでビルを描画する - その4
Structure Synthでビルを描画するには、以下のスクリプトを実行します。
{ color #c0c0c0 } building
rule building {
1 * { y -2 s 9 1 9 } 8 * { y 2 } box
1 * { x -5 z -5 y -1 } 7 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 14 s 7 1 7 } 6 * { y 2 } box
1 * { x -4 z -4 y 13 } 6 * { y 2 } 7 * { x 1 } 7 * { z 1 } 1 * { s 0.95 } box
1 * { y 27 s 5 1 5 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
{ color #c0c0c0 } building
rule building {
1 * { y -2 s 9 1 9 } 8 * { y 2 } box
1 * { x -5 z -5 y -1 } 7 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 14 s 7 1 7 } 6 * { y 2 } box
1 * { x -4 z -4 y 13 } 6 * { y 2 } 7 * { x 1 } 7 * { z 1 } 1 * { s 0.95 } box
1 * { y 27 s 5 1 5 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
JOGLで市松模様の面を描画する
JOGLで市松模様の面を描画するには、以下のコードを実行します。
出力画像(sample1185a.png)
import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
public class JoglSample27
{
// 出力画像サイズ
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)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(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(-2.0f, -2.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();
// X軸回転
gl.glRotatef(-70.0f, 1.0f, 0.0f, 0.0f);
float tw = 0.4f;
float th = 0.4f;
int xs = 10;
int ys = 10;
for(int ly=0;ly<ys;ly++){
for(int lx=0;lx<xs;lx++){
if( (lx+ly)%2 == 0 ){
gl.glColor3f(
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff,
(float)0xf0/(float)0xff
);
} else {
gl.glColor3f(
(float)0x40/(float)0xff,
(float)0x40/(float)0xff,
(float)0x40/(float)0xff
);
}
gl.glRectf(lx*tw,ly*th,
(lx+1)*tw,(ly+1)*tw);
}
}
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("sample1185a.png"), width, height, true);
context.release();
context.destroy();
}
}
出力画像(sample1185a.png)
groovyで画像の角を切り落とす
groovyで画像の角を切り落とすには、以下のコードを実行します。
元画像(sf.jpg)
出力画像(sample1143a.png)
import javax.imageio.*;
import groovy.swing.j2d.*
// 角のサイズ
dx = 20
dy = 20
img = ImageIO.read(new File("sf.jpg"))
def gr = new GraphicsRenderer()
gr.renderToFile("sample1143a.png",
img.width, img.height){
antialias("on")
polygon(
points: [dx,0, img.width-dx-1,0,
img.width-1,dy,
img.width-1,img.height-dy-1,
img.width-dx-1, img.height-1,
dx, img.height-1,
0, img.height-dy-1,
0, dy],
borderColor: no
){
texturePaint(x: 0, y: 0, image: img )
}
}
元画像(sf.jpg)
出力画像(sample1143a.png)
Tuesday, July 21, 2009
Structure Synthでビルを描画する - その3
Structure Synthでビルを描画するには、以下のスクリプトを実行します。
{ color #c0c0c0 } building
rule building {
1 * { y -2 s 9 1 9 } 9 * { y 2 } box
1 * { x -5 z -5 y -1 } 8 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 18 s 7 3 3 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
{ color #c0c0c0 } building
rule building {
1 * { y -2 s 9 1 9 } 9 * { y 2 } box
1 * { x -5 z -5 y -1 } 8 * { y 2 } 9 * { x 1 } 9 * { z 1 } 1 * { s 0.95 } box
1 * { y 18 s 7 3 3 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
JOGLでビットマップ文字列を描画する
JOGLでビットマップ文字列を描画するには、以下のコードを実行します。
出力画像(sample1184a.png)
import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
public class JoglSample26
{
// 出力画像サイズ
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)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(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.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glPushMatrix();
// ビットマップ文字の描画
gl.glRasterPos2f(-1f, 0.0f);
glut.glutBitmapCharacter(GLUT.BITMAP_8_BY_13, 'A');
glut.glutBitmapCharacter(GLUT.BITMAP_9_BY_15, 'B');
glut.glutBitmapCharacter(GLUT.BITMAP_HELVETICA_10, 'C');
glut.glutBitmapCharacter(GLUT.BITMAP_HELVETICA_12, 'D');
glut.glutBitmapCharacter(GLUT.BITMAP_HELVETICA_18, 'E');
glut.glutBitmapCharacter(GLUT.BITMAP_TIMES_ROMAN_10, 'F');
glut.glutBitmapCharacter(GLUT.BITMAP_TIMES_ROMAN_24, 'G');
// ビットマップ文字列の描画
glut.glutBitmapString(GLUT.BITMAP_TIMES_ROMAN_24, "123");
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("sample1184a.png"), width, height, true);
context.release();
context.destroy();
}
}
出力画像(sample1184a.png)
ImageMagickとPHPで画像を影絵スケッチ風に変換する
Imagickで画像を影絵スケッチ風に変換するには、以下のコードを実行します。
元画像(tree1.jpg)
出力画像(sample1136a.png)
<!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>sample1136(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 画像サイズ */
$sx = 200;
$sy = 50;
$im = new Imagick("tree1.jpg");
$im->blackThresholdImage('#808080');
$im->whiteThresholdImage('#808080');
$im->negateImage(true);
$im->setImageMatte(true);
$im = $im->fxImage("r", Imagick::CHANNEL_ALPHA);
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(),
$im->getImageHeight(), "#303030");
$im2->sketchImage(8,0,135);
$im->compositeImage($im2, Imagick::COMPOSITE_IN,
0, 0, Imagick::CHANNEL_ALL);
$im->writeImage('sample1136a.png');
$im->destroy();
?>
<img src="sample1136a.png" /><br />
</body>
</html>
元画像(tree1.jpg)
出力画像(sample1136a.png)
Monday, July 20, 2009
Structure Synthでビルを描画する - その2
Structure Synthでビルを描画するには、以下のスクリプトを実行します。
{ color #c0c0c0 } building
rule building {
1 * { x -4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
{ y 10.5 s 7 22 9 } box
1 * { y -2 s 9 1 9 } 12 * { y 2 } box
{ y 23 s 8 2 8 } box
{ y 24 s 6 1 6 } box
{ x 2 z 2 y 25 s 2 2 2 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
{ color #c0c0c0 } building
rule building {
1 * { x -4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 11 s 1 22 1 } 5 * { z 2 } box
{ y 10.5 s 7 22 9 } box
1 * { y -2 s 9 1 9 } 12 * { y 2 } box
{ y 23 s 8 2 8 } box
{ y 24 s 6 1 6 } box
{ x 2 z 2 y 25 s 2 2 2 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
RMagickで画像を青く滲ませる
groovyで画像を8色グレースケール画像に変換する
groovyで画像を8色グレースケール画像に変換するには、以下のコードを実行します。
元画像(sf.jpg)
出力画像(sample1142a.png)
import groovy.swing.j2d.*
def gr = new GraphicsRenderer()
gr.renderToFile("sample1142a.png", 200, 200){
antialias("on")
rect( x: 0, y: 0, width: 200, height: 200,
borderColor: no){
texturePaint(x: 0, y: 0, file: 'sf.jpg' )
filters {
grayscale()
// numColorsは8から256
// see com.jhlabs.image.QuantizeFilter.
quantize(numColors: 8)
}
}
}
元画像(sf.jpg)
出力画像(sample1142a.png)
Sunday, July 19, 2009
Structure Synthでビルを描画する - その1
Structure Synthでビルを描画するには、以下のスクリプトを実行します。
{ color #c0c0c0 } building
rule building {
1 * { x -4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
{ y 10.5 s 7 21 9 } box
1 * { y -3 s 9 1 9 } 8 * { y 3 } box
{ y 22 s 8 1 8 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
{ color #c0c0c0 } building
rule building {
1 * { x -4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
1 * { x 4 z -6 y 10.5 s 1 21 1 } 5 * { z 2 } box
{ y 10.5 s 7 21 9 } box
1 * { y -3 s 9 1 9 } 8 * { y 3 } box
{ y 22 s 8 1 8 } box
}
// 白色の地面
{ y -0.5 s 200 0.1 200 color white } box
Structure Synthでの出力画像
Sunflowでの出力画像
関連項目
Structure Synthで町並みを描画する
JOGLで2つのワイヤーフレームの立方体を重ね書きする
JOGLで2つのワイヤーフレームの立方体を重ね書きするには、以下のコードを実行します。
出力画像(sample1183a.png)
動作環境
JDK6 Upadate13, JOGL 1.1.1
import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
public class JoglSample25
{
// 出力画像サイズ
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)0x40/(float)0xff,
(float)0x40/(float)0xff,
(float)0x40/(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.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(35.0f, 0.0f, 1.0f, 0.0f);
// 1つ目の立方体
gl.glColor3f(0.3f,0.5f,1.0f);
gl.glLineWidth(6f);
glut.glutWireCube(2.0f);
// 2つ目の立方体
gl.glColor3f(1f,1f,1f);
gl.glLineWidth(2f);
glut.glutWireCube(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("sample1183a.png"), width, height, true);
context.release();
context.destroy();
}
}
出力画像(sample1183a.png)
動作環境
JDK6 Upadate13, JOGL 1.1.1
ImageMagickとPHPで画像の上に点線グリッドを描画する
Imagickで画像の上に点線グリッドを描画するには、以下のコードを実行します。
元画像(sf.jpg)
出力画像(sample1135a.png)
<!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>sample1135(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* グリッドサイズ */
$xs = 20;
$ys = 20;
$im = new Imagick("sf.jpg");
$iw = $im->getImageWidth();
$ih = $im->getImageWidth();
$idraw = new ImagickDraw();
/* 線の色 */
$idraw->setStrokeColor('#ffffff');
/* 塗りつぶし色 */
$idraw->setFillColor('none');
/* 点線のスタイル */
$idraw->setStrokeDashArray(array(2,2));
for($ly=0;$ly<$ih;$ly+=$ys){
$idraw->line(0,$ly, $iw,$ly);
}
for($lx=0;$lx<$iw;$lx+=$xs){
$idraw->line($lx,0, $lx,$ih);
}
$im->drawImage($idraw);
$im->writeImage('sample1135a.png');
$im->destroy();
?>
<img src="sample1135a.png" /><br />
</body>
</html>
元画像(sf.jpg)
出力画像(sample1135a.png)