首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用GeometryInfo的Java3d -错误的正态

使用GeometryInfo的Java3d -错误的正态
EN

Stack Overflow用户
提问于 2012-05-27 20:37:18
回答 1查看 421关注 0票数 0

我在windows中使用eclipse Indigo下的Java3d。在最后修改了StlLoader示例和ObjLoad类以加载我的STL文件后,我得到了一个如下所示的结果(我认为从其他问题来看,这些肯定是不好的向量法线)。有人知道我为什么会有这个问题吗?我使用SolidWorks将STL保存为ASCII文件,并修改了java3d.org上给出的加载STL文件的代码。虽然我只更改了一些外观属性并修复了损坏的导入等,但我已经确认输入到下面的"normList“中的刻面法线绝对与文件中的匹配。

结果示例:

来自http://www.java3d.org的StlFile.java代码片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private SceneBase makeScene()
{
// Create Scene to pass back
SceneBase scene = new SceneBase();
BranchGroup group = new BranchGroup();
scene.setSceneGroup(group);

// Store the scene info on a GeometryInfo
GeometryInfo gi = new GeometryInfo(GeometryInfo.TRIANGLE_STRIP_ARRAY);

// Convert ArrayLists to arrays: only needed if file was not binary
if(this.Ascii)
{
  coordArray = objectToPoint3Array(coordList);
  normArray = objectToVectorArray(normList);
}

gi.setCoordinates(coordArray);
gi.setNormals(normArray);
gi.setStripCounts(stripCounts);

// Setting the Material Appearance
Appearance app = new Appearance();

// Coloring Attributes
ColoringAttributes catt = new ColoringAttributes();
catt.setShadeModel( ColoringAttributes.NICEST );
app.setColoringAttributes(catt);

Material mat = new Material(new Color3f(0.6f, 0.6f, 0.6f),      // ambient
                            new Color3f(0, 0, 0),               // emissive
                            new Color3f(0.6f, 0.6f, 0.6f),      // diffuse
                            new Color3f(0.6f, 0.6f, 0.6f),      // specular
                            10);                                // shininess
app.setMaterial(mat);

// Put geometry into Shape3d
Shape3D shape = new Shape3D(gi.getGeometryArray(), app);

group.addChild(shape);
scene.addNamedObject(objectName, shape);

return scene;
} // end of makeScene
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-13 19:28:45

如果表面上的一些区域真的是黑色的(0x000000),我会猜测一些法线实际上是指向模型内部而不是外部。

您可以检查所有三角形的顶点v1,v2,v3是否按右侧顺序定义(只需测试det(v1,v2,v3) >0),并相应地对点进行重新排序。或者,检测“相反”法线并将其乘以-1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10777095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文