電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
OpenGL入門教學(01)

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
還是零分
散播福音的祭司


註冊時間: 2007-09-19
文章: 164

653.83 果凍幣

發表發表於: 2008-6-26, PM 9:54 星期四    文章主題: OpenGL入門教學(01) 引言回覆

這論壇好像每隔一段時間就會有人問:c++要怎麼繪圖?不想看到黑底白字的視窗!之類的
證據=>
http://www.gamelife.idv.tw/viewtopic.php?t=145
http://www.gamelife.idv.tw/viewtopic.php?t=318
http://www.gamelife.idv.tw/viewtopic.php?t=570

所以.....我想說寫個OpenGL的簡易教學
給急著想用正常window視窗秀畫面的朋友參考看看(C++是預備知識喔)
順便討論討論

學OpenGL的好處不少
入門容易、能善用顯示卡的3D加速功能、改版動作小不用重學、應該學的很有價值才是

對於OpenGL我也是新手
看能寫到哪就算哪了
有哪裡想糾正或補充的儘管講

//================================================================================
//該死的期末考彼娘的終於結束了
//================================================================================


繪圖API:OpenGL
程式語言:C++
編譯器:Visual C++6.0還有DevC++
(使用VC++.net的做法與VC++6.0幾乎相同,不同的地方就隨機應變、依樣畫葫蘆吧)


由於OpenGL就只負責繪圖、使用顯示卡的功能
而window視窗的建立、鍵盤輸入、滑鼠輸入則要另外找幫手

一開始我會用GLUT來搞定
讓程式碼簡化很多
(關於GLUT這東西,同一個版上面的"[轉貼自程式設計俱樂部]glut 教學"也使用它來輔助OpenGL)

然後到後面會改用win32API而不用GLUT了
畢竟GLUT不是為Windows設計的
但是GLUT有點像腳踏車的輔助輪
剛開始起步的時候能幫上很大的忙
技術精進之後就嫌它多餘,拆了它
想學更屌的技巧時(例如把雙手放開)
又把輔助輪裝了回去


//================================================================================
//GLUT在Visual C++6.0還有DevC++下的環境設置
//================================================================================

>>Visual C++6.0的部分

GL.h
GLU.h
GLAUX.h
這三樣和它們的library在Visual C++6.0原本就有了
要另外找的只有GLUT

GLUT下載處(for Vsual C++)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

裡頭的glut.dll和glut.lib用不到
glut32.dll和glut32.lib以及glut.h才有用到

glut32.lib丟到C:\Program Files\Microsoft Visual Studio\VC98\Lib

glut.h丟到C:\Program Files\Microsoft Visual Studio\VC98\Include\GL

開啟一個Console專案
glut32.dll丟到你開的專案資料夾

以後每個GLUT程式專案的資料夾都要有一個glut32.dll
不想這樣的話也可以把glut32.dll丟到
C:\WINDOWS\system32
一勞永逸

--------------------------------------------------------------------------------

>>DevC++的部分

DevC++就省事多了,找個GLUT的Package就行了

tools>>Check for Updates\Packages

會有兩個server可選
Mirror那個好像不能用了

下載GLUT的Package之後
開新專案就有GLUT專案可選了

Flie>>New>>Project

跳出的視窗有三個標籤Basic、Introduction、MultiMedia
選MultiMedia就會看到GLUT了
!!不要選Basic下的Console喔!!

要改成繁中介面的話請到這裡

tools>>Environment Option

選Interface標籤就會看到了

//================================================================================
//A First Sample Code
//================================================================================

這個程式用Visual C++編譯會有console視窗和window視窗出現
用DevC++則只有window視窗,printf()的內容就沒得顯現了

程式碼只有少許註解
詳細說明會寫在下一篇的內容中

代碼:

//-----------------------------------------------------------------------------
//                                                              2008/6/26
//                          A First Sample Code
//                                                              by還是零分
//-----------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <GL\glut.h>//使用DevC++的話要改為標入 #include <GL\openglut.h>

void WindowSize(int , int );            //負責視窗及繪圖內容的比例
void Keyboard(unsigned char , int, int );   //獲取鍵盤輸入
void Display(void);                     //描繪

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
   glutInitWindowSize(400,400);         //視窗長寬
   glutInitWindowPosition(600,80);         //視窗左上角的位置
   glutCreateWindow("這裡是視窗標題");      //建立視窗
   
   //下面三個是用來指定Callback函數
   glutReshapeFunc(WindowSize);
   glutKeyboardFunc(Keyboard);
   glutDisplayFunc(Display);
   glutMainLoop();
   return 0;
}

void Display(void)
{
   glClearColor(1.0, 1.0, 1.0, 1.0);   //用白色塗背景
   glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   gluLookAt(0,0,10.0f,0,0,0,0,1,0);   //視線的座標及方向
   glBegin(GL_TRIANGLES);
      glColor3f( 1, 0, 0);glVertex3f( 8.6603, -5, 0);
      glColor3f( 0, 1, 0);glVertex3f(      0, 10, 0);
      glColor3f( 0, 0, 1);glVertex3f(-8.6603, -5, 0);
   glEnd();
   glutSwapBuffers();
}

void Keyboard(unsigned char key, int x, int y)
{
   printf("你所按按鍵的碼是%x\t此時視窗內的滑鼠座標是(%d,%d)\n", key, x, y);
}

void WindowSize(int w, int h)
{
   printf("目前視窗大小為%dX%d\n",w,h);
   glViewport(0, 0, w, h);            //當視窗長寬改變時,畫面也跟著變
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(-10,10,-10,10,-10,10);      //正交投影
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}


VC++_code_download

DevC++_code_download

程式碼只有少許註解
詳細說明會寫在下一篇的內容中



值得一去的好地方:

OpenGL官網的指令資料
http://www.opengl.org/sdk/docs/man/

有人想把上面的資料翻成中文,稱為綠色史萊姆計畫
其中有GLUT的資料,我在OpenGL官網並沒有看到這份資料
不過手邊不知道從哪裡A來了它的PDF檔(英文的)
http://www.hotlinkfiles.com/files/1517885_fakm6/glut-3.spec.pdf


NeHe
http://nehe.gamedev.net/
有詳細的教程,使用很多語言和編譯器,有C++、Jave、VB、C#、D語言、Delphi


某高手的個人網站,有替NeHe教程翻成中文版
http://www.geocities.com/SiliconValley/Vista/8177/index.html
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作