在three.js中更新bufferGeometry中的normal

时间:2017-04-25 13:07:57

标签: three.js buffer-geometry

我有两个圆柱体,一端相交。我可以单独改变交叉点的半径,但它们仍然在一端相遇,如下所示。但是,我希望这两者之间的交集是平滑的,换句话说,它们在交集中的法线将如下所述进行共享:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-9-vbo-indexing/。 我已将正常更新设置为TRUE,并且还将交叉点中法线的所有y分量更改为零。它仍然没有显示平滑的交叉点。这两个圆柱体由BufferGeometry制作。enter image description here

所以我的代码的一部分更重要:1-因为几何是BufferGeometry,我首先使用下面的两个命令来创建法线的几何:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.bgspanmcve.MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginStart="0dp"
        android:inputType="text"
        android:paddingEnd="0dp"
        android:paddingStart="0dp"
        android:text="EditText"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@id/editText"
        android:layout_below="@id/editText"
        android:layout_marginStart="0dp"
        android:layout_marginTop="16dp"
        android:paddingEnd="0dp"
        android:paddingStart="0dp"
        android:text="TextView"
        android:textSize="20sp"
        android:textStyle="bold" />

</RelativeLayout>

2-然后由于两个几何具有相同数量的顶点,我将所有顶点的y分量设置为0:

comp.mesh.geometry.computeFaceNormals();
comp.mesh.geometry.computeVertexNormals();

当我让程序显示法线时,它们的法线y分量为0,但几何图形尚不平滑。

1 个答案:

答案 0 :(得分:0)

我认为唯一可行的方法就是焊接这些点。您需要检查重复项,并为它们分配相同的索引。使用这些indecis进行三角测量和顶点法线计算。