0

javaでglmの移植を書こうとしています。

現時点では、パッケージ jglm を作成しました。このパッケージ内には、Mat4、Vec4、Vec3 などのさまざまなクラスがすべて含まれています。

そのような:

public class Mat {

    protected float[] matrix;
    protected int order;
}

入力して呼び出すことができます

jgml.Mat4 modelviewMatrix = new Jgml.Mat4(1.0f);

そしてこれでいいの..

今、私はいくつかの方法も書いています

mix(x, y, lerp)

また、これを前述のように使用したいと思います。

float value = jglm.mix(x, y, lerp)

しかしもちろん、この場合 Jglm はクラスでなければなりません...

2つのものを結合する方法はありますか?

編集:クラスjglm.Jglmを作成すると

package jglm;

/**
 *
 * @author gbarbieri
 */
public class Jglm {

    public class Mat {

        protected float[] matrix;
        protected int order;
    }

    public class Mat4 extends Mat {

        public Vec4 c0;
        public Vec4 c1;
        public Vec4 c2;
        public Vec4 c3;

        public Mat4(float value) {

            order = 4;

            matrix = new float[16];

            for (int i = 0; i < 4; i++) {
                matrix[i * 5] = value;
            }
            c0 = new Vec4(matrix, 0);
            c1 = new Vec4(matrix, 4);
            c2 = new Vec4(matrix, 8);
            c3 = new Vec4(matrix, 12);
        }

        public float[] toFloatArray() {
            return new float[]{
                c0.x, c0.y, c0.z, c0.w,
                c1.x, c1.y, c1.z, c1.w,
                c2.x, c2.y, c2.z, c2.w,
                c3.x, c3.y, c3.z, c3.w,};
        }
    }

    public static float mix(float start, float end, float lerp) {
        return (start + lerp * (end - start));
    }
}

インスタンス化しようとすると

cameraToClipMatrix_mat4 = new Jglm.Mat4(1.0f);

Jglm.Mat4 を含む囲んでいるインスタンスが必要です」というメッセージが表示されます

4

3 に答える 3

2

現時点では、パッケージ Jglm を作成しました。このパッケージ内には、Mat4、Vec4、Vec3 などのさまざまなクラスがすべて含まれています。

Java では、パッケージの名前はすべて小文字にする必要があります。あなたが行った方法で名前を付けると、コードを見た人は誰でも驚くでしょうし、コンパイラに深刻な名前解決の問題を引き起こす可能性もあります.

使用しているすべてのクラスをインポートすることも慣例であるため、コード内では単純な名前でそれらを参照します。おそらく、宣言することを検討できます

package org.example.jglm;

public class Jglm {
  public static void mix(double x, double y, Lerp lerp) {
    ...
  }
}

クライアント側では、次のように記述します

import org.example.Jglm;

void someMethod() {
  Jglm.mix(x,y,lerp);
}

一般に、コードで純粋な関数が必要な場合は、それらをstaticメソッドとして宣言します。java.lang.Mathガイダンスについては、ソース コードを参照してください。

于 2013-07-08T08:53:01.847 に答える
2

Matクラス内のすべてのメソッドを次のように宣言します static

宣言に static 修飾子があるものは、クラスのインスタンスを作成する必要なく、クラス名で呼び出す必要があります。

元:ClassName.methodName(args)

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.htmlのクラス メソッドを参照してください。

于 2013-07-08T08:47:59.810 に答える
1

Jglm クラスのすべてのメソッドを静的にすると、インスタンスとクラス名の両方でメソッド呼び出しが可能になります。

于 2013-07-08T08:49:55.633 に答える