[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; } }