まず, 3次元空間内で三軸に平行に置かれた立方体の表面に, 2次元の作図をし 
てみましょう. 作画する2次元平面をちゃんと指定すれば, 
これまでの描画サブルーチンがそのまま使えます. 
 
 
 
  
| 
program sample_3d04
  use dcl
  real,parameter :: xmin= -50,  xmax= 50,  ymin= -50,  ymax= 50
  real,parameter :: vxmin=0., vxmax=0.8, vymin=0., vymax=0.8
  real,parameter :: zmin= -50,  zmax= 50
  real,parameter :: vzmin=0., vzmax=0.8
  real,parameter :: xvp3=2.5, yvp3=-1., zvp3=1.5 
  real,parameter :: xfc3=(vxmax-vxmin)/2, yfc3=(vymax-vymin)/2 
  real,parameter :: zfc3=(vzmax-vzmin)/2
    call DclOpenGraphics()
    call DclSetParm( 'GRAPH:ifont'   , 2 )
    call DclNewFrame
!-- x-y plane ----
    call DclSetWindow(  xmin,  xmax,  ymin,  ymax )
    call DclSetViewPort( vxmin, vxmax, vymin, vymax )
    call DclSetTransFunction
    call DclSet2DPlane( 1, 2, vzmax)
    call DclSet3DEyePoint( xvp3, yvp3, zvp3 )
    call DclSet3DObjectPoint( xfc3, yfc3, zfc3 )
    call DclSet3DProjection
    call aplot( 1 )
!-- x-z plane ----
    call DclSetWindow(  xmin,  xmax,  zmin,  zmax )
    call DclSetViewPort( vxmin, vxmax, vzmin, vzmax )
    call DclSetTransNumber( 1 )
    call DclSetTransFunction
    call DclSet2DPlane( 1, 3, vymin)
    call DclSet3DProjection
    call aplot( 2 )
!-- y-z plane ----
    call DclSetWindow(  ymin,  ymax,  zmin,  zmax )
    call DclSetViewPort( vymin, vymax, vzmin, vzmax )
    call DclSetTransNumber( 1 )
    call DclSetTransFunction
    call DclSet2DPlane( 2, 3, vxmax)
    call DclSet3DProjection
    call aplot( 3 )
    call DclCloseGraphics
end program
!-----------------------------------------------------------------------
subroutine aplot( ijk )
  use dcl
  integer,parameter :: nmax=40
  real :: x(0:nmax), y(0:nmax)
  character cttl*2
    call DclDrawViewPortFrame( 1 )
    dt = 2.*3.14159 / nmax
    do n=0,nmax
      x(n) = 40.*sin(n*dt)
      y(n) = 40.*cos(n*dt)
    end do
    call DclDrawLine( x, y )
    dt = 2.*3.14159 / 3
    do n=0,3
      x(n) = 40.*sin(n*dt)
      y(n) = 40.*cos(n*dt)
    end do
    call DclDrawLine( x(1:4), y(1:4) )
    call DclSetTextHeight( 0.07 )
    call DclDrawText( 0., 0., 'dennou' )
    write(cttl(1:2), '(i2.2)') ijk
    call DclDrawText( 0., -30., cttl )
    return
end subroutine
 | 
|  | 
| DclSet3DEyePoint (SCSEYE) | 透視変換の視点を設定する. | 
| DclSet3DObjectPoint (SCSOBJ) | 透視変換の焦点を設定する. | 
| DclSet2DPlane (SCSPLN) | 2次元平面を3次元空間に割付る. | 
| DclSet3DProjection (SCSPRJ) | 透視変換を確定する. | 
* 括弧の中は、対応するf77インターフェイス名.