4

正投影モードで実行されるほとんどの2Dゲームがありますが、一部には、他の2Dオブジェクトの間にレンダリングされる3Dモデルが表示されます。遠近法モードに切り替えてそのモデルをレンダリングしてから、元に戻して他のオブジェクトを正投影モードでレンダリングするにはどうすればよいですか?

OpenGLESでどのように行われるかを示すことができれば称賛に値します。

4

3 に答える 3

4

これは正確に特定された質問ではないと思います。もっとビューが欲しいですか?または、2D背景、3Dゲームオブジェクト、2DGUIが必要です。これが必要な場合は、次のようにします。

  • フルスクリーンの背景をレンダリングする
  • ビューポートをposition=obj.pos-obj.size / 2、size = obj.sizeに設定し、オブジェクトをレンダリングします
  • 2DGUIをレンダリングする

またはあなたは何か他のものが欲しいですか?

編集:

ここに小さなコードがあります:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,w,0,h,near,far);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(pos.x,...);

DrawQuads();

//if you want to keep your previus matrix
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluPerspective(90,width/(float)height,0.001,1000);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(pos.x,...);
glRotate(-45.0f,1,0,0);
glTranslate(0,0,distance from object);
glRotate(90.0f,1,0,0);
// or use gluLookAt
// 0,0,1 - if you want have z as up in view
// 0,1,0 - for y
//gluLookAt(pos.x,pos.y,pos.z,cam.x,cam.y,cam.z,0,0,1);

glScale(object.width/model.width,...);
DrawModel();

// Restore old ortho
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
于 2010-08-08T22:15:31.667 に答える
2

ええと、「やるだけ」

  • 射影行列をオルソに設定します
  • 2Dオブジェクトのモデルビューを設定します
  • 2Dオブジェクトをレンダリングする
  • 射影行列を射影として設定します
  • 3Dオブジェクトのモデルビューを設定します
  • 3Dオブジェクトをレンダリングする

...そしてこれは再び続くことができます

  • とスワップバッファ。

見た目どおりにオブジェクトの順序を知っている場合は、各レンダリング間のZバッファをクリアすることもできます。

于 2010-08-09T08:21:25.783 に答える
0

以前の投稿に同意します。より一般的なケースは、3Dオブジェクトや2DGUIのようなものだと思います。強調するためだけに。:)

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective( 45.0f, (GLfloat)s_width/(GLfloat)s_height, near, far);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// render 3D object
glUseProgram(modelProgram);
glSetUniformMat(glGetUniformLocation(model.mvp, "mvp"), mvpMat);
glBindVertexArray(model.vao);
glDrawArrays(GL_TRIANGLES, 0, model.size);
glUseProgram(0);


glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// draw GUI
renderGUI();
于 2016-10-17T18:28:40.560 に答える