このような 回転や平行移動による座標変換の情報は ModelView 行列 が持っている ModelView 行列は gl.glpushmatrix() でいったん保存しておき 回転や平行移動を重ねて描画した後 gl.glpopmatrix() で保存した状態に戻すことができる ワールド座標系とウィ

Size: px
Start display at page:

Download "このような 回転や平行移動による座標変換の情報は ModelView 行列 が持っている ModelView 行列は gl.glpushmatrix() でいったん保存しておき 回転や平行移動を重ねて描画した後 gl.glpopmatrix() で保存した状態に戻すことができる ワールド座標系とウィ"

Transcription

1 3D 描画 Step3 元素名を 2D 描画する OpenGL には文字描画の概念がないこと 元素名は回転してほしくないことの 2 点の理由から 元素名は 2D 描画する そのために 原子の 3 次元空間の座標から 文字を描画するウィンドウ上の座標を求める < 座標変換について > 座標変換について まとまった詳しい解説は OpenGL による 3D 描画の基礎知識 の 3 ページ以降に記述してあるので 参照のこと y 軸 z 軸 θ x 軸 ワールド座標系の軸 オブジェクト座標系とワールド座標系 O 原子も H 原子も描画するときは glut.glutsolidsphere(0.2f, div, div); (*) と記述する 引数は順に半径 Z 軸まわりの分割数 Z 軸に沿った分割数で 球の中心座標を設定する引数はない これは 常にこの関数が球の中心を原点として描画するからである この場合の座標系が オブジェクト座標系 となる しかし 図のように実際にワールド座標系で考えれば O 原子の中心座標は (0, 0.4, 0) だし 右側の H 原子は (cosθ, 0.4-sinθ, 0) [ θ=( )/2] である このような位置に描画するためには 描画したい球の中心が原点になるよう事前に gltranslatef や glrotatef で座標変換しておく 例えば O 原子の場合 gl.gltranslatef(0.0f, 0.4f, 0.0f); // y 軸正方向に 0.4 平行移動 θに相当するを実行した後で (*) の球の描画命令を書けばよい また 右側の H 原子は上記の 0.4 の平行移動が利いた状態でさらに以下を実行する gl.glrotatef(-degree, 0.0f, 0.0f, 1.0f); // 座標軸を z 軸周りに-degree 度回転 gl.gltranslatef(1.0f, 0.0f, 0.0f); // x 軸正方向に 1 だけ平行移動 -1-

2 このような 回転や平行移動による座標変換の情報は ModelView 行列 が持っている ModelView 行列は gl.glpushmatrix() でいったん保存しておき 回転や平行移動を重ねて描画した後 gl.glpopmatrix() で保存した状態に戻すことができる ワールド座標系とウィンドウ座標系 3 次元空間であるワールド座標から 2 次元の表示領域に対する座標をもとめるには Projectioin 行列 を使う この行列は 3D からどのように 2D に投影するかを決めるものである また パネルに対する表示領域を ビューポート といい 4 次元の配列で表現する ビューポート =[ 左下の点の x 座標, y 座標, 幅, 高さ ] オブジェクト座標系からウィンドウ座標系への変換 OpenGL には便利な関数があって glu.gluproject(objx, objy, objz, modelmatrix, 0, projmatrix, 0, viewport, 0, winpos, 0); objx, objy, objz:3d 空間の x 座標 y 座標 z 座標 ( オブジェクト座標系 ) modelmatrix:modelview 行列 projmatrix:projection 行列 viewport: ビューポートを呼び出すと winpos(double の配列 ) にビューポートの左下を原点とする 右 上が正方向の 2 次元ピクセルの単位での座標がはいる つまりオブジェクト座標系からウィンドウ座標系に変換してくれる しかし 描画するにはパネルの左上を原点とした 下向きが正の座標でなければならないので 今回は上記の関数で求めた座標をさらに変換する 下記のソースコードはこの変換部分が空欄になっているので 下図を参考に考えて埋めなさい 描画で必要な座標の原点 viewport[2] viewport[0] ビューポート getheight() viewport[3] glu.gluproject で求まる座標の原点 viewport[1] < 作成手順 > 1. を編集する 2. 実行して元素名 O,H が正常に描画されることを確認する -2-

