LIBGDX版NEHE OPENGL- 8. Blend & 加载模型和帖图

来源:互联网 发布:数据江湖txt精校版 编辑:程序博客网 时间:2024/04/29 12:16

初学OpenGL让我最麻烦的一件事情就是,一个正方体,要输入下面这么多顶点。

squareMesh.setVertices(new float[] {// Front face:0.5f, 1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // TL0.5f, -1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // BL2.5f, -1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // BR2.5f, 1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // TR// Top face:0.5f, 1.0f, -8.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // LR0.5f, 1.0f, -6.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // LN2.5f, 1.0f, -6.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // RN2.5f, 1.0f, -8.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // RR// Rear face2.5f, 1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // TR2.5f, -1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // BR0.5f, -1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // BL0.5f, 1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // TL// Bottom face0.5f, -1.0f, -6.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // LN2.5f, -1.0f, -6.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // RN2.5f, -1.0f, -8.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // RR0.5f, -1.0f, -8.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // LR// Left face0.5f, 1.0f, -8.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // TR0.5f, 1.0f, -6.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // TN0.5f, -1.0f, -6.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // BN0.5f, -1.0f, -8.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // BR// Right face2.5f, 1.0f, -6.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // TN2.5f, 1.0f, -8.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // TR2.5f, -1.0f, -8.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // BR2.5f, -1.0f, -6.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // BN});

今天就来说说方便的办法,连同Blend的方法一并发出来:

package com.kyugao.screen;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.Input;import com.badlogic.gdx.InputProcessor;import com.badlogic.gdx.Screen;import com.badlogic.gdx.files.FileHandle;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.PerspectiveCamera;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g3d.loaders.ModelLoaderRegistry;import com.badlogic.gdx.graphics.g3d.model.still.StillModel;public class Blend implements Screen, InputProcessor {private PerspectiveCamera camera;private Texture texture;private float rquad = 0;// indicator of light and blendprivate boolean blend;private StillModel model;@Overridepublic void render(float delta) {camera.update();camera.apply(Gdx.graphics.getGL10());Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);Gdx.gl.glEnable(GL10.GL_TEXTURE_2D);Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);drawGLScene();rquad += 20f * delta; // 每秒钟转20度,计算在每一次render的时间差里,要转的角度。比如0.5秒,那就应该转10度。rquad %= 360;}private boolean drawGLScene() {Gdx.gl10.glLoadIdentity();Gdx.gl10.glTranslatef(0.0f, 0.0f, -7.0f);Gdx.gl10.glRotatef(rquad, 1.0f, 1.0f, 1.0f);texture.bind();model.render();return true;}@Overridepublic void show() {FileHandle modelFile = Gdx.files.internal("g3d/cube.obj");model = ModelLoaderRegistry.loadStillModel(modelFile);texture = new Texture(Gdx.files.internal("data/textureglass.png"));Gdx.input.setInputProcessor(this);}@Overridepublic void hide() {}@Overridepublic void pause() {}@Overridepublic void resume() {}@Overridepublic void dispose() {}@Overridepublic void resize(int width, int height) {float aspectRatio = (float) width / (float) height;camera = new PerspectiveCamera(45, 2f * aspectRatio, 2f);}@Overridepublic boolean keyDown(int keycode) {if (keycode == Input.Keys.B) {System.out.println("B down");blend = !blend;if (blend) {Gdx.gl.glEnable(GL10.GL_BLEND);Gdx.gl.glDisable(GL10.GL_DEPTH_TEST);} else {Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);Gdx.gl.glDisable(GL10.GL_BLEND);}}return false;}@Overridepublic boolean keyUp(int keycode) {return false;}@Overridepublic boolean keyTyped(char character) {return false;}@Overridepublic boolean touchDown(int screenX, int screenY, int pointer, int button) {return false;}@Overridepublic boolean touchUp(int screenX, int screenY, int pointer, int button) {return false;}@Overridepublic boolean touchDragged(int screenX, int screenY, int pointer) {return false;}@Overridepublic boolean mouseMoved(int screenX, int screenY) {return false;}@Overridepublic boolean scrolled(int amount) {return false;}}

效果如下: