[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
久々にJavaを使っていると(JOGL)、
列挙型の使い方がわからなくなったので
今後のためメモしておきます。
まず文脈を話しておくと、
Java用のOpenGL(JOGL)を使っていたのですが、
この定数が汚いんですね。
多くの定数がGLというクラスの中に定義されていて、
しかもその定数の種類というのが、
プリミティブのタイプもカリングモードも
行列の種類もアルファブレンディングも
なにもかもごっちゃになっています。
//プリミティブのタイプを表す定数
GL.GL_POINTS
GL.GL_LINES
GL.GL_LINE_STRIP
GL.GL_LINE_LOOP
GL.GL_TRIANGLES
GL.GL_TRIANGLE_FAN
...
//行列
GL.GL_PROJECTION
GL.GL_MODELVIEW
...(以下略)
ごちゃごちゃです。
まず第一、"GL"をなぜ2度も書かなければならないのか、
そこが不条理です。
そして第二に、目的の異なる定数を1つのクラスに
大量に詰め込むのはよくありません。
どのくらい大量かというと、このくらいです。
もうわけがわかりません。
こんなときには列挙型を使って用途別に分別すべきです。
(そしてGLクラス全体のラッパーを作り始めたのですが、
ここではあまり関係ありません)
とりあえず最初は描画する図形のタイプを
表す定数を列挙型にすることにしました。
しくじってしまったのはここで、
C#のようなやり方をしてはいけません。
Compile Error!
import javax.media.opengl.*;
public enum PrimitiveType {
Points = GL.GL_POINTS,
Lines = GL.GL_LINES,
LineStrip = GL.GL_LINE_STRIP,
LineLoop = GL.GL_LINE_LOOP,
Triangles = GL.GL_TRIANGLES,
TriangleFan = GL.GL_TRIANGLE_FAN,
Quads = GL.GL_QUADS,
QuadStrip = GL.GL_QUAD_STRIP,
Polygon = GL.GL_POLYGON
}
import javax.media.opengl.*;
public enum PrimitiveType {
Points(GL.GL_POINTS),
Lines(GL.GL_LINES),
LineStrip(GL.GL_LINE_STRIP),
LineLoop(GL.GL_LINE_LOOP),
Triangles(GL.GL_TRIANGLES),
TriangleFan(GL.GL_TRIANGLE_FAN),
Quads(GL.GL_QUADS),
QuadStrip(GL.GL_QUAD_STRIP),
Polygon(GL.GL_POLYGON);
private int value;
PrimitiveType(int value){
this.value = value;
}
public int value(){
return value;
}
}