Libgdx 未通过UV坐标应用纹理
我正在将一个简单的three.js场景转换为libgdx。一切加载和运行正常,但似乎我的对象的UV纹理坐标没有正确应用?我将.obj/.mtl用于模型和纹理。我知道在教程中提到,在制作中应该使用.g3db格式而不是.obj格式,我计划这样做,但我仍然很好奇为什么我的.objs没有正确映射纹理?以前有人见过这种情况吗?我是不是错过了什么 LIBGDX THREEJSLibgdx 未通过UV坐标应用纹理,libgdx,Libgdx,我正在将一个简单的three.js场景转换为libgdx。一切加载和运行正常,但似乎我的对象的UV纹理坐标没有正确应用?我将.obj/.mtl用于模型和纹理。我知道在教程中提到,在制作中应该使用.g3db格式而不是.obj格式,我计划这样做,但我仍然很好奇为什么我的.objs没有正确映射纹理?以前有人见过这种情况吗?我是不是错过了什么 LIBGDX THREEJS package com.freedom.三十; 导入com.badlogic.gdx.ApplicationListener;
package com.freedom.三十;
导入com.badlogic.gdx.ApplicationListener;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.assets.AssetManager;
导入com.badlogic.gdx.graphics.Color;
导入com.badlogic.gdx.graphics.GL20;
导入com.badlogic.gdx.graphics.PerspectiveCamera;
导入com.badlogic.gdx.graphics.VertexAttributes.Usage;
导入com.badlogic.gdx.graphics.g3d.Environment;
导入com.badlogic.gdx.graphics.g3d.Model;
导入com.badlogic.gdx.graphics.g3d.ModelBatch;
导入com.badlogic.gdx.graphics.g3d.ModelInstance;
导入com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
导入com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
导入com.badlogic.gdx.graphics.g3d.Material;
导入com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
导入com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
导入com.badlogic.gdx.utils.Array;
导入com.badlogic.gdx.graphics.FPSLogger;
公共类FreeDomThreen实现ApplicationListener{
公众透视摄像机;
公共摄像机控制器;
公共模型批处理模型批处理;
公共资产管理者资产;
公共数组allModelInstances=新数组();
公共环境;
公共布尔加载;
公共阵列玩家=新阵列();
公共模型实例播放器;
公共事务委员会;
公共模型实例skybox;
public FPSLogger theLogger=新的FPSLogger();
@凌驾
公共void create(){
modelBatch=新modelBatch();
环境=新环境();
set(新的ColorAttribute(ColorAttribute.AmbientLight,0.4f,0.4f,0.4f,1f));
添加(新的DirectionalLight().set(0.8f,0.8f,0.8f,-1f,-0.8f,-0.2f));
cam=新透视照相机(45,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
凸轮位置设定(-4f,4f,4f);
凸轮注视(5f,0f,-5f);
cam.near=1f;
cam.far=1000f;
cam.update();
camController=新的CameraInputController(cam);
Gdx.input.setInputProcessor(camController);
资产=新资产管理器();
负载(“test_character.obj”,Model.class);
负荷(“仪表网格.obj”,型号.class);
assets.load(“skybox1.obj”,Model.class);
加载=真;
}
私有void doneLoading(){
skybox=newModelInstance(assets.get(“skybox1.obj”,Model.class));
board=新的ModelInstance(assets.get(“meter_grid.obj”,Model.class));
添加(线路板);
player=新模型实例(assets.get(“test_character.obj”,Model.class));
添加(播放器);
players.add(player);
加载=假;
}
@凌驾
公共无效呈现(){
if(加载&assets.update()){
doneLoading();
}
camController.update();
glViewport(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
Gdx.gl.glClear(GL20.gl_颜色_缓冲_位| GL20.gl_深度_缓冲_位);
modelBatch.begin(cam);
render(所有模型实例,环境);
如果(skybox!=null){
modelBatch.render(skybox);
}
modelBatch.end();
log.log();
}
@凌驾
公共空间处置(){
modelBatch.dispose();
allModelInstances.clear();
资产。处置();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
}
@凌驾
公共空间暂停(){
}
@凌驾
公众简历(){
}
}
您需要翻转坐标,请参见:@Xoppa这确实是解决方案。投票后发表评论。如果你想把这变成一个答案,我会接受的。非常感谢:)您需要翻转坐标,请参见:@Xoppa这确实是解决方案。投票后发表评论。如果你想把这变成一个答案,我会接受的。非常感谢:)
package com.freedom.thirty;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.graphics.FPSLogger;
public class FreedomThirty implements ApplicationListener {
public PerspectiveCamera cam;
public CameraInputController camController;
public ModelBatch modelBatch;
public AssetManager assets;
public Array<ModelInstance> allModelInstances = new Array<ModelInstance>();
public Environment environment;
public boolean loading;
public Array<ModelInstance> players = new Array<ModelInstance>();
public ModelInstance player;
public ModelInstance board;
public ModelInstance skybox;
public FPSLogger theLogger = new FPSLogger();
@Override
public void create() {
modelBatch = new ModelBatch();
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));
cam = new PerspectiveCamera(45, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.position.set(-4f, 4f, 4f);
cam.lookAt(5f, 0f, -5f);
cam.near = 1f;
cam.far = 1000f;
cam.update();
camController = new CameraInputController(cam);
Gdx.input.setInputProcessor(camController);
assets = new AssetManager();
assets.load("test_character.obj", Model.class);
assets.load("meter_grid.obj", Model.class);
assets.load("skybox1.obj", Model.class);
loading = true;
}
private void doneLoading(){
skybox = new ModelInstance(assets.get("skybox1.obj", Model.class));
board = new ModelInstance(assets.get("meter_grid.obj", Model.class));
allModelInstances.add(board);
player = new ModelInstance(assets.get("test_character.obj", Model.class));
allModelInstances.add(player);
players.add(player);
loading = false;
}
@Override
public void render() {
if(loading && assets.update()){
doneLoading();
}
camController.update();
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
modelBatch.begin(cam);
modelBatch.render(allModelInstances, environment);
if(skybox != null){
modelBatch.render(skybox);
}
modelBatch.end();
theLogger.log();
}
@Override
public void dispose() {
modelBatch.dispose();
allModelInstances.clear();
assets.dispose();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}