Wednesday, July 18, 2012

GRAFIC libraries

2012/07/19
做一個匯入3D模型之簡易動畫。

GRAFIC is a set of libraries of C and C++ callable routines for programming interactive
graphics applications on workstations and personal computers. Versions of the GRAFIC library are
available for workstations running X Windows™, Apple Macintosh™ PowerPC personal
computers, and Intel compatible personal computers running Microsoft Windows 95, 98 and NT.
Except for minor differences, the same source code will function as expected for these platforms
simply by re-compiling and linking with the appropriate GRAFIC library. The GRAFIC package
was developed to provide basic, cross-platform, multi-language support for programming windowbased
raster graphics applications without the complexities and language dependencies typical of
window graphics systems. The libraries can be accessed at URL www.cadlab.ecn.purdue.edu.
The next sections introduce the basic concepts for GRAFIC programming, followed by
descriptions of the routines. Information specific to programming using the Windows and
Macintosh versions of GRAFIC is provided in the closing sections.

1.
http://hungming.ct.ntust.edu.tw/
GRAFIC 是用來控制視窗,
利用GLUT需要設定步驟,
GLUT現在已經改為freeglut因此以前教學中glut32.lib全部要改為freeglut.lib,一些相關的連結檔案也要注意。

2.
已經可以跑出畫面,現在開始找功能強大以及可以匯入3DS模組的函式庫,
http://code.google.com/p/lib3ds/
可惜lib3DS說明文件太少,本身也未附帶函式之說明文件。

3.
嘗試使用開放源碼之3D引擎ORGE作為匯入3DS及建置場景之工具。
參考此篇網路文章所得ORGE之訊息
http://www.programmer-club.com/showSameTitleN/game/3494.html
以下ORGE首頁
http://www.ogre3d.org/
一篇中文教學網誌
http://chia0418.wordpress.com/2009/03/11/%E8%88%87ogre%E5%85%B1%E8%88%9E%EF%BC%9A%E7%AC%AC%E4%B8%80%E6%AD%A5%EF%BC%8C%E5%AE%89%E8%A3%9D-ogre-161-%E4%BD%BF%E7%94%A8-vc-20052008/

4.
授權分為BSD、MIT、GNU、GPL等等,ORGE是較為寬鬆的MIT license可以用

5.
匯入3DS失敗了,改成匯入OBJ檔案,先將3DS轉檔成OBJ
WINGS3D
匯入方法有以下教學
http://www.programmer-club.com/showsametitlen/opengl/1144.html
http://www.gamelife.idv.tw/viewtopic.php?t=211
http://lawlietmoon.pixnet.net/blog/post/27177462-%E8%AE%80obj%E6%AA%94(opengl,visual-c%2B%2B6.0)
貼出匯入範例程式檔如下

/////////////////////////
// glutTest08.cpp
//
// Created by Gary Ho, ma_hty@hotmail.com, 2005
//


#include <stdio.h>
#include <math.h>

#include "glut.h"

#include "glm.h"

#define G_PI 3.14159265358979323846f

void prepare_lighting();
void display();
void keyboard(unsigned char key, int x, int y);

float theta, phi;

GLuint list_id;

void main()
{
  theta = G_PI/2;
  phi = -G_PI/2;

  glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB );
  glutInitWindowSize( 640, 640 );
  glutCreateWindow( "glutTest08" );

  glutDisplayFunc(display);
  glutKeyboardFunc( keyboard );

  {
    GLMmodel *glm_model;
     glm_model= glmReadOBJ( "castle.obj" );
     glmUnitize( glm_model );
     glmScale( glm_model, .1 );
     glmFacetNormals( glm_model );
     glmVertexNormals( glm_model, 90 );

     list_id = glmList( glm_model, GLM_MATERIAL | GLM_SMOOTH );

     glmDelete( glm_model );
  }

  prepare_lighting();

  glutMainLoop();
}

void keyboard(unsigned char key, int x, int y)
{
  switch( key )
  {
    case 'w':
     theta -= .05;
     prepare_lighting();
     glutPostRedisplay();
    break;

    case 's':
     theta += .05;
     prepare_lighting();
     glutPostRedisplay();
    break;

    case 'a':
     phi -= .05;
     prepare_lighting();
     glutPostRedisplay();
    break;

    case 'd':
     phi += .05;
     prepare_lighting();
     glutPostRedisplay();
    break;
  };
}


