读取点云.OBJ文件,画出顶点平面图

更新时间:2023-06-23 06:18:32 阅读: 评论:0

读取点云.OBJ⽂件,画出顶点平⾯图3D Builder软件打开 .obj ⽂件是这样(和上图不是⼀个⽂件)
Android studio 打开 .obj ⽂件如下图
我这⾥只需要平⾯图 就是v顶点 其余的不需要
下⾯开始:
⾸先是读取.obj⽂件 ⽂件在⼿机内
public void startRead(final String uri) {
mRootView.showLoading();
new Thread(new Runnable() {
@Override
public void run() {
KLog.e("start read");
long start = System.currentTimeMillis();
getObjXy(uri);
vocational
long end = System.currentTimeMillis();
KLog.e("⽤时:" + ((end - start) / 1000) + " s");
//画点
drawpoint();
}
}).start();
}
/**
* 读取 obj 的 xy点
*
* @param uri
*/
private void getObjXy(String uri) {
String fileStr = place("file://", "");
KLog.e(fileStr);
BufferedReader mBufferedReader = null;
try {
mBufferedReader = new BufferedReader(new FileReader(fileStr));
} catch (FileNotFoundException e) {
KLog.e(e);
e.printStackTrace();
}
String line;
String[] lineArr;
int j = 0;
try {
while ((line = adLine()) != null) {
lineArr = line.split(" ");
if (lineArr.length > 3 && lineArr[0].equals("v")) {
float x = Float.parFloat(lineArr[1]);
float y = Float.parFloat(lineArr[2]);
vX.add(x);
vY.add(y);
/
/获取最⼤最⼩的 x y 点
adjustMaxMin(x, y);
x boxj++;
} el if (lineArr.length > 3 && lineArr[0].equals("vn") || lineArr.length > 3 && lineArr[0].equals("vt")) {                    KLog.e("break");
curedbreak;fly away
}
if (j % 100 == 0)
KLog.e(j);
}
} catch (IOException e) {
e.printStackTrace();
KLog.e(e);
}
托福口语黄金80题}
private float maxX, maxY, minX, minY;
/**
* 拿到最⼤最⼩ x y
*
* @param x
* @param y
*/
protected void adjustMaxMin(float x, float y) {
if (x > maxX) {
maxX = x;
}
if (y > maxY) {
maxY = y;
}
if (x < minX) {
minX = x;
}
if (y < minY) {
高一英语周记minY = y;
}
}
现在所有点已经读到了(拿到了所有点的 x y的值) 开始画点
private float pxI = 100;//⽤户指定像素
private float mI = 1;//⽤户指定⽶
public static float width, height;//宽⾼
//obj⽂件中的v xy点
private List<Float> vX = new ArrayList<>();
private List<Float> vY = new ArrayList<>();
private Paint paint;
/**
* 画点
*/
private void drawpoint() {
width = (maxX - minX) / mI * pxI;
height = (maxY - minY) / mI * pxI;
_bitmap = ateBitmap((int) width, (int) height, Bitmap.Config.RGB_565);
mCanvas = new Canvas(_bitmap);
paint = new Paint();
paint.tAntiAlias(true);
paint.tStyle(Paint.Style.STROKE);//设置空⼼
paint.tColor(colorP);
paint.tStrokeWidth(paintSize);
paint.tStrokeCap(Paint.Cap.ROUND);
//制定0点坐标
int x = 0;
int y = 0;
//画点
drawP(mCanvas, x, y);
activity.runOnUiThread(new Runnable() {
napier@Override
public void run() {
mRootView.tBitmap(_bitmap);
mRootView.hideLoading();
}
});
}
点的x y的值可能会不在⼿机屏幕上 ⽐如 -1 等 所以需要考虑平移
private void drawP(Canvas canvas, int x, int y) {
//起始的偏移量有负数的坐标存在
float xP = 0, yP = 0;
少儿英语歌曲视频if ((minX / mI * pxI + x) < 0) {
xP = Math.abs(minX / mI * pxI + x);
}
if (minY / mI * pxI + y < 0) {
广州粤菜培训
yP = minY / mI * pxI + y;
}
if (maxX / mI * pxI + x > width) {
xP = width - (maxX / mI * pxI + x);
}
if (maxY / mI * pxI + y > height) {
yP = maxY / mI * pxI + y - height;
}
for (int i = 0; i < vX.size(); i++) {
canvas.drawPoint((vX.get(i) / mI * pxI + x + xP), (vY.get(i) / mI * pxI + y - yP), paint);
}
}六一快乐英文
最后效果图

本文发布于:2023-06-23 06:18:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1019058.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:坐标   负数   偏移量   需要   粤菜   软件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图