锘??xml version="1.0" encoding="utf-8" standalone="yes"?> glut.h鐨勬枃浠跺唴瀹?/span>浜庢槸錛?br> Note that the __glut*WithExit routines should NEVER be called directly.
顥ヮ棩GLUT.LIB (SGI windows鐗堟湰) 浠ュ強 glut32.lib (寰蔣鐗堟湰) - 榪欎釜鏂囦歡蹇呴』琚繛鎺ュ埌浣犵殑紼嬪簭涓? 紜繚瀹冩斁鍦?LIB 鐩綍涓?
顥ヮ棩glut32.dll (Windows) 鍜?glut.dll (SGI Windows鐗堟湰) - 鏍規嵁浣犳墍浣跨敤鐨凮penGL閫夋嫨涓涓? 濡傛灉浣犳鍦ㄤ嬌鐢ㄥ井杞叕鍙哥殑鐗堟湰, 閭d箞浣犲繀欏婚夋嫨 glut32.dll. 浣犲簲璇ユ妸DLL鏀劇疆鍦ㄤ綘鐨勭郴緇熸枃浠跺す涓?br>顥ヮ棩璁劇疆Visual C/C++ 6.0
顥ヮ棩Visual C/C++鐨勫伐紼嬫湁涓や釜閲嶈閫夐」: Console (鎺у埗鍙? 鍜?Win32. 搴旂敤紼嬪簭灝嗕細鏈変袱涓獥鍙? 涓涓帶鍒跺彴紿楀彛, 浠ュ強涓涓?OpenGL 紿楀彛. 閫夋嫨 Win32 浠嶇劧鍙互璁╀綘鍦ㄤ笉闇瑕佸叧蹇僕indows紼嬪簭璁捐鐨勬儏鍐典笅緙栧啓 GLUT 紼嬪簭. 浣犻渶瑕佸仛浠ヤ笅璁劇疆:
顥ヮ棩閫夋嫨 Project -> settings
顥ヮ棩閫夋嫨 Link 閫夐」鍗?
顥ヮ棩浠?Category 涓夋嫨 Output
顥ヮ棩鍦?Entry-point synmbol 鏂囨湰妗嗕腑閿叆 mainCRTStartup
顥ヮ棩瀵逛簬宸插瓨鍦ㄧ殑鎺у埗鍙板伐紼? 鏈変竴涓畝鍗曠殑鍔炴硶灝嗗畠杞崲鎴怶in32搴旂敤紼嬪簭:
顥ヮ棩鏍規嵁涓婇潰鐨勬楠や慨鏀瑰叆鍙g偣
顥ヮ棩鍦?Project options 鏂囨湰妗嗕腑鐢?subsystem:windows 瑕嗙洊 subsystem:console
顥ヮ棩鎴栬呬綘鍙互鐩存帴鍦ㄤ綘鐨勬簮浠g爜寮澶村娣誨姞:
顥ヮ棩顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩// #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
顥ヮ棩顥ヮ棩
顥ヮ棩娉ㄦ剰: 榪欐槸涓琛屾敞閲婎棩顥?br>顥ヮ棩濡傛涓鏉? 搴旂敤紼嬪簭灝變笉浼氬嚭鐜版帶鍒跺彴紿楀彛, 鑰屽彧鏄竴涓?OpenGL 紿楀彛浜? 鍦╒isual C/C++ 涓綘闇瑕佷竴涓嬫楠ゆ潵榪炴帴涓涓?GLUT 紼嬪簭:
顥ヮ棩閫夋嫨 Proejct/Settings
顥ヮ棩閫夋嫨 LINK 閫夐」鍗?
顥ヮ棩娣誨姞涓涓嬫枃浠跺埌 Object/library: opengl32.lib glut32.lib glu32.lib
顥ヮ棩璇鋒敞鎰? 鎴戝悓鏃舵坊鍔犱簡glu32.lib 鍜?opengl32.lib. 浠栦滑鏄爣鍑哋penGL搴?
顥ヮ棩
顥ヮ棩濂界殑,鐜板湪涓鍒囧噯澶囧氨緇? 鎴戜滑鍙互寮濮嬬紪鍐?GLUT 搴旂敤紼嬪簭浜? 濡傛灉鏈変換浣曚笉娓呮鐨勫湴鏂? 璇鋒偍鍛婅瘔鎴? 鎮ㄧ殑鍥為闈炲父涔嬮噸瑕?
顥?br>顥ヮ棩鍦ㄨ繖涓鑺備腑, 鎴戜滑灝嗕細寤洪犲簲鐢ㄧ▼搴忕殑涓誨嚱鏁?main function). 涓誨嚱鏁板皢浼氬皢浼氬畬鎴愮▼搴忕殑鍒濆鍖栧茍鍚姩浜嬩歡澶勭悊寰幆. 鎵鏈夊嚱鏁伴兘鏈変竴涓墠緙 glut , 鍒濆鍖栧嚱鏁扮殑鍓嶇紑鏄?glutInit. 鎴戜滑棣栧厛蹇呴』璋冪敤鍑芥暟 glutInit.
顥ヮ棩顥?br>顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void glutInit(int *argc, char **argv);
顥ヮ棩//鍙傛暟:
顥ヮ棩//argc - 涓涓寚鍚戜富鍑芥暟 argc 鍙橀噺鐨?鏈粡淇敼 鐨勬寚閽?
顥ヮ棩//argv - 涓涓寚鍚戜富鍑芥暟 argv 鍙橀噺鐨?鏈粡淇敼 鐨勬寚閽?
顥ヮ棩 顥ヮ棩
顥ヮ棩鍒濆鍖?GLUT 鏈韓浠ュ悗, 鎴戜滑灝嗕細瀹氫箟鎴戜滑鐨勭獥鍙? 棣栧厛, 鎴戜滑寤虹珛紿楀彛鐨勪綅緗? 渚嬪: 鍦ㄧ獥鍙g殑宸︿笂瑙? 瑕佸疄鐜拌繖涓姛鑳? 鎴戜滑闇瑕佽皟鐢ㄥ嚱鏁?glutWindowsPosition.
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void glutInitWindowPosition(int x, int y);
顥ヮ棩//鍙傛暟:
顥ヮ棩//x- 璺濈灞忓箷宸﹁竟鐨勫儚绱犳暟. 榛樿鍊兼槸 -1, 鐢盬indows緋葷粺鍐沖畾紿楀彛鐨勪綅緗? 濡傛灉娌℃湁娌℃湁閲囩敤榛樿鍊? 閭d箞浣犲簲璇ヤ嬌鐢ㄤ竴涓悎閫傛鍊間綔涓哄疄鍙?
顥ヮ棩//y- 璺濈灞忓箷灞忓箷欏剁鐨勫儚绱犳暟, 鍏朵綑鍚屼笂.
顥ヮ棩璇鋒敞鎰? 榪欎簺鍙傛暟鍙槸緇欑獥鍙g鐞嗗櫒鐨勪竴涓緩璁? 鎴戜滑鍒涘緩鐨勭獥鍙e彲鑳戒細澶勪簬涓嶅悓鐨勪綅緗笂, 涓嶈繃榪欏緢灝戝彂鐢? 鎺ヤ笅鏉ユ垜浠鍐沖畾紿楀彛鐨勫ぇ灝? 涓轟簡鍋氬埌榪欎竴鐐? 鎴戜滑闇瑕佷嬌鐢ㄥ嚱鏁?glutInitWindowSize.
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void glutInitWindowSize(int width, int height);
顥ヮ棩鍙傛暟:
顥ヮ棩width - 紿楀彛鐨勫搴?br>顥ヮ棩height - 紿楀彛鐨勯珮搴?br>顥ヮ棩
顥ヮ棩鍚屾牱鐨? 楂樺拰瀹戒篃鍙槸涓涓緩璁? 璇烽伩鍏嶄嬌鐢ㄨ礋鍊?
顥ヮ棩鐒跺悗鎴戜滑闇瑕佸畾涔夋樉紺烘ā寮? 鎴戜滑浣跨敤 glutInitDisplayMode 鍑芥暟.
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void glutInitDisplayMode(unsigned int mode)
顥ヮ棩鍙傛暟:
顥ヮ棩mode - 鎸囧畾鏄劇ず妯″紡顥?br>顥ヮ棩//mode 鍙傛暟鏄竴涓?GLUT 棰勫畾涔夊父鏁扮殑澶嶅悎甯冨皵鍨?(浣嶆垨). 浣犲彲浠ヤ嬌鐢?mode 鏉ユ寚瀹氶鑹? 浠ュ強緙撳啿鍖虹殑鏁伴噺鍜岀被鍨?
顥ヮ棩
顥ヮ棩榪欎簺甯告暟鏄?
顥ヮ棩GLUT_RGBA or GLUT_RGB - 榛樿棰滆壊妯″紡
顥ヮ棩GLUT_INDEX - 棰滆壊绱㈠紩(?) 妯″紡
顥ヮ棩
顥ヮ棩鏄劇ず妯″紡鍏佽浣犻夋嫨鍗曟垨鍙岀紦鍐插尯紿楀彛. 鐩稿叧甯告暟鏄?
顥ヮ棩GLUT_SINGLE - 鍗曠紦鍐插尯紿楀彛
顥ヮ棩GLUT_DOUBLE - 鍙岀紦鍐插尯, 騫蟲粦鍔ㄧ敾闇瑕?br>顥ヮ棩
顥ヮ棩榪欓噷榪樻湁鏇村鍏充簬緙撳啿鍖虹殑甯告暟:
顥ヮ棩GLUT_ACCUM - 鑱氶泦緙撳啿鍖?
顥ヮ棩GLUT_STENCIL - The stencil buffer (...緲昏瘧涓嶅嚭鏉?
顥ヮ棩GLUT_DEPTH - 娣卞害緙撳啿鍖?br>顥ヮ棩
顥ヮ棩鐜板湪, 鍋囧浣犳兂瑕佸垱寤轟竴涓猂GB紿楀彛, 鍗曠紦鍐蹭互鍙婁竴涓繁搴︾紦鍐插尯. 浣犻渶瑕佹妸鐩稿叧鐨勫父鏁板幓 OR 鍦ㄤ竴璧鋒潵鍒涘緩涓涓紜殑甯稿彛
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩...
顥ヮ棩glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT DEPTH);
顥ヮ棩...顥?br>顥ヮ棩緇忚繃浠ヤ笂姝ラ, 鎴戜滑鍙互璋冪敤 glutCreateWindow 鍑芥暟浜?br>顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩int glutCreateWindow(char *title);
顥ヮ棩
顥ヮ棩鍙傛暟:
顥ヮ棩title - 紿楀彛鏍囬
顥ヮ棩
顥ヮ棩glutCreateWindows 鍑芥暟鐨勮繑鍥炲兼槸绱㈠垱寤虹獥鍙g殑鏍囩ず絎? 浣犱互鍚庝細鐢ㄥ埌榪欎釜鏍囩ず絎?
顥ヮ棩鐜板湪, 鎴戜滑鎶婁笂闈㈢殑浠g爜闆嗗悎璧鋒潵, 鐪嬬湅涓嬈″畬鏁寸殑紿楀彛鍒濆鍖?
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩#include
顥ヮ棩
顥ヮ棩void main(int argc, char **argv) {
顥ヮ棩glutInit(&argc, argv);
顥ヮ棩glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
顥ヮ棩glutInitWindowPosition(100,100);
顥ヮ棩glutInitWindowSize(320,320);
顥ヮ棩glutCreateWindow("3D Tech- GLUT Tutorial");
顥ヮ棩}
顥ヮ棩
顥ヮ棩璇鋒敞鎰忓寘鍚枃浠? 鎴戜滑闇瑕?GLUT 鐨勫寘鍚枃浠?
顥ヮ棩
顥ヮ棩濡傛灉浣犺繍琛屼簡榪欐浠g爜, 閭d箞浣犲皢鐪嬪埌涓涓粦鑹茬殑鎺у埗鍙扮獥鍙? 浣嗘槸娌℃湁浠諱綍OpenGL紿楀彛, 鍑犵閽熶互鍚? 榪欎釜紿楀彛涔熸秷澶變簡. 鍦ㄦ垜浠紑濮嬫覆鏌撲箣鍓?鎴戜滑榪樿鍋氫袱浠朵簨鎯? 棣栧厛鏄憡璇?GLUT 緋葷粺璐熻矗娓叉煋鐨勫嚱鏁?
顥ヮ棩鎴戜滑鏉ュ垱寤轟竴涓覆鏌撳嚱鏁扮殑渚嬪瓙. 榪欎釜鍑芥暟灝嗕細娓呯┖棰滆壊緙撳啿鍖? 騫剁敾鍑轟袱涓笁瑙掑艦:
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void renderScene(void) {
顥ヮ棩glClear(GL_COLOR_BUFFER_BIT);
顥ヮ棩glBegin(GL_TRIANGLES);
顥ヮ棩 glVertex3f(-0.5,-0.5,0.0);
顥ヮ棩 glVertex3f(0.5,0.0,0.0);
顥ヮ棩 glVertex3f(0.0,0.5,0.0);
顥ヮ棩glEnd();
顥ヮ棩glFlush();
顥ヮ棩}
顥ヮ棩
顥ヮ棩浣犲彲浠ョ粰鍑芥暟璧蜂換鎰忕殑鍚嶅瓧. 鐒惰? 浣犲繀欏誨憡璇?GLUT 鏉ヤ嬌鐢ㄨ繖涓嚱鏁拌繘琛屾覆鏌? 榪欏彨鍋?娉ㄥ唽鍥炲彨(callback) 鍑芥暟. GLUT 灝嗕細鍦ㄩ渶瑕佹覆鏌撶殑鏃跺欏懠鍙繖涓嚱鏁? 鐜板湪鎴戜滑鏉ュ憡璇?GLUT 涓鏃︽垜浠殑紿楀彛琚牬鍧?娉ㄦ剰: 褰撶獥鍙g涓嬈¤鍒涘緩鐨勬椂鍊? 榪欎釜鍑芥暟涔熶細琚懠鍙?
顥ヮ棩, 灝辮皟鐢╮enderScene鍑芥暟. GLUT 涓湁涓涓嚱鏁版帴鍙椾竴涓嚱鏁版寚閽堜綔涓哄弬鏁? 瀹冨皢榪欎釜鎸囬拡鎸囧悜鐨勫嚱鏁頒綔涓烘覆鏌撳嚱鏁?
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void glutDisplayFunc(void (*func)(void));
顥ヮ棩鍙傛暟:
顥ヮ棩func - 娓叉煋鍑芥暟鎸囬拡, NULL鍦ㄨ繖閲岄潪娉?
顥ヮ棩
顥ヮ棩One last thing missing, that is telling GLUT that we're ready to get in the application event processing loop. GLUT provides a function that gets the application in a never ending loop, always waiting for the next event to process. The GLUT function is glutMainLoop, and the syntax is as follows:
顥ヮ棩
顥ヮ棩鎴戜滑鏈鍚庤鍋? 灝辨槸璁╃▼搴忚繘鍏ヤ簨浠跺鐞嗗驚鐜? GLUT 緇欐垜浠噯澶囦簡涓涓嚱鏁版潵浣跨▼搴忚繘鍏ヤ竴涓棤闄愬驚鐜?姝誨驚鐜?, 姘歌繙鍦ㄧ瓑寰呬笅涓涓渶瑕佸鐞嗙殑浜嬩歡. 榪欎釜鍑芥暟灝辨槸 glutMainLoop:
顥ヮ棩
顥ヮ棩浠g爜
顥ヮ棩
顥ヮ棩void glutMainLoop(void)
顥ヮ棩
顥ヮ棩The code so far is presented bellow. Note that we've added an include statement in order to start using standard OpenGL functions, like glClear, glBegin, glVertex3f, and glEnd.
顥ヮ棩
顥ヮ棩浠ヤ笅鏄畬鏁寸殑浠g爜. 鎴戜滑娣誨姞浜嗕竴涓柊鐨勫寘鍚枃浠? 浠ヤ究浜庢垜浠嬌鐢∣penGL鐨勫嚱鏁? 姣斿 glClear, glBegin, glVertex3f 鍜?glEnd.
顥ヮ棩
顥ヮ棩濡傛灉浣犺繍琛岃繖浣犲皢浼氱湅鍒頒竴涓帶鍒跺彴紿楀彛, 鐒跺悗鏄竴涓敾鏈夌櫧鑹蹭笁瑙掑艦OpenGL紿楀彛
浠g爜
#include "gl/glut.h"
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glFlush();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
glutDisplayFunc(renderScene);
glutMainLoop();
}
銆併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併併?br>杞嚜錛?a >http://blog.tianya.cn/blogger/post_show.asp?BlogID=80680&PostID=2276189&idWriter=0&Key=0
鍑虹幇鏃犳硶瑙f瀽絎﹀彿錛?br>
To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK.
鍦?include <GL/glut.h>鍓嶉潰鍔犱笂浜嗕竴鍙ワ細
#define GLUT_DISABLE_ATEXIT_HACK
鍙傝僄LUTAPI錛?a >http://www.opengl.org/documentation/specs/glut/spec3/spec3.html
GLUTFrame瀹炰緥涓嬭澆
void ILGameModule::getWorldPos( int x, int y, vec3& vWorld )
{
JFIX vx = (JFIX)x;
JFIX vy = (JFIX)camera->viewport.h - y;
JFIX winz = 0.f;
glReadBuffer(GL_FRONT);
glReadPixels( (JINT)vx, (JINT)vy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT ,&winz );
//winz = getWinDepth( camera, 1.f );
GLdouble model[ 16 ];
GLdouble project[16];
mat4 matView = camera->modelView.transpose();
mat4 matProj = camera->projection.transpose();
JFIX* pm = matView.ptr();
JFIX* pj = matProj.ptr();
for( int i = 0; i < 16; i++ )
{
model[i] = (GLdouble)(pm[i]);
project[i] = (GLdouble)(pj[i]);
}
GLdouble lx,ly,lz;
gluUnProject( vx, vy, winz, model,project,(int*)&camera->viewport, &lx, &ly, &lz );
vWorld.x = (JFIX)lx;
vWorld.y = (JFIX)ly;
vWorld.z = (JFIX)lz;
}
姹傚嚭鐨勪笘鐣屽潗鏍嘙S涓嶇鍚堟垜浠殑瑕佹眰錛屼緥濡傛垜鐐瑰嚮浜嗕笘鐣屽潗鏍囩殑鐐瑰嚮灞忓箷(sx,sy),鍒╃敤getWorldPos榪樺師鍚庣殑涓栫晫鍧愭爣涓猴紙100錛?00錛?0 錛夛紝鍦紙100錛?00錛?0錛夎繖涓偣鐢繪ā鍨嬶紝
鐨勭‘鍦ㄩ紶鏍囩偣鍑諱綅緗紝闂鍑虹幇浜? 榪樺師鍚庣殑涓栫晫鍧愭爣Z = 20,浣嗘槸鎴戜滑鐢葷殑鐗╀綋鐨勯珮搴﹁姹傛槸0鐨勮瘽錛岀揣璐村湴闈紝浼氬嚭鐜版ā鍨嬫誕絀?br> 浠呬粎灝哯=0錛屽嵈浣垮緱鐐瑰嚮浠夸經鍋忕Щ浜?br>
鎴戜滑闇瑕佺煡閬撳湪鎷i夊皠綰垮拰鎴戜滑鎯蟲寚瀹氱殑楂樺害闈紙濡俍=0闈級鐨勪氦鐐癸紝榪欎釜浜ょ偣鍙畾涔熷湪鎷i夊皠綰夸笂 vIntersection = vWorld + vOffset;
鍗沖湪鎴戜滑寰楀埌鐨勪笘鐣屽潗鏍囧熀紜涓婏紝鍔犱笂鎷i夊皠綰跨殑涓涓亸縐誨煎氨寰楀埌浜嗘垜浠殑浜ょ偣錛圶', Y', 0 錛?br>
//vWorld涓栫晫鍧愭爣 PLANE_Z Z騫抽潰, Z=0騫抽潰,榪斿洖鍜屽綋鍓嶉潰鐩鎬氦鐨勪氦鐐?/span>
snapWorldPos( vWorld, PLANE_Z, 0, &vWorld );
void ILGameModule::snapWorldPos( vec3& vWorld, JINT nPlane, JFIX dist, vec3* pOut ) // dist灝辨槸褰撳墠鐩鎬氦鐨勯潰錛屼互鍚庝篃鍙互浼犲叆褰撳墠鍦板艦鐨勯珮搴etHeight(vWorld)
{
vec3 vdir = camera->pos - vWorld;
vdir.normalise();
vec3 vPlane;
switch( nPlane )
{
case PLANE_X: vPlane = vec3( 1,0,0 ); break;
case PLANE_Y: vPlane = vec3( 0,1,0 ); break;
case PLANE_Z: vPlane = vec3( 0,0,1 ); break;
}
JFIX rate;
JFIX nf = vdir.dot(vPlane);
if ( nf == 0.f ) rate = 0.f;
else
rate = ( 1000+ dist - vWorld.dot(vPlane) )/nf;
if ( pOut )
{
vdir *= rate;
*pOut = vWorld + vdir;
}
}
欏?闇?錛堟姹夌悊宸ュぇ瀛?璁$畻鏈虹郴 涓闄㈡櫤鑳借璁′笌鏅鴻兘鍒墮犵爺絀舵墍 婀栧寳姝︽眽 430070錛?br>鎽樿錛圓bstract錛夛細
鏈枃鎻愬嚭騫跺疄鐜頒竴縐嶇敤浜庝笁緇村潗鏍囨嫞閫夌殑RIP錛圧ay-Intersection-Penetration錛夋柟娉曘備粙緇嶄簡濡備綍鍦ㄥ凡緇忔覆鏌撹嚦紿楀彛鐨勪笁緇村満鏅?br>涓紝浣跨敤榧犳爣鎴栬呯浉鍏寵澶囨嫞閫夌壒瀹氫笁緇村璞$殑鏂規硶銆傛鏂規硶瀵逛簬姝d氦鎶曞獎鎴栭忚鎶曞獎鍧囨湁鏁堬紝鐩稿浜嶰penGL鑷甫鐨勯夋嫨涓庡弽棣堟満鍒訛紝鏈柟娉曟棤璁烘槸鎷i夌簿搴?br>榪樻槸綆楁硶瀹炵幇鏁堢巼鍧囬珮鍑鴻澶氾紝鏄竴縐嶆瘮杈冮氱敤鐨勮В鍐蟲柟妗堛傚叧閿瘝錛圞eywords錛?姝d氦鎶曞獎錛圤rtho-Projection錛夈侀忚鎶曞獎錛圥erspective-Projection錛?br>涓栫晫鍧愭爣緋匯佸睆騫曞潗鏍囩郴銆佷笁緇存嫞閫夈丱penGL
涓銆佺畝浠嬶紙Introduction錛?br>OpenGL鏄竴縐嶆瘮杈?#8220;綰補”鐨?D鍥懼艦API錛屼竴鑸粎鐢ㄤ簬涓夌淮鍥懼艦鐨勬覆鏌擄紝瀵逛簬鐗瑰畾棰嗗煙鐨勫紑鍙戣咃紙濡傛父鎴忓紑鍙戣咃級鑰岃█錛屽鏋滈夋嫨浣跨敤
OpenGL榪涜寮鍙戯紝綾諱技紕版挒媯嫻嬬殑鏈哄埗灝遍兘闇瑕佽嚜琛岀紪鍐欎簡銆備絾鏄敱浜庨紶鏍囧湪鍥懼艦紼嬪簭涓殑搴旂敤闈炲父闈炲父涔嬪箍娉涳紙渚嬪鐜板湪宸茬粡寰堝皯鏈塒C娓告垙鑳藉畬鍏ㄥ湴鑴辯
榧犳爣錛夛紝OpenGL鍦ㄥ浘褰㈠簱鐨勫熀紜涓婃坊鍔犱簡閫夋嫨涓庡弽棣堟満鍒訛紙Select &
Feedback錛夋潵婊¤凍鐢ㄦ埛浣跨敤榧犳爣瀹炴椂鎿嶄綔涓夌淮鍥懼艦鐨勯渶瑕併備絾鐢變簬縐嶇鍘熷洜錛屾垜浠渶瑕佹洿涓虹壒孌婄殑閫夋嫨鏈哄埗浠ユ弧瓚崇壒瀹氶渶姹傦紝鍦ㄨ繖閲屾垜浠彁鍑轟簡涓縐嶇畝鍗曡繀
閫熺殑RIP錛圧ay-Intersection-Penetration錛夋柟娉曪紝鍙互婊¤凍緇濆ぇ澶氭暟鍏稿瀷搴旂敤鐨勯渶瑕併?br>浜屻佺浉鍏崇爺絀訛紙Related Work錛?鐢ㄨ繃OpenGL閫夋嫨涓庡弽棣堟満鍒剁殑寮鍙戣咃紝鎴栧鎴栧皯鍙兘閮戒細瑙夊緱瀹冮毦浠ヤ護浜烘弧鎰忋傚ぇ鑷磋〃鐜板湪涓嬮潰鍑犱釜鏂歸潰錛?br>涓銆?緙栧啓紼嬪簭姣旇緝綣佺悙銆?br>鎯寵浣跨敤閫夋嫨鍙嶉鏈哄埗灝遍渶瑕佸垏鎹㈡覆鏌撴ā寮忥紝鎿嶄綔鍛藉悕鍫嗘爤錛岃綆楁嫞閫夌煩闃碉紝媯鏌ラ変腑璁板綍錛岃繖浜涚箒鐞愮殑姝ラ寰堝鏄撳嚭閿欙紝鑰屼笖闈炲父涓嶄究浜庤皟璇曪紝鍙細闄嶄綆宸ヤ綔鏁堢巼鍜岀儹鎯呫備簩銆?鍙兘鍋氬熀浜庡浘鍏冪殑閫夊畾銆?br>濡?br>涓嬪浘錛? – a錛夛紝浣跨敤GL_TRIANGLES緇樺埗浜嗕竴涓笁瑙掑艦錛屼笁涓《鐐瑰垎鍒負
P1銆丳2鍜孭3銆傝嫢浣跨敤璇ユ満鍒訛紝浣犲皢鍙兘鍒ゆ柇鏄惁鍦ㄤ笁緇村満鏅腑閫変腑浜嗚繖涓笁瑙掑艦錛堢敤鎴風偣鍑誨鏄惁鍦≒1銆丳2鍜孭3鐨勮寖鍥村唴錛夛紝鑰屾棤娉曞垽鏂敤鎴鋒槸鐐瑰嚮浜?br>榪欎釜涓夎褰㈠摢涓閮ㄥ垎錛堟槸宸﹁竟鐨刴鍖哄煙鍐呰繕鏄彸杈圭殑n鍖哄煙鍐咃級錛屽洜涓烘墍緇樺埗鐨凱1銆丳2鍜孭3鏈韓鏋勬垚鐨勪笁瑙掑艦灝辨槸涓涓熀鏈浘鍏冿紝瀵逛簬鎷i夋満鍒惰岃█鏄笉鍙垎
鐨勩傚綋鐒訛紝鎶婅繖涓笁瑙掑艦鎷嗘垚涓や釜涓夎褰㈠啀鍒嗗埆榪涜嫻嬭瘯涔熸槸涓涓彲琛岀殑鏂規錛屽彲鏄湅鐪嬪浘錛? – b錛夛紝榪欏彲鎬庝箞鎷嗗憿錛熻繕鏈夊浘錛? –
c錛夊憿錛熷彟澶栵紝濡傛灉n鍜宮涓や釜騫抽潰涓嶅叡闈㈠憿錛熷浜庝嬌鐢ㄨ呰岃█錛孫penGL鎻愪緵鐨勬嫞閫夋満鍒跺姛鑳界殑紜湁闄愩?br>
涓夈侀檷浣庝簡娓叉煋鏁堢巼銆?br>OpenGL
涓殑閫夋嫨鍜屽弽棣堟槸涓庢櫘閫氭覆鏌撴柟寮忎笉鍚岀殑涓縐嶇壒孌婄殑娓叉煋鏂瑰紡銆傛垜浠嬌鐢ㄦ椂涓鑸槸鍏堝湪甯х紦瀛樹腑娓叉煋鏅氬満鏅紝鐒跺悗榪涘叆閫夋嫨妯″紡閲嶇粯鍦烘櫙錛屾鏃跺撫緙撳瓨鐨勫唴瀹瑰茍鏃?br>鍙樺寲銆備篃灝辨槸璇達紝涓轟簡閫夋嫨鏌愪簺鐗╀綋錛屾垜浠渶瑕佸湪涓甯т腑浣跨敤涓嶅悓鐨勬覆鏌撴柟寮忓皢鍏舵覆鏌撲袱閬嶃傛垜浠煡閬撳瀵硅薄榪涜娓叉煋鏄瘮杈冭楁椂鐨勬搷浣滐紝褰撳満鏅腑闇瑕侀夋嫨鐨勫璞?br>澶氳屾潅鐨勬椂鍊欙紝閲囩敤榪欎釜鏈哄埗鏄潪甯稿獎鍝嶉熷害鐨勩?br>鍙﹀鍦∣penGL綰㈠疂涔︿腑浠嬬粛浜嗕竴縐嶇畝渚挎槗琛岀殑鍔炴硶錛氬湪鍚庣紦鍐蹭腑浣跨敤涓嶅悓鐨勯鑹查噸緇樻墍鏈夊璞★紝姣忎釜瀵硅薄鐢ㄤ竴涓崟鑹叉潵鏍囩ず鍏墮鑹詫紝榪欐牱鐢誨ソ涔嬪悗鎴戜滑璇誨彇榧?br>鏍囨墍鍦ㄧ偣鐨勯鑹詫紝灝辮兘澶熺‘瀹氭垜浠嫞閫変簡鍝釜鐗╀綋銆傝繖縐嶆柟娉曟湁涓涓己闄鳳紝褰撳満鏅腑闇瑕侀夋嫨鐨勫璞$殑鏁扮洰瓚呭嚭涓瀹氶檺搴︽椂錛屽彲鑳戒細鍑虹幇鏍囪瘑鏁扮殑婧㈠嚭銆傚浜庤繖涓棶
棰橈紝綰㈠疂涔︾粰鍑虹殑瑙e喅鍔炴硶灝辨槸澶氭鎵弿銆傚疄璺佃瘉鏄庤繖縐嶆柟娉曠殑紜畝渚挎槗琛岋紝浣嗕粛鏈変笉灝戝眬闄愭э紝鑰屼笖鍋氳搗鏉ュ茍涓嶆瘮絎竴縐嶆満鍒舵柟渚垮灝戙傞檺浜庣瘒騫咃紝涓嶅啀璧樿堪銆備笁銆佸叿浣撴弿榪幫紙Related Work錛?鐪嬭繃浜嗕笂闈袱縐嶆柟娉曪紝鎴戜滑浼氬彂鐜拌繖涓ょ鏂規硶閮戒笉鏄崄鍒嗙殑鏂逛究錛岃屼笖浣跨敤鑰呬笉鑳藉鍏惰繘琛屽畬鍏ㄧ殑鎺у埗錛屼笉鑳界簿紜湴鍒ゅ畾榧犳爣瀹氫綅涓庡疄闄呯殑涓栫晫絀洪棿涓笁緇村潗鏍囩殑鍏崇郴銆傞偅涔堟湁浠涔堟洿濂界殑鍔炴硶鑳藉鏇寸畝鍗曟洿綺劇‘鍦板鍏跺姞浠ユ帶鍒跺憿錛?瀹為檯涓婃澶勭粰鍑虹殑瑙e喅鏂規鍗佸垎綆鍗曪紝灝辨槸涓涓緢鏅氫篃寰堟湁鐢ㄧ殑 GLU 鍑芥暟 gluUnProject()銆?br>姝ゅ嚱鏁扮殑鍏蜂綋鐢ㄩ旀槸灝嗕竴涓狾penGL瑙嗗尯鍐呯殑浜岀淮鐐硅漿鎹負涓庡叾瀵瑰簲鐨勫満鏅腑鐨勪笁緇村潗鏍囥?br>杞崲榪囩▼濡備笅鍥炬墍紺猴紙鐢辯偣P鍦ㄧ獥鍙d腑鐨刋Y鍧愭爣寰楀埌鍏跺湪涓夌淮絀洪棿涓殑涓栫晫鍧愭爣錛夛細
榪欎釜鍑芥暟鍦╣lu.h涓殑鍘熷瀷瀹氫箟濡備笅錛歩nt APIENTRY gluUnProject (
GLdouble winx,
GLdouble winy,
GLdouble winz,
const GLdouble modelMatrix[16],
const GLdouble projMatrix[16],
const GLint viewport[4],
GLdouble *objx,
GLdouble *objy,
GLdouble *objz);銆銆鍏朵腑鍓嶄笁涓艱〃紺虹獥鍙e潗鏍囷紝涓棿涓変釜鍒嗗埆涓烘ā鍨嬭鍥劇煩闃碉紙Model/View Matrix錛夛紝鎶曞獎鐭╅樀錛圥rojection Matrix錛夊拰瑙嗗尯錛圴iewPort錛夛紝鏈鍚庝笁涓負杈撳嚭鐨勪笘鐣屽潗鏍囧箋傘銆鍙兘浣犱細闂細紿楀彛鍧愭爣涓嶆槸鍙湁X杞村拰Y杞翠袱涓間箞錛屾庝箞榪欓噷榪樻湁Z鍊鹼紵榪欏氨瑕佷粠浜岀淮絀洪棿涓庝笁緇寸┖闂寸殑鍏崇郴璇磋搗浜嗐傘
銆浼楁墍鍛ㄧ煡錛屾垜浠氳繃涓涓斁緗湪涓夌淮涓栫晫涓殑鎽勫儚鏈猴紝鏉ヨ瀵熷綋鍓嶅満鏅腑鐨勫璞°傞氳繃浣跨敤璇稿gluPerspective()
榪欐牱鐨凮penGL鍑芥暟錛屾垜浠彲浠ヨ緗繖涓憚鍍忔満鎵鑳界湅鍒扮殑瑙嗛噹鐨勫ぇ灝忚寖鍥淬傝繖涓閲庣殑杈圭晫鎵鍥存垚鐨勫嚑浣曚綋鏄竴涓爣鍑嗙殑騫蟲埅澶翠綋錛團rustum錛夛紝鍙互
鐪嬪仛鏄噾瀛楀鐘剁殑鍑犱綍浣撳墛鍘婚噾瀛楀鐨勪笂鍗婇儴鍒嗗悗褰㈡垚鐨勪竴涓彴鐘剁墿錛屽鏋滆繕鍘熸垚閲戝瓧濉旂姸錛屽氨寰楀埌浜嗛氬父鎴戜滑鎵璇寸殑瑙嗛敟錛圴iew
Frustum錛夎繖涓閿ョ殑閿ラ《灝辨槸瑙嗙偣錛圴iew Point錛変篃灝辨槸鎽勫儚鏈烘墍鍦ㄧ殑浣嶇疆銆傚鉤鎴ご浣擄紝瑙嗛敟浠ュ強瑙嗙偣涔嬮棿鐨勫叧緋伙紝濡備笅鍥炬墍紺猴細
鍦ㄤ笂闈㈢殑鍥句腑錛岃繙瑁佸壀闈BCD鍜岃繎瑁佸壀闈’B’C’D’鏋勬垚浜嗗鉤鎴ご浣擄紝鍔犱笂铏氱嚎閮ㄥ垎灝辨槸瑙嗛敟錛岄《鐐筄灝辨槸鎽勫儚鏈烘墍鍦ㄧ殑瑙嗙偣銆傛垜浠湪紿楀彛涓墍鑳界湅鍒扮殑涓滀笢錛屽叏閮ㄩ兘鍦ㄦ騫蟲埅澶翠綋鍐呫傝繖璺熷墠闈㈢殑紿楀彛鍧愭爣Z鍊兼湁浠涔堝叧緋誨憿錛熺湅涓嬪浘
濡?br>姝ゅ浘鎵紺猴紝鐐筆鍜岀偣P’鍒嗗埆鍦ㄨ繙瑁佸壀闈BCD鍜岃繎瑁佸壀闈’B’C’D’涓娿傛垜浠偣鍑誨睆騫曚笂鐨勭偣P錛屽弽鏄犲埌瑙嗛敟涓紝灝辨槸閫変腑浜嗘墍鏈夌殑浠庣偣P鍒扮偣P’鐨?br>鐐廣備婦涓艦璞$殑渚嬪瓙錛岃繖灝卞儚鏄垜浠尳寮撴斁綆紝濡傛灉灝勫嚭鍘葷殑綆繎涔庣瑪鐩村湴椋炲嚭錛堝亣璁懼姏閲忛潪甯鎬箣澶ц繎涔庢棤絀鳳級錛屼粠鎸藉紦鐨勫湴鐐圭洿鑷沖嚮涓洰鏍囷紝鍦ㄨ繖鏉$洿綰跨殑杞ㄨ抗涓?br>浠諱綍鐗╀綋閮藉皢琚竴絀胯岃繃銆傚搴旇繖閲岀殑鎯呭喌錛岀敤鎴峰崟鍑婚紶鏍囪幏寰楀睆騫曚笂鐨勬煇涓鐐癸紝鍗蟲槸鎸囧畾浜嗕粠瑙嗙偣鎸囧悜灞忓箷娣卞鐨勬煇涓鏂瑰悜錛屼篃灝辯‘瀹氫簡灞忓箷涓婃煇鏉′粠O鐐瑰嚭鍙戠殑
灝勭嚎錛堝湪鍥句腑鍗充負OP錛夈傚湪榪欓噷錛屾垜浠О鍛煎叾涓烘嫞閫夊皠綰褲?br>鍥犳錛屼粠紿楀彛鐨刋Y鍧愭爣錛屾垜浠粎浠呭彧鑳借幏寰椾竴鏉″嚭鍙戣嚜O鐐圭殑鎷i夊皠綰匡紝騫朵笉鑳藉緱鍒扮敤鎴鋒兂瑕佺殑鐐瑰湪榪欐潯灝勭嚎涓婄殑紜垏浣嶇疆銆?br>榪欐椂鍊欑獥鍙e潗鏍囩殑Z鍊煎氨鑳芥淳涓婄敤鍦轟簡銆傛垜浠氳繃Z鍊鹼紝鏉ユ寚瀹氭垜浠兂瑕佺殑鐐瑰湪灝勭嚎涓婄殑浣嶇疆銆傚亣濡傜敤鎴風偣鍑諱簡灞忓箷涓婄殑鐐癸紙100,100錛夊緱鍒頒簡榪欐潯灝勭嚎OP錛岄偅涔堟垜浠紶鍏ュ?.0f灝辮〃紺鴻繎瑁佸壀闈笂鐨凱鐐癸紝鑰屽?.0f鍒欏搴旇繙瑁佸壀闈笂鐨凱’鐐廣?br>榪?br>鏍鳳紝鎴戜滑閫氳繃寮曞叆涓涓獥鍙e潗鏍囩殑Z鍊鹼紝灝辮兘鎸囧畾瑙嗛敟鍐呬換鎰忕偣鐨勪笁緇村潗鏍囥備笌姝ゅ悓鏃訛紝鎴戜滑榪樿В鍐充簡鍓嶉潰綰㈠疂涔︾粰鍑虹殑鏂規硶涓瓨鍦ㄧ殑緙洪櫡鈥斺斿悓涓浣嶇疆涓婇噸鍙犵墿浣?br>鐨勯夋嫨闂銆傝В鍐沖姙娉曟槸錛氫粠灞忓箷鍧愭爣寰楀埌灝勭嚎涔嬪悗錛屽垎鍒閲嶅彔鐨勭墿浣撲笌璇ュ皠綰挎眰浜わ紝寰楀埌鐨勪氦鐐癸紝鐒跺悗鏍規嵁榪欎簺涓庤鐐圭殑榪滆繎紜畾閫夋嫨鐨勫璞°傚姝ゆ垜浠氨涓嶅繀
鍙?#8220;浠呬粎鍙兘閫夊彇灞忓箷涓瑙傚療鑰呮渶榪戠殑鐗╀綋”鐨勯檺鍒朵簡銆傝繖鏍蜂竴鏉ワ紝濡傛灉闇瑕佺殑璇濓紝鎴戜滑鐢氳嚦鍙互鐢ㄤ唬鐮佹潵浣滀竴瀹氱殑闄愬畾錛岄氳繃鍒ゆ柇浜ょ偣涓庤鐐圭殑璺濈錛屼嬌寰椾笌璇?br>鎷i夊皠綰跨浉浜ょ殑鐗╀綋涓紝紱昏鐐硅繙鐨勫璞℃墠鑳借閫夊彇錛岃繖鏍峰氨鑳藉瀵歸偅浜涙殏鏃惰鍏朵粬瀵硅薄閬綇鐨勭墿浣撹繘琛岄夊彇銆?br>鑷充簬濡備綍姹傛嫞閫夊皠綰夸笌瀵硅薄鐨勪氦鐐癸紝鍦ㄥ悇縐嶅浘褰㈠鐨勪功涓殑鏁板閮ㄥ垎鍧囨湁璁茶堪錛屽湪姝や笉鍐嶈禈榪般?br>鍥涖佷緥紼嬶紙Sample Code Fragment錛?br>
鍓嶉潰璁茶堪浜哛IP鏂規硶錛岀幇鍦ㄦ垜浠潵鐪嬪浣曠紪鍐欎唬鐮佷互瀹炵幇涔嬶紝浠ュ強涓浜涢渶瑕佹敞鎰忕殑闂銆?br>鐢變簬鎷i夊皠綰夸互綰挎褰㈠紡瀛樺偍鏇村姞渚夸簬鍚庨潰鐨勮綆楋紝鍐典笖鎴戜滑鍙互鐩存帴寰楀埌綰佃法鏁翠釜騫蟲埅澶翠綋鐨勭嚎孌碉紙鍗沖墠闈㈠浘涓殑綰挎PP’錛夛紝鏁呮垜浠洿鎺ヨ綆楀嚭榪欐潯榪炴帴榪滆繎瑁佸壀闈㈢殑綰挎銆傛垜浠皢鎷i夊皠綰跨殑綰挎褰㈠紡縐頒箣涓烘嫞閫夌嚎孌點?
鍦ㄤ笅闈㈢殑浠g爜鍓嶆柟澹版槑鏈変袱涓被Point3f鍜孡ineSegment榪欏垎鍒〃紺虹敱涓変釜嫻偣鏁版瀯鎴愮殑涓夌淮絀洪棿涓殑鐐癸紝浠ュ強鐢變袱涓偣鏋勬垚鐨勭┖闂翠腑鐨勪竴鏉$嚎孌點?br>搴旀敞鎰忎唬鐮佷腑鐢ㄥ埌浜嗙被Point3f鐨勪竴涓渶瑕佷笁涓誕鐐瑰弬鏁扮殑鏋勯犲嚱鏁幫紝浠ュ強綾籐ineSegment鐨勪竴涓渶瑕佷袱涓偣鍙傛暟鐨勬瀯閫犲嚱鏁般?br>鑾峰彇鎷i夊皠綰跨殑渚嬬▼濡備笅鎵紺猴紙浣跨敤C++璇█緙栧啓錛夛細class Point3f;
class LineSegment;
LineSegment GetSelectionRay(int mouse_x, int mouse_y) {
// 鑾峰彇 Model-View銆丳rojection 鐭╅樀 & 鑾峰彇Viewport瑙嗗尯
GLdouble modelview[16];
GLdouble projection[16];
GLint viewport[4];
glGetDoublev (GL_MODELVIEW_MATRIX, modelview);
glGetDoublev (GL_PROJECTION_MATRIX, projection);
glGetIntegerv (GL_VIEWPORT, viewport); GLdouble world_x, world_y, world_z; // 鑾峰彇榪戣鍓潰涓婄殑浜ょ偣
gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 0.0,
modelview, projection, viewport,
&world_x, &world_y, &world_z);
Point3f near_point(world_x, world_y, world_z); // 鑾峰彇榪滆鍓潰涓婄殑浜ょ偣
gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 1.0,
modelview, projection, viewport,
&world_x, &world_y, &world_z);
Point3f far_point(world_x, world_y, world_z); return LineSegment(near_point, far_point);
}
濡傛灉浣犳槸浣跨敤Win32騫沖彴榪涜寮鍙戯紝閭d箞搴斿綋娉ㄦ剰浼犲叆姝g‘鐨勫弬鏁般傚洜涓烘棤璁烘槸浣跨敤Win32 API 榪樻槸DirectInput
鏉ヨ幏鍙栭紶鏍囧潗鏍囷紝寰楀埌鐨刌鍊奸兘搴斿彇鍙嶅悗鍐嶄紶鍏ャ傚洜涓篛penGL榛樿鐨勫師鐐瑰湪瑙嗗尯鐨勫乏涓嬭錛孻杞翠粠宸︿笅瑙掓寚鍚戝乏涓婅錛岃學indows榛樿鐨勫師鐐瑰湪紿楀彛鐨?br>宸︿笂瑙掞紝鑰孻杞存柟鍚戜笌OpenGL鐩稿弽錛屼粠宸︿笂瑙掓寚鍚戝乏涓嬭銆傚涓嬪浘鎵紺猴細
鎴戜滑鍙互鐪嬪埌浠g爜琚敞閲婂垎涓轟簡涓変釜閮ㄥ垎錛氳幏鍙栧綋鍓嶇煩闃靛強瑙嗗尯錛岃幏鍙栬繎瑁佸壀闈㈢殑浜ょ偣錛岃幏鍙栬繙瑁佸壀闈㈢殑浜ょ偣銆?br>鎴戜滑閫氳繃OpenGL鎻愪緵鐨勬煡璇㈠嚱鏁拌交鏉懼緱鍒板綋鍓嶇殑ModelView鍜孭rojection鐭╅樀錛屼互鍙婂綋鍓嶇殑Viewport錛堣鍖猴紝涔熷氨鏄獥鍙g殑瀹㈡埛绔尯鍩燂紝濡傛灉鏁翠釜紿楀彛鍖哄煙鐢ㄤ簬OpenGL娓叉煋鐨勮瘽錛夈?br>鑾峰緱涓や釜瑁佸壀闈笂鐨勪氦鐐圭殑浠g爜鍩烘湰涓婃槸涓鏍風殑錛屽敮涓鐨勪笉鍚岀偣鏄垜浠墠闈㈡浘緇忚緇嗗湴璁ㄨ榪囩殑紿楀彛鐨刏鍧愭爣銆備笉閿欙紝榪欎釜鍧愭爣琛ㄧず鐨勫氨鏄?#8220;娣辨祬”鐨勬蹇點傚畠鐨勫間粠鐐筆’鍒扮偣P鐨勫彉鍖栨槸浠?.0f閫愭笎澧炶嚦1.0f銆傛澶勭被浼間簬OpenGL鐨勬繁搴︽祴璇曟満鍒躲?br>鍦ㄥ緱鍒頒袱涓氦鐐逛箣鍚庯紝鎴戜滑浣跨敤瀹冧滑閫氳繃榪斿洖璇彞鐩存帴鏋勫緩涓鏉$嚎孌點傚湪榪欓噷浠呬粎浣滀負瀹炰緥浠g爜錛屾晠綆鎹鋒竻鏅板湴鐩存帴榪斿洖綰挎瀵硅薄錛岃屾病鏈夐氳繃寮曠敤鍙傛暟鏉ユ彁楂樻晥鐜囥?br>姝?br>鏃剁敤鎴峰彲浠ヤ嬌鐢ㄨ繖涓嚱鏁版潵鍒ゆ柇鎵閫夋嫨鐨勫璞′簡銆傚彧闇鍦ㄩ渶瑕佺殑鍦版柟鍒ゆ柇瀵硅薄鏄惁涓庢綰挎鐩鎬氦鍗沖彲鍒ゆ柇瀵硅薄鏄惁琚変腑錛岃繕鍙互閫氳繃榪涗竴姝ヨ綆楀叾浜ょ偣浣嶇疆鏉ュ緱鍒?br>璇︾粏鐨勪氦鐐逛俊鎭傝繖浜涜綆楀潎鏄父瑙佺殑璁$畻鏈哄浘褰㈠涓庝笁緇存暟瀛﹁綆楋紝姣斿綰挎涓庝笁瑙掑艦姹備氦錛岀嚎孌典笌闈㈡眰浜わ紝綰挎涓庣悆浣撴眰浜わ紝綰挎涓庢煴浣撴垨閿ヤ綋姹備氦錛岀瓑絳夈傝
鍙傝冩墍鍒楀嚭鐨勮綆楁満鍥懼艦瀛︿功綾嶃?br>浜斻佺粨璁猴紙Conclusion錛?br>
鍦ㄦ湰鏂囦腑錛屾垜浠粙緇嶄簡涓縐嶈涔嬫湁鏁堢殑涓夌淮鍧愭爣鎷懼彇鏂規硶錛屼富瑕佷嬌鐢℅LU搴撲腑鐨勫疄鐢ㄥ伐鍏峰疄鐜般傝繖縐嶆柟娉曢熷害蹇紝鏁堢巼楂橈紝鑳藉湪涓嶅繀閲嶆柊緇樺埗瀵硅薄鐨勫墠鎻愪笅瀹屾垚鎷i夊伐浣溿傚姣擮penGL鑷甫鐨勬嫞閫夋満鍒舵潵鐪嬶紝RIP鐨勭‘鍦ㄥ悇縐嶆柟闈㈠潎鏈変竴瀹氱殑浼樺娍銆?br>鍏佸弬鑰冩枃鐚紙Reference錛?銆?銆戙奜penGL Programming Guide銆?br>OpenGL ARB Mason Woo, Jackie Heider, Tom Davis, Dave Shreiner
銆?銆戙奜penGL Reference Manual銆?br>OpenGL ARB
銆?銆戙奀omputer Graphics銆?br>Donald Heam, M. Pauline Baker
銆?銆戙奀omputer Graphics using OpenGL 2nd Edition銆?br>F.S. Hill, JR.