void display()
{
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective( 20, 1, 0.1, 10 );

    glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     gluLookAt(
     0,0,1,
     0,0,0,
     0,1,0 );

    glEnable( GL_LIGHTING );
    glEnable( GL_DEPTH_TEST );
 
    glCallList( list_id );

  glutSwapBuffers();
}

void prepare_lighting()
{
  theta = fmodf( theta, 2*G_PI );
  phi = fmodf( phi, 2*G_PI );

  float light_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
  float mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
  float light_position[4] = { sinf(theta) * cosf(phi), cosf(theta), -sinf(theta) * sinf(phi), 0 };

  //glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  glEnable( GL_LIGHT0 );
}

6.弳度或弧度




單位弧度定義為圓弧長度等於半徑時的圓心角

7.發現一個很容易查GLUT函式的網站
http://msdn.microsoft.com/en-us/library/windows/desktop/dd318369(v=vs.85).aspx

8.

Saturday, September 24, 2011

管理資訊系統 周宣光譯
資訊科技與管理 Mclean 、Turban 等人合著,政大苑守慈老師審譯
資料庫:
Elmarsi and Navathe,Fundamentals of Database Systems

Sunday, September 18, 2011

[食玩]義大利麵食館-達文郡
好吃推薦,我自己去覺得很棒,異國情調的氣氛,吃個餐點跟朋友休憩聊天非常好。
這家店位於高雄市新興區民權街31號
電話:07226936

原文網址




Tuesday, August 23, 2011

繞送演算法大致有三種分類方法
第一種分類方法:以整體或分散分類
整體性繞送演算法(global routing algorithm)
分散式繞送演算法(decentralized)

第二種分類方法:以靜態或動態分類
靜態繞送演算法(static routing algorithm)
動態繞送算法(dynamic routing algorithm)

第三種分類方法:以負載敏感或非負載敏感分類
負載敏感演算法
非負載敏感演算法


Saturday, August 20, 2011

網路層:網路位址轉譯NAT(network address translation;NAT)[RFC2663;RFC3022]
對外部網路而言,啟動NAT功能的路由器的行動,就像是具有單一IP位址的單一裝置相同。NAT路由器會使用NAT轉譯表,改寫資料封包的目的端位址與目的端埠號,然後將外部WAN端的IP轉換為內部LAN端的IP,轉譯表除了包含IP位址外,亦包含對應之埠號。有IETF界學者認為,原本埠號的功能是用於主機內區別行程之定址(addressing processes),但NAT路由器卻將埠號用來做內部主機之定址(addressing hosts),應該使用IPV6來處理位址不足的問題,而非魯莽的使用NAT來修改封包,破換網路架構之規則。無論狀況如何,NAT已經成為網際網路的一個重要的技術元件。NAT也會妨礙P2P應用之運作,P2P技術的重點在於,每個點是客戶端亦為伺服端,但位於NAT後方之主機無法成為伺服端,外部送達之請求NAT無法得知要傳送至哪台內部主機,要透過一些技術(反向連線connection reversal)利用第三方來達成連接。

Thursday, August 18, 2011

網路層:資料封包的分段
當目的主機從相同的來源端到一連串資料封包時,必須判斷者皆資料封包中是否有任何屬於某個原始的,較大的資料封包分段。如果某些資料封包是資料分段,則他必須進一步判斷何時收到了最後一份分段,以及應該如何將所收到的分段重組回原本的資料封包。為了讓目的主機能夠進行這些重組工作,IPV4在IP資料封包的標頭加入了識別碼、旗標、以及分段偏移量欄位。在建立資料封包時,傳送端主機會在資料封包上標記一個識別碼,以及來源端與目的端位址。通常,傳送端主機每送出一個封包,就會將識別碼遞增。當路由器需要分段資料封包時,所有產生的資料封包(即分段)都會被標記以來源端、目的端的位址,和原始資料封包的識別碼。當目的端受到來自相同傳送端主機的一連串資料封包時,他可以檢查這些資料封包的識別碼,以判斷那些資料封包實際上是屬於同一個較大資料封包的分段。因為IP是不可靠的服務,所以可能會有一或多個分段永遠無法地達目的地。因此為了讓目的端主機可以完全確定已經收到原始資料封包的最後一個分段最後一個分段的旗標位元會被設定為0,而其他分段的旗標位元則會被標示為1,為了讓目的地可以判斷是否有分段遺失了(也為了讓他能依照原來的順序重組這些分段),偏移量欄位會被用來標記該分段位於原始IP資料封包中的位置。


版本
標頭長度
服務類型
資料封包長度(位元組)
16位元識別碼
旗標
13位元分段偏移量
生存期
上層協定
標頭檢查和
32位元來源端IP位址
32位元目的端IP位址
選項(可無)
資料
表1.1資料封包格式

