1 基本
3D的三角形,(facet);分为“前”和“后”两面;
能看到的部分为前面,看不到的部分为后面;
如果三角形的三个点顺时针方向组成的面那么这个面就是前面;
按照0,1,2的顺序三个点组成了的这个面是上面我们可以看到;这图是网上找的;我还是有些疑惑,0、1、2似乎是逆时针;
Direct3D、OpenGL,都会把三角形分为两个面(前面和后面);
在此文用WPF画了基本的3D三角形,WPF 3d坐标系和基本三角形_wpf 坐标系原点-CSDN博客
来看一下能不能区分两个面;
原来的代码是, <PerspectiveCamera Position="-2,2,2" LookDirection="2,-2,-2" UpDirection="0,1,0"/>;
如果改为如下;则,啥也看不到了;改为 <PerspectiveCamera Position="0,0,0" LookDirection="0,0,0" UpDirection="0,1,0"/>;也是啥也看不到;
Position="-2,2,2",这是摄像机位置;x坐标是-2,那么摄像机是在左侧的位置;如果改为Position="2,2,2",还是啥也没有;
一时整不清楚,下回再整;
当前定义的材质,
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Yellow" />
</GeometryModel3D.Material>
可能是用于前面,或者两个面;
摄像机的两个属性,LookDirection - 按字面意思是看的方向, UpDirection - 按字面意思是上方向;下回再整;
2 理解顶点位置和设置前后面的材质
当前顶点位置是,<MeshGeometry3D Positions="-1,0,0 0,-1,0 0,0,-1"/> ,看到的如下,
第一个顶点是(-1,0,0),应该是左下的这个,如果改为(-2,0,0),X轴负方向是左侧,此顶点应往左移动;看一下,左移了;
第二个顶点应该是右下的这个,原来是(0,-1,0),如果改为(1,-1,0),此顶点应右移,X轴正方向是右侧;看一下,右移了;
第三个顶点是上方这个;原来是(0,0,-1);如果改为(0,0,-2),增大Z坐标负值,就是点更往屏幕里边去,看到的如下;当前摄像机并不在三角形正前方,在屏幕外2、偏左2、偏上2的位置,往屏幕里、偏右偏下的看;
现在改变顶点的顺序,使看到三角形的背面,然后设置背面的材质为绿色画刷,之前三角形前面设置了土黄色画刷,看一下是什么情况;看到的如下图,看到背面;BackMaterial,这是设置背面的材质;
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="-2,2,2" LookDirection="2,-2,-2" UpDirection="0,1,0"/>
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3D x:Name="Light">
<ModelVisual3D.Content>
<AmbientLight/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="-1,0,0, 0,0,-1,0,-1,0"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="#FFAA1D" />
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="#87A96B" />
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
</Grid>
</Page>