還是零分 散播福音的祭司
註冊時間: 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 |
|