IP傳輸實例討論:
設一4000位元組資料封包(20位元組為IP表頭加上3,980位元組資料內容)抵達路由器,並須轉送往一條MTU為1,500位元組的連結。原始資料封包的3,980資料位元組,必須被分隔成三個個別的分段(每個分段也都是IP資料封包),假設原始資料封包所標記的識別碼為777。

分段
位元組
ID
偏移量
旗標
第一個分段
IP資料封包的欄位有1,480位元組
 識別碼777
 偏移量0(0表示資料應放入位元組0開始的位置)
 旗標=1(表示還有別的資料)
第二個分段
IP資料封包的欄位有1,480位元組
 識別碼777
 偏移量185(表示資料應放入位元組1,480開始的位置,註185*8=1,480)
 旗標=1(表示還有別的資料)
第三個分段
IP資料封包的欄位有(3,980-1,480-1,480)位元組
 識別碼777
偏移量370(表示資料應該要放入位元組2,960開始的位置,註:370*8=2,960)
 旗標=0(表示這是最後一份資料)

表1.2實例討論

Thursday, August 11, 2011

參考資料:電腦網際網路第四版 全華圖書有限公司

網路層之網路服務模型:
傳輸層將封包交給網路層時,網路層可能提供的服務包括:
◎傳送保證(guaranteed delivery):這項服務保證封包最後一定達目的地
◎有限延遲傳送保證(guaranteed delivery with bounded delay):保證不僅封包能成功送達,而且會在某個主機到主機延遲時間上限內送達。
網路層也可能提供下列服務給來源端目的端之間的封包流:
◎依順序的封包傳送(in-order packet delivery):保證封包會依照送出的順序抵達目的端
◎最低頻寬保證(guaranteed minimal bandwidth):保證在傳送端與接受端主機間模擬出具有特定位元傳輸速率的傳輸連結,只要傳送端主機傳輸位元的速率小於此特定位元傳輸速率,就無封包遺失,且每一個封包都會在預先指定的主機到主機延遲時間內到達。
◎最大時基誤差保證(guaranteed maximum jitter):這項服務保證傳送端連續傳送兩個封包時間間隔,會等同於他們抵達目的端的時間間隔(或保證此一變化小於某一個值)。
◎安全性服務:利用只有來源主機與目的主機知道的秘密會談鍵值,來源主機的網路層可以將所有要送往目的主機的資料封包內容加密。目的主機的網路層接著會負責將這些內容解密。透過這想服務,可以提供機密性給所有來源主機與目的主機之間傳送的傳輸層區段。除機密性外,網路層亦可提供資料完整性與來源端確認。

Sunday, July 31, 2011

轉載自這裡


Nothing's gonna change my love for you   Glenn Medeiros

If I had to live my life without you near me
The days would all be empty
The nights would seem so long
And with you I see forever oh so clearly
I might have been in love before
But it never felt this strong
Our dreams are young and we both know
They'll take us where we want to go
Hold me now, touch me now
I don't want to live without you

*Nothing's gonna change my love for you
You ought to know by now how much I love you
One thing you can be sure of
I'll never ask for more than your love
Nothing's gonna change my love for you
You ought to know by now how much I love you
The world may  change my whole life thru but
Nothing's gonna change my love for you

If the road ahead is not so easy
Our love will lead a way for us
Like a guiding star
I'll be there for you if you should need me
You don't have to change a thing
I love you just the way you are
So come with me and share the view
I'll help you see forever too
Hold me now, touch me now
I don't want to live without you
對妳的愛永遠不變 
葛倫麥德羅斯

如果我必須沒有你而活下去
日子將會是一片空白
夜晚將顯得漫長
有了你,我清楚的看見永恆
從前我也曾談戀愛
但不曾感覺這麼強烈
我倆的夢未央,且我們都明白
它們將帶我倆到心嚮往的地方
擁抱我,觸摸我
我不想沒有你而活下去

對你的愛永遠不變
現在,你應該明白我有多麼愛你
有一件事你可以確定
我絕不要求你更多的愛
對你的愛永遠不變
如今,你應該明白我有多麼愛你
你改變了我的一生
對你的愛永不渝

如果前方的路不好走
愛將為我們指引一條出路
像一顆導航的星
若你需要我,我就在你身旁
你不必改變什麼
我就是愛你現在的樣子
跟我來,分享這個景致
我將幫你也看見永恆
擁抱我,觸摸我
我不想沒有你而活下去