私はJOGLを使ってJavaで書いている小さなオープンGLアプリケーションを持っています。オープンGL変換
私は基本的に私が達成しようとしているものを変換
を適用するCURRENT方法が隣同士に2つのオブジェクトを持つことです見つけようとして壁に頭をバッシングしています。基本的に私はオブジェクトを作成します(すべての三角形を計算するメソッドです - 両方のオブジェクトが表示されているので、両方のオブジェクトが表示されているので、両者は重なっています)、ディスプレイにVBOとdrawElementsを配置します。私の問題は、glTranslatef、glRotatef、glScalefを使わないオンラインの例やチュートリアルを見つけることができないということです。これは私には知らされていますが、古いOpen GLの固定機能の一部になっていました。
編集:(前のコードは削除されました)
私の代わりに叙事詩が失敗します。彼がシェイダーコードを言ったとき、シェイダーを読み込んでコンパイルする.javaファイルを意味すると思っていました。 glslファイルにあったシェーダコードを意味していただけです。私は今、rx、ry、rzを保持する3つのmat4変数をどこに持つのかを見ています。奇妙なことは、スケールを設定して行列を変換しても、私のシェイプは表示されなくなるということです。回転行列は、仮定するように設定され、最後の行は "glPosition = rz * ry * rx * vPosition;"です。私は翻訳とスケール行列を宣言してから、 "= s * t * rz * ry * rx * vPosition"を実行しようとしましたが、サイコロはありませんでした。ここで
は、現在のシェーダコードです:私は下の二つの行列のコメントを外し、同じglPosition文を残せば
attribute vec4 vPosition;
uniform vec3 theta;
uniform vec3 trans;
uniform vec3 scale;
void main()
{
// Compute the sines and cosines of each rotation
// about each axis
vec3 angles = radians (theta);
vec3 c = cos (angles);
vec3 s = sin (angles);
// rotation matricies
mat4 rx = mat4 (1.0, 0.0, 0.0, 0.0,
0.0, c.x, s.x, 0.0,
0.0, -s.x, c.x, 0.0,
0.0, 0.0, 0.0, 1.0);
mat4 ry = mat4 (c.y, 0.0, -s.y, 0.0,
0.0, 1.0, 0.0, 0.0,
s.y, 0.0, c.y, 0.0,
0.0, 0.0, 0.0, 1.0);
mat4 rz = mat4 (c.z, -s.z, 0.0, 0.0,
s.z, c.z, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
//mat4 t = mat4 (1.0, 0.0, 0.0, trans.x,
// 0.0, 1.0, 0.0, trans.y,
// 0.0, 0.0, 1.0, trans.z,
// 0.0, 0.0, 0.0, 1.0);
//mat4 s = mat4 (scale.x, 0.0, 0.0, 0.0,
// 0.0, scale.y, 0.0, 0.0,
// 0.0, 0.0, scale.z, 0.0,
// 0.0, 0.0, 0.0, 1.0);
gl_Position = rz * ry * rx * vPosition;
//gl_Position = s * t * rz * ry * rx * vPosition;
}
ので、基本的に、何も表示されません。またコメントアウトされたglPositionステートメントは機能しませんでした(私は驚くことではありませんが、行列の乗算にはそれほど優れていません)。私はまた、試してみるだけでs * vPositionを実行しようとしましたが、再び何も見えません。
この宿題はありますか? – Lukasz
はいこれはコンピュータグラフィックスクラスの割り当てです。ほとんどの課題は、三角形メッシュを表示するためのOpenGLコマンドを学習することでした(つまり、VBBを作成してglBegin()やglEnd()ではなくgpuに送る)。しかし、彼は変換にどのようにアプローチすべきかについてはわかりませんでした。私のインターネット検索では、glRotatefなどを使用することがすべて指摘されていましたが、今日私は彼にそれについて尋ねたとき、彼はそれが古い標準であり、今はシェイダーによって制御されていると言いました。しかし、Shaderのプログラムコードにはそれを処理するものは何もなく、電子メールに応答するのはひどいです。 – user1028885
"glTranslatef、glRotatef、glScalefを使わない例やチュートリアルをオンラインで見つけることはできません" [見たか?](http://www.opengl.org/wiki/Getting_started#Tutorials_and_How_To_Guides) JOGLを使用していない可能性がありますが、十分に翻訳できるはずです。これらの最初の5つは、純粋なシェーダベースの技術を使用しています。 –