除了纹理之外,所有对我来说都非常适合使用Android中的Rajawali。 我想以编程方式将透明图像作为纹理加载,其中棋盘图案中每个黑色方块实际上是完全透明的,而每个白色方块都是白色。 我想将它用作对象上的纹理,否则可以通过编程方式更改漫反射和镜面反射颜色属性。因此,如果用户输入了蓝色,我希望该对象显示蓝白色图案。 我怎样才能做到这一点? rajawali教程并没有真正帮助,因为对于纹理rajawali在上次更新中发生了很大变化。此外,Rajawali示例应用程序并没有真正帮助,因为它们似乎都处理环境贴图。 我试过的是例如:
protected void initScene() {
objParser = new LoaderOBJ(mContext.getResources(), mTextureManager, R.raw.stdblock_obj);
try{
Texture jetTexture = new Texture("jetTexture", R.drawable.chessboardtexture);
mTextureManager.getInstance().addTexture(jetTexture);
semiglossMaterial.addTexture(jetTexture);
semiglossMaterial.setColorInfluence(0);
}catch(TextureException e){
e.printStackTrace();
}
}
渲染对象,但没有任何纹理。棋盘图像的大小为2的幂,它位于右侧文件夹R.raw.stdblock_obj中。这是一个jpg图像,但我也尝试了png,它也没有用。
我也尝试过不同的方法:
semiglossMaterial.enableLighting(true);
semiglossMaterial.setDiffuseMethod(new DiffuseMethod.Lambert());
phongMethod.setShininess(iShininess); semiglossMaterial.addTexture(new Texture("jetTexture",R.drawable.chessboardtexture));
semiglossMaterial.addTexture(new AlphaMapTexture("alphaMapTex", R.drawable.simpletexture3));
semiglossMaterial.setColorInfluence(0);
但这也行不通。 有人有想法吗?
答案 0 :(得分:1)
您必须将该纹理添加为子项,.obj文件的子项,如果您不知道有多少孩子拥有.obj及其名称,请使用:
package com.example.alex.jsonparsegridview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ImageAdapter extends BaseAdapter {
private Context context;
private JSONArray android;
private String TAG_PATH = "path";
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
public ImageAdapter(Context context, JSONArray android) {
this.context = context;
this.android = android;
}
public View getView(int position, View convertView, ViewGroup parent) {
View gridView = null;
try {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
JSONObject c = android.getJSONObject(position);
// Storing JSON item in a Variable
String path = c.getString(TAG_PATH);
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_PATH, path);
oslist.add(map);
gridView = new View(context);
// get layout from mobile.xml
gridView = inflater.inflate(R.layout.mobile, null);
// set value into textview
TextView textView = (TextView) gridView
.findViewById(R.id.grid_item_label);
textView.setText(path.toString());
// set image based on selected text
ImageView imageView = (ImageView) gridView
.findViewById(R.id.grid_item_image);
Picasso.with(context).load("http://www.500kgiveaway.co.uk/" + path).resize(400,400).into(imageView);
} else {
gridView = (View) convertView;
}
} catch (JSONException e) {
e.printStackTrace();
}
return gridView;
}
@Override
public int getCount() {
return android.length();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
然后使用简单的
"your3DobjectName".numChildren(),
通过这种方式,您将知道在您的对象中声明了多少孩子以及您孩子的姓名