3D 三角形的前面和后面

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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值