3 package chemical.water; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.point; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener; import javax.media.opengl.gl; import javax.media.opengl.glautodrawable; import javax.media.opengl.gleventlistener; import javax.media.opengl.gljpanel; import javax.media.opengl.glu.glu; import com.sun.opengl.util.glut; public class WaterPanel extends GLJPanel implements GLEventListener, MouseListener, MouseMotionListener { private GL gl; // OpenGL の関数群をもつオブジェクトその1 private GLU glu; // OpenGL の関数群をもつオブジェクトその2 private GLUT glut; // OpenGL の関数群をもつオブジェクトその3 private int div = 20; // 球 円柱の分割数 // 軸と O-H のなす角 ( 水の O-H がなす角は 度 ) private float degree = ( f)/2.0f; private float rotx = 0.0f, roty = 0.0f; // 回転量 private float srotx, sroty; // ドラッグ開始時の回転量 private Point startpoint, endpoint; // ドラッグの開始点と終了点 private boolean defaultflg = true; // true だったら回転量を 0 にする private double[] model = new double[16]; // ModelView 行列 private double[] proj = new double[16]; // Projection 行列 private int[] view = new int[4]; // ビューポート private double[] pointo = new double[3]; // O 原子のウィンドウ座標 private double[] pointh1 = new double[3]; // H 原子 1 のウィンドウ座標 private double[] pointh2 = new double[3]; // H 原子 2 のウィンドウ座標 /* 光 // 光の位置 {x 座標, y 座標, z 座標, 光源までの距離 (0 は無限円 ) private float[] lposition = { -10.0f, 10.0f, 10.0f, 0.0f ; // 光の色 {R, G, B, アルファ ( 透明度 ) 数値は 0 から 1 まで private float[] lspecular = { 0.8f, 0.8f, 0.8f, 1.0f ; // 鏡面 private float[] ldiffuse = { 0.8f, 0.8f, 0.8f, 1.0f ; // 拡散 private float[] lambient = { 0.4f, 0.4f, 0.4f, 1.0f ; // 環境 /* 物体の反射率 // {R, G, B, アルファ ( 透明度 ) 数値は 0 から 1 まで private float[] mspecular = { 0.3f, 0.3f, 0.3f, 1.0f ; // 鏡面 private float[] mdiffuse = { 0.2f, 0.2f, 0.2f, 1.0f ; // 拡散 // 鏡面係数 : きらめきの度合い (0~128) private float mshininess = 10.0f; /* 色の定義 // {R, G, B, アルファ ( 透明度 ) 数値は 0 から 1 まで private float[] blue = { 0.0f, 0.0f, 1.0f, 1.0f ; // 青 private float[] red = { 1.0f, 0.0f, 0.0f, 1.0f ; // 赤 private float[] green = {0.0f, 1.0f, 0.5f, 1.0f ; // 緑 * コンストラクタ -3-

4 public WaterPanel () { // MouseEvent を受け取れるようにする addmouselistener(this); // MouseMotionEvent を受け取れるようにする addmousemotionlistener(this); // 3D 描画できるようにリスナ登録 addgleventlistener(this); /* 2D 描画 *********************************************************** public void paintcomponent(graphics g) { // 親クラスの paintcomponent 呼び出し super.paintcomponent(g); // フォント設定 Dialog は Windows では MS ゴシック g.setfont(new Font("Dialog", Font.BOLD, 24)); // 白色設定 g.setcolor(color.white); // 文字位置の微調整用 int tune = 8; // 元素名を描画 g.drawstring("o", (int)pointo[0]-tune, (int)pointo[1]+tune); g.drawstring("h", (int)pointh1[0]-tune, (int)pointh1[1]+tune); g.drawstring("h", (int)pointh2[0]-tune, (int)pointh2[1]+tune); /* 3D 描画 *********************************************************** * x 軸周りに円柱を描画 r 円柱の半径 length 円柱の長さ offset offset x offset+length に描かれる public void drawcylinder(float r, float length, float offset) { double t; // 要素として連続する四角形を使う gl.glbegin(gl.gl_quad_strip); for (int i=0; i<=div; i++) { // 角度を計算 ( ラジアン ) t = 2.0 * Math.PI * i / div; // 光の反射の法線ベクトル gl.glnormal3f(0, (float)math.cos(t), (float)math.sin(t)); // 頂点を設定 gl.glvertex3f(offset, (float)(r*math.cos(t)), (float)(r*math.sin(t))); gl.glvertex3f(offset+length, (float)(r*math.cos(t)), (float)(r*math.sin(t))); gl.glend(); * オブジェクト座標から ウィンドウ座標を求める public boolean gluproject(double objx, double objy, double objz, double[] modelmatrix, double[] projmatrix, int[] viewport, double[] winpos ) { /* gluproject:3d 空間のx 座標,y 座標,z 座標,ModelView 行列,Projection 行列, ビューポートを使って * ウィンドウ座標を求める * ただし ビューポート ( 描画領域 ) の左下が原点 y 座標上向き -4-

5 boolean bl = glu.gluproject(objx, objy, objz, modelmatrix, 0, projmatrix, 0, viewport, 0, winpos, 0); winpos[0] += viewport[0]; // パネルの左上を原点とする y 座標下向きに変換 // viewport の中身は [ 左下の x 座標, y 座標, ビューポート ( 描画領域 ) の幅, 高さ ] winpos[1] = getheight() - viewport[1] - winpos[1]; return bl; * GLEventListener のメソッド :3D 描画メソッド public void display(glautodrawable drawable) { /* deaultflg=true なら最初かリセットボタンが押された状態 * なので 回転量を 0 にするs if (defaultflg) { rotx = 0.0f; roty = 0.0f; defaultflg = false; // 背景色で塗りつぶし gl.glclear(gl.gl_color_buffer_bit GL.GL_DEPTH_BUFFER_BIT); // 現時点のマトリクス (Modelview 行列 ) を保存 必ず glpopmatrix() と対で使用する /* glpushmatrix と glpopmatrix() は 座標を回転したり平行移動したり * したものを する前の状態を覚えておくために使う * これを使わないと 回転などがどんどん重なっていってしまう // z 軸上 15 の位置から原点を見る, 上方向は y 軸 // glulookat( 視点の位置 x,y,z, 視点から見る座標 x,y,z, 上方向ベクトル x,y,z) glu.glulookat(0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // マウスの移動量に応じて回転 gl.glrotatef(rotx, 1.0f, 0.0f, 0.0f); gl.glrotatef(roty, 0.0f, 1.0f, 0.0f); // y 軸正方向に少しずらす gl.gltranslatef(0.0f, 0.4f, 0.0f); /* 棒 1 を描画 (z 軸周りに-degree 度回転 ) // ModelView 行列保存 // 色指定 // 環境光の反射率とは つまり物体の色になる gl.glmaterialfv(gl.gl_front, GL.GL_AMBIENT, green, 0); // 座標軸を z 軸周りに-degree 度回転 // 2,3,4 番目の引数は回転軸を表す ( 順に x, y, z) gl.glrotatef(-degree, 0.0f, 0.0f, 1.0f); // 半径 0.07 の円柱を 0 x 1 に描画 drawcylinder(0.07f, 1.0f, 0.0f); // 行列を保存した時の状態に戻す /* 棒 2 を描画 (z 軸周りに degree 度回転 ) gl.glmaterialfv(gl.gl_front, GL.GL_AMBIENT, green, 0); gl.glrotatef(degree, 0.0f, 0.0f, 1.0f); drawcylinder(0.07f, 1.0f, -1.0f); // -1 x 0 /* O 原子を原点に描画 gl.glmaterialfv(gl.gl_front, GL.GL_AMBIENT, red, 0); // 塗りつぶしの球を描画 // glutsolidsphere( 半径, Z 軸まわりの分割数, Z 軸に沿った分割数 ) glut.glutsolidsphere(0.3, div, div); -5-

6 // ModelView 行列を取得 gl.glgetdoublev(gl.gl_modelview_matrix, model, 0); // O 原子のウィンドウ座標を取得 gluproject(0.0, 0.0, 0.0, model, proj, view, pointo); // H 原子 1 を描画 gl.glmaterialfv(gl.gl_front, GL.GL_AMBIENT, blue, 0); gl.glrotatef(-degree, 0.0f, 0.0f, 1.0f); gl.gltranslatef(1.0f, 0.0f, 0.0f); // x 方向に 1 だけ平行移動 glut.glutsolidsphere(0.2, div, div); gl.glgetdoublev(gl.gl_modelview_matrix, model, 0); // ModelView 行列を取得 gluproject(0.0, 0.0, 0.0, model, proj, view, pointh1); // H 原子 2 を描画 gl.glmaterialfv(gl.gl_front, GL.GL_AMBIENT, blue, 0); gl.glrotatef(degree, 0.0f, 0.0f, 1.0f); gl.gltranslatef(-1.0f, 0.0f, 0.0f); // x 方向に-1 だけ平行移動 glut.glutsolidsphere(0.2, div, div); gl.glgetdoublev(gl.gl_modelview_matrix, model, 0); // ModelView 行列を取得 gluproject(0.0, 0.0, 0.0, model, proj, view, pointh2); // glpushmatrix() を呼ぶ前の行列の状態に戻す * GLEventListener のメソッド : 表示の切り替えが発生した場合に呼ばれる * 今回は特に記述することはない public void displaychanged(glautodrawable drawable, boolean modechanged, boolean devicechanged) { * GLEventListener のメソッド : 初期化時に呼ばれる public void init(glautodrawable drawable) { // OpenGL の関数群をもつオブジェクトを取得 gl = drawable.getgl(); glu = new GLU(); glut = new GLUT(); // 背景色を黒に設定 gl.glclearcolor(0.0f, 0.0f, 0.0f, 0.0f); // 影に隠れて見えないものは表示しない gl.glenable(gl.gl_depth_test); // 光を有効にする gl.glenable(gl.gl_lighting); gl.glenable(gl.gl_light0); // 光の反射の法線ベクトルを正規化 gl.glenable(gl.gl_normalize); // 光の位置を設定 /* 4 番目の数字はオフセット * JOGL は c++ のソースを JAVA に自動変換している * c++ では配列はポインタなので オフセットの概念がある * JAVA にポインタはないので引数が増やされているのだが * オフセットの数字は 0 でよい gl.gllightfv(gl.gl_light0, GL.GL_POSITION, lposition, 0); // 光の色を設定 -6-

7 gl.gllightfv(gl.gl_light0, GL.GL_SPECULAR, lspecular, 0); // 鏡面 gl.gllightfv(gl.gl_light0, GL.GL_DIFFUSE, ldiffuse, 0); // 拡散 gl.gllightfv(gl.gl_light0, GL.GL_AMBIENT, lambient, 0); // 環境 // 物体の反射率を設定 gl.glmaterialfv(gl.gl_front, GL.GL_SPECULAR, mspecular, 0); // 鏡面 gl.glmaterialfv(gl.gl_front, GL.GL_DIFFUSE, mdiffuse, 0); // 拡散 gl.glmaterialf(gl.gl_front, GL.GL_SHININESS, mshininess); // 鏡面係数 * GLEventListener のメソッド : 表示領域が変更されたときに呼ばれる public void reshape(glautodrawable drawable, int x, int y, int width, int height) { // ビューポート ( 描画領域 ) を設定 gl.glviewport(0, 0, width, height); // マトリクスとして Projection 行列を対象にする gl.glmatrixmode(gl.gl_projection); // マトリクスを単位行列で初期化 gl.glloadidentity(); // 視点の設定 ( 参考資料を参照 ) // gluperspactive( 視野角, 縦横比, near, far); glu.gluperspective(10.0, (double)width/(double)height, 1.0, 100.0); // マトリクスとして ModelView 行列を対象にする gl.glmatrixmode(gl.gl_modelview); // Projection 行列取得 gl.glgetdoublev(gl.gl_projection_matrix, proj, 0); // ビューポート取得 gl.glgetintegerv(gl.gl_viewport, view, 0); /* MouseListener のメソッド ************************************************* public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { * マウスを押したらスタートポイントに設定 public void mousepressed(mouseevent e) { // マウスを押した場所を取得 startpoint = e.getpoint(); // 現時点での回転量を保存 srotx = rotx; sroty = roty; -7-

8 public void mousereleased(mouseevent e) { /* MouseMotionListener のメソッド ************************************************ * ドラッグで回転量を計算 public void mousedragged(mouseevent e) { // マウスの場所を取得 endpoint = e.getpoint(); // 回転量を計算 ( パネルの端から端で一回転 ) rotx = srotx f*(float)(endPoint.y - startpoint.y)/(float)getwidth(); roty = sroty f*(float)(endPoint.x - startpoint.x)/(float)getheight(); // 再描画 repaint(); public void mousemoved(mouseevent e) { /* defaultflg の setter ************************************************************** public void setdefaultflg(boolean defaultflg) { this.defaultflg = defaultflg; -8-

3D 描画 Step2 マウスで回転できるようにする ベクトル (a, b, c) を軸として右回りに rot 度の回転は glrotatef(rot, a, b, c); で実行される 従って 座標軸の回転はそれぞれ x 軸まわり,y 軸まわりの回転量 (degree で表す ) を rotx, roty をとすると x 軸まわりの回転は glrotatef(rotx, 1.0f, 0.0f, 0.0f);

More information

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 /////////////////// Assignment_.java 0 0 0 0 0 /////////////////////////////////////////////////////////// // 課題 次のようにマウスのカーソルに同期しメッセージを /////////////////////////////////////////////////////////// class Assignment_ extends

More information

Microsoft PowerPoint prog1_doc2x.pptx

Microsoft PowerPoint prog1_doc2x.pptx アプレット public class extends Applet { public void paint(graphics g) { // アプレット描画 g.drawstring( Hello World, 10, 20 ); page 1 アプレット : 色 public class extends Applet { Color col; // カラークラス int red, grn, blu;

More information

Microsoft PowerPoint prog1_doc2.pptx

Microsoft PowerPoint prog1_doc2.pptx 2011 年 12 月 6 日 ( 火 ) プログラミング Ⅰ Java Applet プログラミング 文教大学情報学部経営情報学科堀田敬介 アプレット Applet public class クラス名 extends Applet { public void paint(graphics g) { // アプレット描画 g.drawstring( Hello World, 10, 20); 10

More information

コンピューターグラフィックスS

コンピューターグラフィックスS 今日の内容 コンピューターグラフィックス S 第 8 回 () システム創成情報工学科尾下真樹 28 年度 Q2 前回の復習 演習 (2): ポリゴンモデルの描画 変換行列 の概要 座標系 視野変換 射影変換 のまとめ 教科書 ( 参考書 ) コンピュータグラフィックス CG-ATS 協会編集 出版 2 章 ビジュアル情報処理 -CG 画像処理入門 - CG-ATS 協会編集 出版 章 (-2~-3

More information

Graphical User Interface 描画する

Graphical User Interface 描画する Graphical User Interface 描画する オブジェクト指向プログラミング特論 2016 年度 只木進一 : 工学系研究科 2 描画の基本 javax.swing.jpanel に描画する paint() または paintcomponent() メソッドを上書きすることによって描画する この中で描画対象を描く 基本的図形要素は準備されている しかし 画面の重なりによる再描画の場合

More information

コンピュータグラフィックスS 演習資料

コンピュータグラフィックスS 演習資料 コンピュータグラフィックス S 演習資料 第 4 回シェーディング マッピング 九州工業大学情報工学部システム創成情報工学科講義担当 : 尾下真樹 1. 演習準備 今回の演習も 前回までの演習で作成したプログラムに続けて変更を行う まずは シェーディングの演習のため 描画処理で 回転する一つの四角すいを描画するように変更する 画面をクリア ( ピクセルデータと Z バッファの両方をクリア ) glclear(

More information

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2 問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは 400 200 と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2 for 文を用いて図 3 の様な図形を描くプログラムを作成せよ 但し ウィンドウのサイズは 300 300

More information

I. (i) Foo public (A). javac Foo.java java Foo.class (C). javac Foo java Foo (ii)? (B). javac Foo.java java Foo (D). javac Foo java Foo.class (A). Jav

I. (i) Foo public (A). javac Foo.java java Foo.class (C). javac Foo java Foo (ii)? (B). javac Foo.java java Foo (D). javac Foo java Foo.class (A). Jav 2018 06 08 11:00 12:00 I. I III II. III. IV. ( a d) V. VI. 80 40 40 100 60 : A ActionListener aa addactionlistener AE ActionEvent K KeyListener ak addkeylistener KE KeyEvent M MouseListener am addmouselistener

More information

Java言語 第1回

Java言語 第1回 Java 言語 第 8 回ウインドウ部品を用いる (1) 知的情報システム工学科 久保川淳司 [email protected] 前回の課題 (1) マウスを使って, 前回課題で作成した 6 4 のマスの図形で, \ をマウスクリックによって代わるようにしなさい 前回の課題 (2) import java.applet.applet; import java.awt.*;

More information

ブロック崩し Step1 矢印キーで左右に動かせるパドルを描画する < パドルの表現方法 > パドルは java.awt パッケージの Rectangle という Java が用意しているクラスを使う これは四角形を表すクラスで 左上の点の座標と幅 高さをもっている (x, y) Rectangle

ブロック崩し Step1 矢印キーで左右に動かせるパドルを描画する < パドルの表現方法 > パドルは java.awt パッケージの Rectangle という Java が用意しているクラスを使う これは四角形を表すクラスで 左上の点の座標と幅 高さをもっている (x, y) Rectangle GUI プログラミング第 3 回演習 BlockBreaker ~ かんたんブロック崩しゲーム ~ パドルを左右に操作して落ちてくるボールを反射させ 上のブロックを崩していく ブロック ボール パドル 1.eclipse.zip を D: ドライブにコピーし 右クリック ここに解凍 2.workspace を S: ドライブから D: ドライブにコピー 3.eclipse.exe

More information

XAML Do-It-Yourself シリーズ 第 12 回 3D グラフィックス -1-

XAML Do-It-Yourself シリーズ 第 12 回 3D グラフィックス -1- XAML Do-It-Yourself シリーズ 第 12 回 3D グラフィックス -1- XAML Do-It-Yourself 第 12 回 3D グラフィックス XAML Do-It-Yourself 第 12 回は 3D グラフィックスについて学習します これまでアプリケーション で 3D グラフィックスを扱うには DirectX のコンポーネントを使用する必要がありましたが WPF (XAML)

More information

次の演習課題(1),(2)のプログラムを完成させよ

次の演習課題(1),(2)のプログラムを完成させよ 次の演習課題 (1),(2) のプログラムを作成せよ. 課題 (1) ボタン押下時の処理を追加し以下の実行結果となるようにプログラムを作成しなさい ( ボタン押下時の処理 ) import java.lang.*; class Figure extends JFrame implements ActionListener{ JPanel panel; JScrollPane scroll; JTextArea

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 02 グラフゖックで簡単な図形を描く図形描画プログラム 1 今回作成するゕプリケーションの概要 ボタンをクリックすると図形を描くプログラム 行われる動作 [1] ボタンをクリック [2] そのボタンに対する図形を描く これを使用者とコンピュータの関係で描くと [ 使用者 コンピュータ ] ボタンをクリック [ 使用者 コンピュータ ] 図形を描画して見せる 使用者がコンピュータにすること ボタンをクリック

More information

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問 Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問のメソッドを追加する public static void main(string[] args) {

More information

スライド 1

スライド 1 グラフィックスの世界第 3 回 サイバーメディアセンター サイバーコミュニティ研究部門安福健祐 Processing によるアニメーション setup と draw void setup() size(400, 400); void draw() ellipse( mousex,mousey,100,100); void とか setup とか draw とかはじめて見る が出てきてややこしい ellipseは円描く関数でした

More information

vecrot

vecrot 1. ベクトル ベクトル : 方向を持つ量 ベクトルには 1 方向 2 大きさ ( 長さ ) という 2 つの属性がある ベクトルの例 : 物体の移動速度 移動量電場 磁場の強さ風速力トルクなど 2. ベクトルの表現 2.1 矢印で表現される 矢印の長さ : ベクトルの大きさ 矢印の向き : ベクトルの方向 2.2 2 個の点を用いて表現する 始点 () と終点 () を結ぶ半直線の向き : ベクトルの方向

More information

コンピューターグラフィックスS

コンピューターグラフィックスS 前回の演習の復習 今日の内容 コンピューターグラフィックス S 第 7 回演習 (2): ポリゴンモデルの描画 システム創成情報工学科尾下真樹 前回の復習 ポリゴンの描画方法 ( 復習 ) 基本オブジェクトの描画 ポリゴンモデルの描画 演習課題 サンプルプログラム 前回の演習の復習 opengl_sample.c 地面と 枚の青い三角形が表示される マウスの右ボタンドラッグで 視点を上下に回転 前回の演習課題.

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 4 回目クラスの機能 (2) コンストラクタ クラス変数 クラスメソッド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) コンストラクタはメソッドと同様に戻り値をもつ (2) コンストラクタはオブジェクトが生成されると最初に実行される (3) コンストラクタはメソッドと同様にオーバーロードができる (4) コンストラクタは常に public メンバとしなければならない

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

JOGLによるOpenGL入門

JOGLによるOpenGL入門 OpenGL と GLUT を組み合わせれば UNIX 系 OS(Linux FreeBSD 等を含む ) と Windows と Mac のいずれでも動く リアルタイムに三次元表示を行うプログラムが とっても簡単に書けてしまう という三拍子そろったメリットが得られます org.jogamp.jogl jogl-all-main 2.*.* grep -lr 'javax\.media\.opengl'

More information

Chapter JDK KeyListener keypressed(keyevent e ) keyreleased(keyevent e ) keytyped(keyevent e ) MouseListener mouseclicked(mouseeven

Chapter JDK KeyListener keypressed(keyevent e ) keyreleased(keyevent e ) keytyped(keyevent e ) MouseListener mouseclicked(mouseeven Chapter 11. 11.1. JDK1.1 11.2. KeyListener keypressed(keyevent e ) keyreleased(keyevent e ) keytyped(keyevent e ) MouseListener mouseclicked(mouseevent e ) mousepressed(mouseevent e ) mousereleased(mouseevent

More information

Microsoft Word - 92.doc

Microsoft Word - 92.doc 208 9.2 陰線消去 (1) 考え方 9.2 陰線消去 等高線は,3 次元形状を数値的に正確に表示するという意味では有効ですが, 直感的に図形を把握するのが困難です そこで, 普段, 見慣れた見取り図で表示することを試みましょう 曲線の XYZ 座標を 2 次元に平行投影するのが, 最も簡単に見取り図を表示する方法です 図 9-3 に示す式が平行投影における変換式です z,y X Y j j j

More information

Microsoft PowerPoint - chap10_OOP.ppt

Microsoft PowerPoint - chap10_OOP.ppt プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,

More information

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが

More information

JAVA入門

JAVA入門 JAVA 入門後期 10 情報処理試験例題解説 H14 年度秋問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである (1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する

More information

コンピュータグラフィックス第8回

コンピュータグラフィックス第8回 コンピュータグラフィックス 第 8 回 レンダリング技法 1 ~ 基礎と概要, 隠面消去 ~ 理工学部 兼任講師藤堂英樹 レポート提出状況 課題 1 の選択が多い (STAND BY ME ドラえもん ) 体験演習型 ( 課題 3, 課題 4) の選択も多い 内訳 課題 1 課題 2 課題 3 課題 4 課題 5 2014/11/24 コンピュータグラフィックス 2 次回レポートの体験演習型 メタセコイア,

More information

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生 0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生まれ, コンピューテーショナルフォトグラフィ ( 計算フォトグラフィ ) と呼ばれている.3 次元画像認識技術の計算フォトグラフィへの応用として,

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラマー勉強会 1 回 basic.h 補足 [ 修飾子 ] const 付けた変数は初期化以外で値を設定することができなくなる 定数宣言に使う unsigned 付けた変数は符号がなくなり 正の値しか設定できない [ 条件コンパイル ] #ifdef M ここ以前に M がマクロとして定義されていれば ここ以下をコンパイルする #ifndef M ここ以前に M というマクロが定義されていなければ

More information

JAVA入門

JAVA入門 JAVA 入 門 後 期 3 JAVAのGUI (JavaのGUI 基 本 構 造 いろいろなアプレット) 1.GUI 構 造 GUI 構 造 JAVAでGUIを 構 築 するクラスとして 下 記 のがあります 1アプレットパッケージ 2AWT 3Swing 特 に2 3はコンポーネント パッケージを 利 用 1アプレット 概 要 特 徴 GUI 構 造 1. 最 初 から GUI 環 境 が 用

More information

KeyListener init addkeylistener addactionlistener addkeylistener addkeylistener( this ); this.addkeylistener( this ); KeyListener public void keytyped

KeyListener init addkeylistener addactionlistener addkeylistener addkeylistener( this ); this.addkeylistener( this ); KeyListener public void keytyped KeyListener keypressed(keyevent e) keyreleased(keyevent e) keytyped(keyevent e) MouseListener mouseclicked(mouseevent e) mousepressed(mouseevent e) mousereleased(mouseevent e) mouseentered(mouseevent e)

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

2008 e-learning T050050

2008 e-learning T050050 e-learning T050050 e-learning B NintendoDS e-learning html 1 e-learning Java Applet html 2 2008 e-learning T050050 1 1 1.1.................................. 1 1.2............................ 1 2 2 2.1..............................

More information

r3.dvi

r3.dvi 10 3 2010.9.21 1 1) 1 ( 1) 1: 1) 1.0.1 : Java 1 import java.awt.*; import javax.swing.*; public class Sample21 extends JPanel { public void paintcomponent(graphics g) { g.setcolor(new Color(255, 180, 99));

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2016/03/11 NetBeans ではじめる Java 第二回 画像処理ソフトウェアの開発 ArkOak 代表 加納徹 Java 講習会の流れ 5. 画像の入出力 6. マウスによる画像情報の取得 7. 画像の上からお絵描き 8. 画像処理ソフトウェアの開発 2 5. 画像の入出力 新規プロジェクト ImageProcessing を作ろう 画像の入出力 1. 以下のようにラベルとボタンを配置

More information

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料 10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料以下のプログラムを完成せよ 共通課題 1.Frame を生成するプログラム // Frame クラスを継承して 終了ボタンのみを定義した クラスの定義 class WhiteWindow 1 { // Frame クラスの継承をする (Frame クラスの拡張 ) WhiteWindow (String title){

More information

Processingをはじめよう

Processingをはじめよう Processing をはじめよう 第 7 章 動きその 2 目次 フレームレート スピードと方向 移動 回転 拡大 縮小 2 点間の移動 乱数 タイマー 円運動 今回はここまで 2 2 点間の移動 Example 7-6 (EX_08_06) 始点 (startx, starty) から終点 (stopx, stopy) まで移動する 座標更新の計算方法は後述 始点と終点を変更しても動作する 変更して確認

More information

情報システム設計論II ユーザインタフェース(1)

情報システム設計論II ユーザインタフェース(1) プログラミング演習 (3) 変数 : 計算とアニメーション 中村, 高橋 小林, 橋本 1 目標 Processing で計算してみよう Processing でアニメーションしよう 計算の方法を理解する 変数を理解する 課題 : Processing でアニメーションしよう! 計算してみよう 地球の半径は 6378.137km. では, 地球 1 周の距離はどれくらいになるでしょうか? println(

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

// ステージを設定します stage.setscene(scene); stage.settitle(" キャンバス "); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス

// ステージを設定します stage.setscene(scene); stage.settitle( キャンバス ); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス HCI プログラミング 11 回目グラフィックス 今日の講義で学ぶ内容 キャンバスと図形描画 マウスを用いたインタラクション ラジオボタンなど GUI 部品を用いたインタラクション キャンバスと図形描画 1 キャンバスに線を引いてみましょう 画用紙を表すキャンバスに図形を描くことができます ソースファイル名 :Sample11_1.java // HP よりインポート文をここへ貼り付けてください //

More information

謗域・ュ逕ィppt

謗域・ュ逕ィppt 情報工学 212 年度後期第 5 回 [1 月 31 日 ] 静岡大学 創造科学技術大学院情報科学専攻工学部機械工学科計測情報講座 三浦憲二郎 講義日程 第 8 回 11 月 21 日 ( 水 ) CG パート試験 講義アウトライン [1 月 31 日 ] ビジュアル情報処理 1.3.4 投影変換 1.3.5 いろいろな座標系と変換 OpenGL 投影変換 曲線の描画 トロコイド ( 外トロコイドと内トロコイド

More information

スライド 1

スライド 1 Graphics with Processing 2007-11 シェーディングとテクスチャマッピング http://vilab.org 塩澤秀和 1 11.1 シェーディング シェーディング シェーディングとは Shading= 陰影づけ 光の反射 材質のモデル ( 前回 ) ポリゴンの陰影計算モデル = シェーディングモデル シェーディングモデル フラットシェーディング ポリゴンを単一色で描画

More information

Microsoft PowerPoint - info_eng3_05ppt.pptx

Microsoft PowerPoint - info_eng3_05ppt.pptx インタラクティブシステム構築法 第 5 回 OpenGL と GLUT の使い方 (3) 埼玉大学情報システム工学科小林貴訓 シェーディング 光源の設定を有効にする glenable(gl_lighting); // 光源の設定を有効にする glenable(gl_light0); //0 番目の光源を有効にする (8 個まで設定可能 ) 光源の位置 GLfloat light0pos[] = {

More information

基本情報STEP UP演習Java対策

基本情報STEP UP演習Java対策 トレーニング編 1. 予約語 extends アクセスレベル class サブクラス名 extends スーパクラス名 { (1) スーパクラス ( 既存のクラス ) を拡張して, サブクラス ( 新しいクラス ) を定義する場合に extends を利用する (2) extends の後ろには, スーパクラスの名前を一つだけ指定できる (3) サブクラスからインスタンスを生成すると, スーパクラスに定義されたインスタンス変数やメソッドがこのインスタンス内部に引き継がれる

More information

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。 ソフトウェア基礎演習課題 文法理解度確認範囲 問題 1 データ型 ( 変数, データ型 ) 問題 2 制御構造 (switch 文 ) 問題 3 制御構造 (while 文 ) 問題 4 制御構造と配列 ( 総和 ) 問題 5 制御構造と配列 ( 総和, 平均 ) 問題 6 データ型と各種演算子 ( 文字列, 検索 ) 問題 7 クラスの定義 ( メソッドの定義, コンストラクタの定義, キャスト

More information

r3.dvi

r3.dvi 00 3 2000.6.10 0 Java ( 7 1 7 1 GSSM 1? 1 1.1 4 4a 4b / / 0 255 HTML X 0 255 16 (0,32,255 #0020FF Java xclock -bg #0020FF xclock ^C (Control C xclock 4c 1 import java.applet.applet; import java.awt.*;

More information

文字列操作と正規表現

文字列操作と正規表現 文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性

More information

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx コンテンツ メディア プログラミング実習 Ⅰ コンピュータグラフィックス編 1 幾何変換 橋本直 今日大事なのは プログラムをじっくり読んで なぜそうなるか? を考えよう 命令によって起きていることを頭の中でイメージしよう 2 本題の前に確認 Processingでは画面の 左上隅 が原点 (0,0) x 軸の正の向きは 右 y 軸の正の向きは 下 x y : (0,0) 3 幾何変換の基本 4 幾何変換とは

More information

< F2D F B834E2E6A7464>

< F2D F B834E2E6A7464> ランダムウォーク [Java アプレット ] [Java アプレリケーョン ] 1. はじめに 酔っぱらいは前後左右見境なくふらつきます 酔っぱらいは目的地にたどり着こうと歩き回っているうちに何度も同じところに戻って来てしまったりするものです 今 酔っぱらいが数直線上の原点にいるとします 原点を出発して30 回ふらつくとき 30 回目に酔っぱらいがいる位置は 出発点である原点からどれくらい離れてしまっているのでしょうか

More information

Microsoft PowerPoint - 9.pptx

Microsoft PowerPoint - 9.pptx 9/7/8( 水 9. 線形写像 ここでは 行列の積によって 写像を定義できることをみていく また 行列の積によって定義される写像の性質を調べていく 拡大とスカラー倍 行列演算と写像 ( 次変換 拡大後 k 倍 k 倍 k 倍拡大の関係は スカラー倍を用いて次のように表現できる p = (, ' = k ' 拡大前 p ' = ( ', ' = ( k, k 拡大 4 拡大と行列の積 拡大後 k 倍

More information

免許法認定公開講座: コンピュータグラフィックス

免許法認定公開講座:コンピュータグラフィックス 演習内容 免許法認定公開講座 : コンピュータグラフィックス 第 6 回 3 次元グラフィックス演習 基本的な3 次元グラフィックスのプログラムを作成 OpenGL を使ったポリゴン描画 視点操作 アニメーション 九州工業大学情報工学部システム創成情報工学科尾下真樹 参考書 最低限の関数は資料で説明 OpenGLの定番の本 ( 高い ) OpenGLプログラミングガイド ( 赤本 ), 12,000

More information