簡報檔案下載 - 國立台灣大學土木工程學系

Download Report

Transcript 簡報檔案下載 - 國立台灣大學土木工程學系

自己做, 自己玩
Xbox 遊戲實作
視覺化實驗室 VLAB 莊世坤 2010/11/24
1
大綱
• Microsoft Xbox 與 XNA 介紹
– XNA 開發環境
– 遊戲賣場與網路資源
– 連線上傳
• SimuSurveyX 實例 Demo
• 程式範例與開發經驗
–
–
–
–
–
基本架構
模型下載與使用
座標轉換整合
控制介面
特殊效果
2
Microsoft Xbox 與 XNA 介紹
3
Xbox
•
•
•
•
•
•
HDMI 或 專用連接線提供 AV/ 色差/ S-Video
網路連線 Xbox Live 付費下載或免費試玩
支援 Media Center
HDD 儲存遊戲
Facebook, Twitter
Kinect
4
Xbox 遊戲控制器
5
Microsoft XNA
• 簡化遊戲開發流程, 以 Net.Framework 為基礎, 整合Windows/ Xbox
360/ Windows Phone 等開發平台。
• 開發環境 ( on Windows 7), 下載並安裝 :
– VS 2008 ( Express ), ( 程式語言 :
C# )
http://www.microsoft.com/express/Downloads/#2008-Visual-CS
( 因為現在微軟開發工具以2010為主, 所以要特別點選2008 )
– XNA 3.1 ,
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=80782277-d58442d2-8024-893fcd9d3e82&displaylang=en
• 網路資源與遊戲賣場
– XNA Creators Club -> ( http://creators.xna.com ) -> APP HUB
– 微軟官方遊戲網站 http://www.microsoft.com/taiwan/games/default.aspx
– XNA Developer Center
http://msdn.microsoft.com/zh-tw/xna/default.aspx
– Xbox LIVE Marketplace, 讓業餘遊戲開發者有了發行管道 。
6
會員資格
• Membership (http://create.msdn.com/en-US )
– 金會員 ( $99 /year ), 銀會員, 試用會員
– 可以開發和上傳 Xbox 360 和 Windows Phone 遊戲
• DreamSpark
https://www.dreamspark.com/default.aspx
點選 XNA Game Studio 3.1 之後有詳細說明
• 要發佈 XBOX 360 遊戲需要加入 XNA Creator Club, 每年 US $99 或
是每季 US $49
• 要發佈 XBOX 360 遊戲, 主機需要買硬碟版本而非無線網路版
7
會員資格比較
8
電腦基本需求
• 最低硬體需求: Xbox debugging : 繪圖卡支援 Shader Model 1.1, DirectX
9.0c, Windows Phone 7: DirectX 10, with a supporting WDDM 1.1 driver
• 沒有繪圖卡沒辦法順利執行 !
9
SimuSurveyX Demo
10
SimuSurveyX ( http://simusurveyx.caece.net )
11
完整遊戲範例
以下都有 Source Code 可以參考
• 2D – Shooting Game
• ALIEN GAME ( use Game Controller)
• Space Shooter Mini Game
• 3D - Robot Game
12
程式範例與開發經驗
13
開始
• 安裝完之後.來試試看是否OK~
1.開啟 Microsoft XNA Game Studio 3.1裡的Microsoft
Visual Studio C# 2008 Express Edition。
2.【檔案】→【新增專案】→選擇【Windows Game
3.1】。
3.然後就可以開始執行,【偵錯】→【開始偵錯】,或是
按下F5, 如果看到藍色畫面, 就成功了!
14
XNA 程式基本架構
Game1.cs
Initialize()
LoadContent()
更新頻率: 60 Hz, 即相隔時間
16.7 ms
效能不足時, Draw()會被忽略,
產生 Jerky Movement
Update()
Draw()
變數宣告
內容載入
檢查使用者操作
依照邏輯改變物體位置
Camera 視角更新
畫面更新
15
XNA 遊戲程式的基本 Life Cycle
1.
2.
3.
4.
5.
6.
7.
遊戲開始 (建立 Game)
初始化 (建立 GraphicsDeviceManager, 就是管理螢幕畫面的類別)
載入內容 (呼叫 LoadContent 方法)
遊戲進行 (呼叫 Update 與 Draw 方法)
不斷重複 Step 4. 直到遊戲結束
釋放資源 (呼叫 UloadContent 方法)
遊戲結束 (呼叫 Exit 方法)
16
在螢幕上顯示一個3D Model
宣告變數
Model landscape;
載入內容
protected override void LoadContent()
{
landscape = Content.Load<Model>("landscape");
}
畫出
protected override void Draw(GameTime gameTime)
{
foreach (ModelMesh mesh in landscape.Meshes)
{
mesh.Draw();
}
base.Draw(gameTime);
}
( 部分內容省略, 例如指定視點和視角)
別忘了Content 加入/現有項目
, 選取 landscape.fbx 檔
17
關於Update()
• Update 方法的呼叫時機
• 預設為 fixed-step 模式, IsFixedTimeStep 為 True
• Game 的 TargetElapsedTime 預設為 1/60, 原則上每 1/60 秒呼叫
Update 和 Draw 一次
• PC 和 XBOX : 1/60 秒
• Zune 與 Windows Phone 7 : 1/30 秒
• 如果 1/60 秒內沒有辦法完成 Update, 則 IsRunningSlowly 會被系統
設定為 True. 之後, 僅會呼叫 Update 而不呼叫 Draw 以讓系統跟上更
新的頻率
• 如果始終無法跟上, 則放棄 1/60 秒
18
GameComponent
•
•
使用場合: 例如 Menu, OnScreen Keyboard
在專案上滑鼠右鍵, 加入/新增項目/ XNA Game Studio 3.1/ Game Component
• DrawableGameComponent
•
和
GameComponent 的差別
多了兩個函數
protected override void LoadGraphicsContent(bool loadAllContent)
public override void Draw(GameTime gameTime)
用法
主程式Game1.cs 的 Initialize() 中
_g3DMenu = new g3DMenu(State, this);
_g3DMenu.Visible = false;
_g3DMenu.Enabled = false;
_g3DMenu.DrawOrder = 100;
_g3DMenu.UpdateOrder = 100;
在不同圖層
Components.Add(_g3DMenu);
之後程式裡面以 Enabled, Visible 屬性來決定要不要讓此 GameComponent 有作用
程式獨立, 唯一要做的事情就是把結果傳回來
19
內建的 Content Pipeline
類型
• 2D 圖形
• 3D 模型
• 音效/音樂
• 字型
支援格式
• .fbx
• .fx , .x
• 字型描述檔案 .spritefont
• 圖片檔 (紋理texture) : .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga
• XACT 建立的聲音檔 (.xap), .mp3, .wmv, .wma
• 不支援格式會造成執行時期 LoadContent 失敗, 無法進行遊戲
• 不支援格式需要自行撰寫 Importer
20
XNA 常用類別
• 2D 與 3D : Texture2D, Model
• 座標 : Vector2(二維 xy ), Vector3(三維 xyz), Vector4
• 碰撞偵測 : (1) BoundingBox 建立元件的邊框模型, 缺點是比較不精確
( 2D 下使用, 但是需搭配 Vector3, z軸填 0 ) (2) BoundingSphere
• 遊戲核心 : Game , GameComponent
• 音效與音樂 : (1) SoundEfffect (簡易版, 播放後無法再控制) (2)
SoundEffectInstance (3) MediaPlayer
• 載入控制 : (1) KeyBoardState 鍵盤 (2) TouchState 觸控 (3)
MouseState 滑鼠 (4)GamePadState 遊戲搖桿
• 3D 模型 : Matrix, ModelMesh, ModelBone, BasicEffect
• 其他 : (1) GameTime (記錄遊戲開始至結束的時間狀態) (2)
SpriteBatch (繪圖) (3) SpriteFont (繪文字) (4) MathHelper (數學運
算)
21
XNA 專案
• 一般都是新建 Windows 專案
• Create Copy of Project for Xbox 360
• Create Copy of Project for Zune
• 由屬性和可以加入的參考的差別 可以看出其差異
• XNA Start - A first application
http://www.toymaker.info/Games/XNA/html/xna_start.html
22
網路資源
• 快速引導手冊- 建立一個遊戲
http://msdn.microsoft.com/zh-tw/xna/ee373492.aspx
• Toymaker
http://www.toymaker.info/Games/XNA/index.html
• XNA 3.1 /4.0 所附說明文件
23
從程式範例中學習
• http://create.msdn.com/en-US/education/
依會員資格下載不同等級範例。
• 一個簡單的 Xbox 遊戲, 只要以下元素, 可以作3D Navigation
• 3D 模型檔 ( 包含環境, 主角, 敵人 )
• 使用者控制 ( 鍵盤, 滑鼠, 搖桿 )
• 攝影機控制
24
連線上傳到 Xbox
Create copy of project for Xbox 360
建置方案 Xbox 360 copy of your project
Package as XNA Creators Club Game
Xbox – 我的遊戲庫/ XNA Game Studio Connect
工具/ Launch XNA Game Studio Device Center
第一次連線需輸入序號
• Double click on .ccgame file
• Xbox 端開始接收
•
•
•
•
•
25
區域網路
• 家裡 ADSL
PC 和 Xbox 都在同一個區網, 且都可以連到 Internet, 例如透過 IP分享器
上網
• 學校
PC, Xbox 要註冊 MAC ( 土木系 ) 以便 DHCP 並連上網路
26
安裝檔製作
一般作法
告訴安裝者必須先安裝 VS2008與
XNA3.1, Double Click .ccmage 檔案
Unpack
• 缺點: 安裝目錄在 使用者\AppData\Local\XNA Creators Club Games\...
為隱藏目錄, 若要安裝新版需要手動移除舊版
27
安裝檔製作 -2
• 使用 NSIS
NSIS is a professional open source system to create Windows installers
http://nsis.sourceforge.net/Main_Page
下一步, 下一步..
28
遊戲製作流程
企劃
實作
美工+程式
發行
遊戲元素
• 場景, 角色, 任務
• 使用者 透過控制介面 控制主角, 在場景中克服重重 關卡, 完成 任務。
29
SimuSurvey360 System Diagram
架構 - SimuSurveyX
Game1.cs
Collaboration
Game1
Inheritance
ScreenManager.cs
ScreenManager:
DrawableGameComponent
Components.Add(_ScreenManager);
_ScreenManager.AddScreen(new MainScreen(), PlayerIndex.One);
Call Update() in InputState
and screen(s)
MainScreen.cs
Background
Screen
MainScreen : GameScreen
Loading
Screen
InfoScreen
PauseMenu
Screen
InputState
Keyboard
GamePad
GameScreen
_SceneController = new
SceneController(_MainViewport,_SurveyingViewport);
Button State
Transition
MenuScreen
SceneController.cs
Options
Up,Down, Select
MenuEntry Fade Effect
Selected, Update()
SceneController
SurveyingWindowCo
ntroller
AddInstrument()
ViewController
Instruments
Instruments
Instruments
Small Windows
For each Instrument, Update
and Draw
User.Pose
Type: TotalStation,Level,Ruler
Coordinate
Keep translation/ rotation,
scale only
Draw the rectangles on the
ground
TotalStation
Large
Level
Ruler
Small
TwoPartsInstrument
OnePartInstrument
Not Used
30
Artificial Intelligence
• 以 Robot Game 為例
• GameEnemy 如何 Move
, Search, Turn Left(Right),
Attack
• 遊戲
• 開發文件
31
設計參考
• 參考各種 Xbox 遊戲 , 網路遊戲
http://games.softpedia.com/
• 遊戲程式
http://www.gamedev.net
32
向量與矩陣運算
• 2D/ 3D 座標系統
• 向量 Vector3及 矩陣 Matrix
• 幾何轉換 Geometric Transformations
– 平移 Matrix.CreateTranslation( x, y, z );
– 旋轉 Matrix.CretaeRotationX ( a );
– 縮放 Matrix.CreateScale( a ) ;
• 以矩陣相乘即可
33
3D Primitives
• How To: Draw Points, Lines, and Other 3D Primitives
Mshelp://MS.VSCC.v90/MS.VSIPCC.v90/MS.XNAGS31.1033/XNA/Draw_3D_Pr
imitives.htm#ID4EWC
34
座標軸
35
Camera
Azimuth
Pan
Elevation
• Camera 類別
•Draw () 中指定世界、觀測、投影矩
陣, 從Camera類別取得
Horizon
Tilt
effect.World = transforms[mesh.ParentBone.Index] *
Matrix.CreateScale(0.01f);
effect.World = effect.World *
Matrix.CreateRotationY(modelRotation);
effect.View = Matrix.CreateLookAt(new Vector3(0.0f, 1.2f,
1.2f),
Vector3.Zero, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView
( MathHelper.ToRadians(45.0f),1.333f, 1.0f, 10000.0f);
36
物理引擎
• nVIDIA PhysX physical Exgine
• 萬有引力 , 慣性, 碰撞…
• 2D遊戲 Jelly car http://www.youtube.com/watch?v=qwbtkUwSufw
• Demo
• SampleTerrain.
• SampleSoftBody
• 基本原理
• 應該有 Xbox 用的版本, 但是還沒找到
37
nVIDIA PhysX
http://www.nvidia.com.tw
•
•
注意 : 必須安裝 Visual Studio 2008 C++ ( Express )注意是C++ 不是C Sharp!! 才能夠
正常編譯及執行 PhysX.Net 的範例
•
http://www.nvidia.com
•
•
•
•
•
•
1. 先裝 System Software
PhysX_9.09.0408_SystemSoftware.exe
2. 再裝 SDK
PhysX_SDK_2.8.1_build_13_for_PC.msi
3. PhysX.Net 範例
PhysX.Net_0.11.0.0\
http://physxdotnet.codeplex.com 必須詳讀此網頁的相依性說明
3. 裝 PhysX.Net 0.11.0.0 .Net Wrapper for NVidia's Physx library.
4. 網站上可以下載 Sample Code, PhysX.Net 目錄裡面也有
•
•
另外, 參考http://www.stilldesign.co.nz
VS2008 C#-XNA 中的 Project 必需含有額外的3 個項目
•
•
•
•
NxCharacter.dll
NxCooking.dll
PhysXLoader.dll
VS2008 中 做以下設定
•
•
Add StillDesign.PhysX.Net into refrence
Add NxCharacter.dll, NxCooking.dll and PhysXLoader.dll into the project
38
Kinematic model
Spherical joint
z0 z1 {0} {1}
運動學, 請參考
視覺化工程應用 Slides\lec11
y1
y0
θ1
y2
x1
Revolute joint
x0
{2}
d2
z2
x2
Prismatic joint
Cylindrical joint
Fixed joint
d3
Distance joint
{3} {4}
y4
y3
z3, z4
θ4 x3
x4
39
3D Model 工具軟體
• 3Ds Max
• Blender
• Google SketchUp
-> 輸出成為 fbx 檔
40
3D Model - Fbx檔
•
•
1. 可由 3DsMax, Google SketchUp 用 Export FBX 的方式
產生 FBX 檔
•
•
•
•
•
•
2. XNA 是 Y-Up, 3DsMax 內定是 Z-Up, 要設定一下
3. 有些奇怪的問題, 例如 Google SketchUp 的模型到了 3DsMax 少了一部份, 或材質不對
•
•
還是在Content 處選好, 在 XNA 內部樹狀結構拖進去
6. 程式中, Content.Load<Model>(@"ddd\fff.fbx")
•
•
•
•
7. XNA 規定材質圖檔長寬都必須要2 的次方( 64, 128,256 ... )用 PhotoShop 作放大縮小
8. 希望可以順利在 SketchUp 中建立, 3DsMax 中觀察修改與轉檔.
XNA 中使用
9. 如果可以的話, 使用 Embedded Material, 但在 3DsMax 使用此選項有問題
•
•
***
10. 手動把材質路徑改好之後, 進入3DsMax 調一下位置, 再重新 Export 成 FBX, 從XNA 中可
•
4. Export 成 ASCII( 非 Binary )再手動改材質檔的目錄, 目錄全部去掉, 留下檔名.
將外部圖檔都放在相同目錄下.
5. 如果檔案太雜, 在 XNA Project 中新建一個目錄, 不要直接右鍵點該目錄去選檔案, 應該
以直接使用, 不用再改一次.
41
3D Model 免費資源
• 網路下載免費資源
( Daily download credit : 15 )
http://www.3dxtras.com/ 必須先註冊一個帳號
42
3D Model 連結
SimuSurveyX
範例
43
Free FBX Viewer
• http://www.ozone3d.net/
• http://www.ozone3d.net/repository_lynx_lite_win32
_installer.php
• Download LynX Lite Edition
• open Content\Model_Other\tree10.fbx
44
天空 ( Sky sphere )
45
地形 ( Terrain )
• 使用現成地形範例
46
音效檔 ( 簡單 )
•
•
•
•
•
Audio01
Audio02
網路上有Free Audio 網站
XNA 提供很多現成音效檔案
最簡單的音效播放範例:
SoundEffect[] SndBird;
SndBird = new SoundEffect[3];
SndBird[0] = Content.Load<SoundEffect>(@"birds001");
SndBird[_rn].Play();
47
2D 圖檔
• 使用.png 檔, 可以鏤空和有透明度
• 例如: SimuSurveyX 的望遠鏡頭和雷達圖
• 宣告 Texture2D 載入圖檔
48
使用者控制介面 (User Interface )
• 介面種類
– Game Controller, 無線/ 有線
– Keyboard
– 其他
• 函數範例
• 調整大小, 與虛擬世界座標大小有關
• 按鍵對應
49
選單
50
使用者控制介面 (User Interface )
宣告
KeyboardState currentKeyboardState = new KeyboardState();
GamePadState currentGamePadState = new GamePadState();
掛在 Update() 裡面檢查按鍵狀態
protected override void Update(GameTime gameTime)d
{
HandleInput();
UpdateCamera(gameTime);
base.Update(gameTime);
}
詳細內容
private void HandleInput()
{
currentKeyboardState = Keyboard.GetState();
currentGamePadState = GamePad.GetState(PlayerIndex.One);
// Check for exit.
if (currentKeyboardState.IsKeyDown(Keys.Escape) ||
currentGamePadState.Buttons.Back == ButtonState.Pressed)
{
Exit();
}
}
51
使用 Shader
•
•
•
•
•
使3D Model 有動態變化
不佔用 CPU 效能, 交給GPU 處理
Example : Billboard ( CreatorsClub )
原理: 使用 2D Sptrite 代替 3D Model
說明檔
C:\Users\skc\Desktop\SimuSurvey\Examples\CreatorsClub\Billboar
d\BillboardSample\Billboard.htm
兩個重點
1. Content Importer
2. Effect File .fx
http://www.toymaker.info/Games/html/effects_files.html
52
HLSL
• 高級著色器語言(High Level Shader Language,簡稱HLSL),由
微軟擁有及開發的一種語言,只能供微軟的Direct3D使用。HLSL不
能與OpenGL標準兼容。他跟Nvidia的Cg非常相似。
• HLSL的主要作用為將一些複雜的圖像處理,快速而又有效率地在顯
示卡上完成,與組合式或低階Shader Language相比,能降低在編寫
複雜特殊效果時所發生編程錯誤的機會。
Example 彩色轉成灰階
sampler2D Texture0;
float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR
{
float4 _inColor = tex2D( Texture0, texCoord );
float gray = 0.3*_inColor.x + 0.59*_inColor.y + 0.11*_inColor.z;
float4 _outColor = float4(gray, gray, gray, 1.0);
return _outColor;
}
53
Shader
•
Shaders come in two flavours, vertex
shaders which allow the manipulation
of vertex data and pixel shaders which allow the manipulation of pixel data.
The shader code is loaded into the graphics card memory and plugged directly into
the graphics pipeline. Shader code is in assembly however nowadays there are a
number of higher level 'C' type languages that can be compiled down to the
assembly and making them much easier to program. Microsoft have HLSL (HighLevel Shading Language) for use with DirectX and OpenGL has the GLSL (OpenGL
Shading Language). Hardware vendors also provide some high level languages,
NVidia have Cg and ATI have ASHLI (Advanced Shading Language Interface).
54
Direct3D Pipeline
55
Vertex Shader
• A vertex shader is a graphics processing function used to add special
effects to objects in a 3D environment.
• Vertex shaders are run once for each vertex given to the graphics
processor. The purpose is to transform each vertex's 3D position in
virtual space to the 2D coordinate at which it appears on the screen (as
well as a depth value for the Z-buffer). Vertex shaders can manipulate
properties such as position, color, and texture coordinate, but cannot
create new vertices. The output of the vertex shader goes to the next
stage in the pipeline, which is either a geometry shader if present or
the rasterizer otherwise.
•
http://www.toymaker.info/Games/html/vertex_shaders.html
56
Pixel Shader
•
A pixel shader is a computation kernel function that computes color and other
attributes of each pixel. Pixel shaders range from always outputting the same
color, to applying a lighting value, to doing bump mapping, shadows, specular
highlights, translucency and other phenomena. They can alter the depth of
the pixel (for Z-buffering), or output more than one color if multiple render
targets are active. A pixel shader alone cannot produce very complex effects,
because it operates only on a single pixel, without knowledge of a scene's
geometry.
57
BasicEffect Shader
• XNA 內建簡單好用的 Shader
• XNA 範例中含 Source Code 及說明檔
• To use this shader, at minimum you must set the World, View,
and Projection matrix parameters, plus the EyePosition vector
parameter (which is specified in world space). This will
produce untextured, unlit, and flat color t riangles.
58
Effect Files (.fx)
• 用載入模型的的方式將. fx檔載入
• http://www.toymaker.info/Games/html/effects_files.html
• Wave Demo
• An effect file is a text file with a .fx extension. It is split into 3 main
sections:
1. Variable declarations - these are values that can be set before rendering
and then used in this effect file. Examples include: textures, world matrix,
lighting parameters
2. Functions - the shader code written in
3. Techniques & Passes- defines how something is to be rendered. It
includes state information along with vertex and shader declarations.
59
座標轉換
Draw()
effect.World = transforms[mesh.ParentBone.Index] *….
Effect.View =Matrix.CreateLookAt(…
Effect.Projection= MatrixCreatePerspectiveFieldOfView(…
移動
Matrix.CreateTranslation( new Vector3(1.0f, 1.0f, 1.0f))
轉動 –
Matrix.CreateRotationY(MathHelper.ToRadians(45.0f)
注意矩陣前後順序
• 縮放
• Matrix.CreateScale(0.01f)
•
•
•
•
•
•
•
60
使用現成特效 - 程式合併
• Billboard Pipeline加入專案
• Particle
61
輔助工具 XACT
• Program files(x86)/Microsoft XNA/XNA Game Studio/v3.1/Tools
– 先在XACT 準備所用到的聲音素材, 成為xap檔
– 在 Game 裡面加入現有項目( xap檔)
62
3D Sound Effect
angle += 0.01f; // rotate the emitter around a little bit
listener.Position = Vector3.Zero; // the listener just stays at the origin the whole time
emitter.Position = CalculateLocation(angle, distance); // calculate the location of the emitter
again
cue.Apply3D(
listener, emitter); // apply the 3D transform to the cue
63
3D Model 調整
•
•
•
•
3DsMax
大小調整
Boolean
連結物件
64
螢幕鍵盤 OnScreenKeyboard
• 用搖桿輸入名字或數字
• 將 DrawableGameComponent 加入專案
65
Avatar
•
•
•
•
•
•
•
必須在Xbox 360 才看的到
設定範例
avatarRenderer.World =
Matrix.CreateRotationY(MathHelper.ToRadians(180.0f));
avatarRenderer.Projection =
Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
GraphicsDevice.Viewport.AspectRatio,.01f, 200.0f);
avatarRenderer.View = Matrix.CreateLookAt(new Vector3(0, 1, 3),
new Vector3(0, 1, 0),
Vector3.Up);
avatarRenderer.Draw(avatarAnimation.BoneTransforms,
avatarAnimation.Expression);
66
Video
• Video Support in XNA Game Studio 3.1
• Demo
67
XNA 4.0
•
•
•
•
支援 Windows Phone 7
800 * 480 的解析度
多點觸控 (目前支援四點)
ARMv7 CPU
• Windows Phone 7 上的遊戲開發
– Silverlight (支援事件驅動)
– XNA
– XBOX Live (撰寫線上遊戲)
• Demo
•
http://chinese.engadget.com/2010/10/13/xbox-live-for-windows-phone-7-yourxbox-isnt-in-your-phone-yet/
68
輸入與輸出介面
• 3D Mouse 3Dconnexion SpaceNavigator
• 3D Display
加一行 graphics.IsFullScreen = true ; 支援 3D
69
Q&A
莊世坤
[email protected]
土木新館 611
70