我使用OpenGL库Rajawali3D来显示我的模型.我想知道的是如何根据登录用户从我的服务器加载纹理?我已经在互联网上搜索了几个月,但没有成功.我发现这个网站解释了如何从非本地源加载纹理,但是当我尝试它时,它不适用于Rajawali.任何建议或例子将不胜感激.
这是我试图使用的网站:来自网络的纹理
我正在学习如何在android上进行3D开发.我从一个带有一些云的简单旋转行星开始.我花了两天的时间试图让大气层焕发光彩.我在线查看并尝试使用着色器,但无法走远.
我的问题是,实现这一目标的最佳方法是什么?我向正确的方向推动可能就是我所需要的一切.
我附上了迄今为止我所拥有的行星的截图,以及我拍摄的最终目标.
感谢您的任何帮助.
目前的进展:

最终目标:http: //25.media.tumblr.com/tumblr_m06q7l7BpO1qk01v6o1_500.png
我是Opengl的新手,我正在尝试使用rajawali来安装我的Android应用程序.
我正在尝试渲染一个3D对象,我想将3D对象背景显示为设备的Camera预览.我看到了实现此目的的一些结果,但他们建议使用CameraView并将其添加到内容视图中.
但我也希望捕获屏幕以及相机预览和3D对象模型.
我怎样才能在rajawali实现这一目标?
我正在使用Rajawali 3D Framework并尝试从SDcard加载.obj文件.当我将这些文件(.obj,.mtl,texture.png(可绘制文件夹))放在原始文件夹上时,我能够上传和解析obj文件,但是当我尝试从sdcard解析它时,它说:
[org.rajawali3d.materials.Material] Could not compile fragmentshader:
Shader log: Fragment shader compilation failed.
Run Code Online (Sandbox Code Playgroud)
这是我从Sdcard上传.obj文件的代码:
private Object3D Object;
LoaderOBJ objParser = new LoaderOBJ(this,"Load/1c_obj");
try {
objParser.parse();
Object = objParser.getParsedObject();
getCurrentScene().addChild(Object);
} catch (ParsingException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
logcat的:
D/Rajawali? Parsing: /storage/emulated/0/Load/1c_obj
D/LoaderOBJ? Found Material Lib: 1c_mtl
D/LoaderOBJ$MaterialLib? Parsing material: Texture0
D/LoaderOBJ$MaterialLib? Parsing material: Texture1
9578-9612/com.example.loadobj D/LoadModelFragment$LoadModelRenderer? startRendering()
E/Rajawali? [org.rajawali3d.materials.Material] Could not compile fragment shader:
9578-9612/com.example.loadobj E/Rajawali? Shader log: Fragment shader compilation failed.
ERROR: 0:13: '.' : Syntax error: syntax error …Run Code Online (Sandbox Code Playgroud) 我是这个地区的新人.我正在尝试更改github中的程序,以便现在播放纸板视频.
我使用StreamingTexture修改了MyRenderer.
public class MyRenderer extends RajawaliCardboardRenderer {
public MyRenderer(Context context) {
super(context);
}
private MediaPlayer mMediaPlayer;
private StreamingTexture streamingTexture;
@Override
protected void initScene() {
mMediaPlayer = MediaPlayer.create(this.getContext(), R.raw.test);
streamingTexture = new StreamingTexture("video", mMediaPlayer);
Sphere sphere = createPhotoSphereWithTexture(streamingTexture);
getCurrentScene().addChild(sphere);
getCurrentCamera().setPosition(Vector3.ZERO);
getCurrentCamera().setFieldOfView(75);
}
private static Sphere createPhotoSphereWithTexture(ATexture texture) {
Material material = new Material();
material.setColor(0);
try {
material.addTexture(texture);
} catch (ATexture.TextureException e) {
throw new RuntimeException(e);
}
Sphere sphere = new Sphere(50, 64, 32);
sphere.setScaleX(-1);
sphere.setMaterial(material);
return sphere;
} …Run Code Online (Sandbox Code Playgroud) 我对Android开发很新,我知道基本活动,地图,sqlite等.我希望能够实现一些3D对象,以便能够在我的应用程序中进行交互.经过一番搜索,我发现rajawali似乎是最好的方法.正如您所做的那样,我从第一篇教程开始,并从示例文档中读取源代码.我迷失的地方是我逐字逐句地遵循了教程,由于脚本中的错误,我无法运行应用程序.如果有人使用Rajawali之前我会指出一些关于我哪里出错的指示.(该教程最后更新于2个月前,因此它最近更新).教程
这是我的源代码
主要活动:
package rajawali.tutorials;
import rajawali.RajawaliActivity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends RajawaliActivity {
private Renderer mRenderer;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRenderer = new Renderer(this);
mRenderer.setSurfaceView(mSurfaceView);
super.setRenderer(mRenderer);
}
}
Run Code Online (Sandbox Code Playgroud)
渲染:
package rajawali.tutorials;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import rajawali.lights.DirectionalLight;
import rajawali.materials.textures.ATexture.TextureException;
import rajawali.materials.textures.Texture;
import rajawali.primitives.Sphere;
import rajawali.renderer.RajawaliRenderer;
public class Renderer extends RajawaliRenderer {
private DirectionalLight mLight;
Sphere mSphere;
public Renderer(Context context) {
super(context);
setFrameRate(60);
}
public void initScene() {
mLight = new DirectionalLight(1f, 0.2f, -1.0f); …Run Code Online (Sandbox Code Playgroud) 我很难弄清楚如何使用Rajawali播放360视频.为了实现这一点,我尝试了我能在互联网上找到的所有解决方案,但我失败了.
首先,我使用了RajawaliCardboard,让MainActivity扩展CardboardActivity.同时,在MyRenderer课堂上,我让这门课从课堂上延伸出来RajawaliCardboardRenderer.在MyRenderer课堂上,我重写了这个initScene()功能:
protected void initScene() {
StreamingTexture mTexture = null;
if (externalMemoryAvailable())
{
mVideoPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/testVideo.mp4";
try{
mPlayer = new MediaPlayer();
mPlayer.setDataSource(mVideoPath);
}catch(IllegalArgumentException e){
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mPlayer.prepare();
} catch (IOException t) {
t.printStackTrace();
}
mTexture …Run Code Online (Sandbox Code Playgroud) android video-streaming rajawali google-cardboard rajawalivr
我正在创建一个全景视图,允许用户通过旋转智能手机环顾一下球形图像.我将Rajawali的Skybox与TYPE_ROTATION_VECTOR传感器一起使用.
我得到了它的工作,但只有当我向前看时(它实际上是基于我的旋转(偏航))
这是行为:
现在我确实有预感正在发生什么.似乎"相机对象"一直看着相同的方向,即使它看起来不是这样.这意味着俯仰似乎与滚动相同,但是它仍然在俯仰,因为物体没有旋转.我把它比作飞机上的四处看看.
我需要做些什么来解决这个问题?
我有一种感觉,我将不得不用lookAt()旋转相机,但我不知道如何.
public class SkyboxFragment extends RajawaliFragment implements SensorEventListener {
public static final String TAG = "SkyBoxFragment";
private SensorManager mSensorManager;
private float[] orientationVals = new float[3];
private float[] mRotationMatrix = new float[16];
private Sensor mRotVectSensor;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
LinearLayout ll = …Run Code Online (Sandbox Code Playgroud) 我正在研究一种使用Min3d/Rajawali框架围绕3D物体旋转相机的算法.
在我的实现中,绕X轴的旋转不能正常工作.我认为该方法setLookAt()无法正常工作.
问题:
当我垂直旋转球体时,我无法完全看到它.例如,转动地球,我无法完全看到南极,因为算法会重置相机.
是否可以在不使用"setLookAt"方法的情况下实现相机围绕物体旋转?
我尝试了不同的解决方案,但无法使其正常工作.
以下是我的代码:
initScene:
scene.camera().position.z = 90;
scene.camera().target = raketeOBJ.position();
onTouchEvent:
public boolean onTouchEvent(MotionEvent me) {
if (me.getAction() == MotionEvent.ACTION_DOWN) {
xpos = me.getX();
ypos = me.getY();
return true;
}
if (me.getAction() == MotionEvent.ACTION_UP) {
xpos = -1;
ypos = -1;
touchTurn = 0;
touchTurnUp = 0;
return true;
}
if (me.getAction() == MotionEvent.ACTION_MOVE) {
float xd = me.getX() - xpos;
float yd = me.getY() - ypos;
xpos = me.getX();
ypos = me.getY();
touchTurn …Run Code Online (Sandbox Code Playgroud) 我正在使用Android Cardboard SDK和开发一个VR视频查看器RajawaliVR(https://github.com/Rajawali/RajawaliVR)
在某些设备上,我从睡眠状态返回时出现此故障(其他人只显示黑屏):
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.opengl.GLSurfaceView$GLThread.surfaceCreated()' on a null object reference
at android.opengl.GLSurfaceView.surfaceCreated(GLSurfaceView.java:523)
at android.view.SurfaceView.updateWindow(SurfaceView.java:580)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:176)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1970)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5891)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Run Code Online (Sandbox Code Playgroud)
正如你可以看到崩溃在android代码中,我该如何开始调试呢?