さて、これは説明するのが難しいでしょう。私はAndEngineを使用してAndroid用の非常に基本的な「疑似3d」レーシングゲームを作成しています(そして、openGL-私は思います)。AndEngineの使用は、この問題と実際には何の関係もないと思います。なぜなら、描画を完了するためにopenGL関数に直接アクセスしているからです。
とにかく、私は通常2d AndEngineが3dパースペクティブを持つことを可能にするいくつかのコードをコピーパスタしました(そのようなチュートリアルはここにあります。これはかなりうまく機能し、これが私の問題とあまり関係がないと思います、しかし私はopenGLを完全には理解していないので、言うのは少し難しいです。3DパースペクティブでカメラをセットアップするonLoadEngine(アプリの起動時に呼び出されます)からのコードは次のとおりです。
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT) {
//other methods...
private void setFrustum(GL10 pGL) {
// set field of view to 60 degrees
float fov_degrees = 60;
float fov_radians = fov_degrees / 180 * (float)Math.PI;
// set aspect ratio and distance of the screen
float aspect = this.getWidth() / (this.getHeight());
float camZ = this.getHeight()/2 / (float)Math.tan(fov_radians/2);
// set projection
GLHelper.setProjectionIdentityMatrix(pGL);
GLU.gluPerspective(pGL, fov_degrees, aspect, camZ/10, camZ*10);
// set view
GLU.gluLookAt(pGL, 0,120f, camZ, 0, 0, 0f, 0, 1, 0); // move camera back+up
pGL.glScalef(1,-1,1); // reverse y-axis
pGL.glTranslatef(-CAMERA_WIDTH/2,-CAMERA_HEIGHT/2,0); // origin at top left
}
};
その後、onLoadScene(描画が行われる場所)で、次のように一連の画像を描画します。
for (int n=0;n<=100;n++) {
final int k = n;
final Sprite line = new Sprite(0, 0,CAMERA_WIDTH,16f, [AndEngine texture holding road img]) {
@Override
protected void applyTranslation(GL10 pGL) {
pGL.glTranslatef(this.mX, 120f, 15f*k); //16*k causes a sliver of a space between each segment
pGL.glRotatef(90f, 1, 0, 0); //**MAY BE MY ISSUE**
}
};
scene.attachChild(line); //actually draws the image to the screen
}
1つを除いて、これもかなりうまく機能します!それは私の画像のたわごとを歪めます。画像は単純なpngで、どちらもCAMERA_WIDTHと一致し、どちらも次のようになります。
そして、回転線なしで描画すると、次のようになります。
これはまともな直線の中央線を持っていますが(tbh私はこの方法でそれらに満足します)、道路の端は基本的にそれらが向いているはずの正反対の方向を向いていることがわかります。なぜそれらを裏返すだけではないのか考えましたか?x軸を中心に180度回転させる必要があると思いましたが、それでは消えてしまい、90度で動作することがわかりました(???)。とにかく、これが私が得るものです:
そうそう。ここに私の問題があります-中央の車線の仕切りはがらくたとして歪んでいます!! 道路の端を示す線は見事に並んでいますが、どういうわけかそれは本当にその真ん中の線をいじっています。私は3Dの背後にある数学のほとんどを理解していますが、これをどうすればよいのか本当にわかりません...非常に鋭い角度で表示されているため、画像が圧縮されているようですが、実際にはわかりません単純にトップダウンビューにすることなく、どうすればそれを解決できるでしょうか。:S
とにかく...どんなアイデアやガイダンスも大歓迎です。申し訳ありませんが、これは非常に長く複雑な投稿です。問題がどこにあるのか本当にわからない場合は、大変です。
また、私はopenGLまたは3Dグラフィックスの経験がほとんどないか、まったくないこと、そしてそれらについて深く学ぶことにあまり興味がないことは注目に値するかもしれません。この問題に対するバンドエイドが必要です!