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

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

		squareMesh.setVertices(new float[] {
				// Front face:
				0.5f, 1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // TL
				0.5f, -1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // BL
				2.5f, -1.0f, -6.0f, Color.toFloatBits(0f, 0f, 1f, 1f), // BR
				2.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), // LR
				0.5f, 1.0f, -6.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // LN
				2.5f, 1.0f, -6.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // RN
				2.5f, 1.0f, -8.0f, Color.toFloatBits(1f, 0f, 1f, 1f), // RR
				// Rear face
				2.5f, 1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // TR
				2.5f, -1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // BR
				0.5f, -1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // BL
				0.5f, 1.0f, -8.0f, Color.toFloatBits(0f, 1f, 0f, 1f), // TL
				// Bottom face
				0.5f, -1.0f, -6.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // LN
				2.5f, -1.0f, -6.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // RN
				2.5f, -1.0f, -8.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // RR
				0.5f, -1.0f, -8.0f, Color.toFloatBits(0.5f, 0.5f, 0.5f, 1f), // LR
				// Left face
				0.5f, 1.0f, -8.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // TR
				0.5f, 1.0f, -6.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // TN
				0.5f, -1.0f, -6.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // BN
				0.5f, -1.0f, -8.0f, Color.toFloatBits(1f, 1f, 0f, 1f), // BR
				// Right face
				2.5f, 1.0f, -6.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // TN
				2.5f, 1.0f, -8.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // TR
				2.5f, -1.0f, -8.0f, Color.toFloatBits(0f, 1f, 1f, 1f), // BR
				2.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 blend
	private boolean blend;

	private StillModel model;

	@Override
	public 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;
	}

	@Override
	public 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);
	}

	@Override
	public void hide() {
	}

	@Override
	public void pause() {
	}

	@Override
	public void resume() {
	}

	@Override
	public void dispose() {
	}

	@Override
	public void resize(int width, int height) {
		float aspectRatio = (float) width / (float) height;
		camera = new PerspectiveCamera(45, 2f * aspectRatio, 2f);
	}

	@Override
	public 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;
	}

	@Override
	public boolean keyUp(int keycode) {
		return false;
	}

	@Override
	public boolean keyTyped(char character) {
		return false;
	}

	@Override
	public boolean touchDown(int screenX, int screenY, int pointer, int button) {
		return false;
	}

	@Override
	public boolean touchUp(int screenX, int screenY, int pointer, int button) {
		return false;
	}

	@Override
	public boolean touchDragged(int screenX, int screenY, int pointer) {
		return false;
	}

	@Override
	public boolean mouseMoved(int screenX, int screenY) {
		return false;
	}

	@Override
	public boolean scrolled(int amount) {
		return false;
	}

}

效果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值