锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鐢╒S鏂板緩涓涓獁in32鎺у埗鍙板簲鐢ㄧ▼搴?鎴戜滑鍋囪宸ョ▼鍚嶄負錛欻ello銆?
閫夋嫨宸ュ叿->閫夐」->欏圭洰鍜岃В鍐蟲柟妗?>VC++鐩綍銆?/font>
(1) 閫夋嫨“鍙墽琛屾枃浠?#8221;錛屽湪閲岄潰娣誨姞錛欳:\Qt4.7.0\bin;
(2) 閫夋嫨“鍖呭惈鏂囦歡”錛屽湪閲岄潰娣誨姞錛欳:\Qt4.7.0\include; C:\Qt4.7.0\include\Qt; C:\Qt4.7.0\include\QtCore; C:\Qt4.7.0\include\QtGui
(3) 閫夋嫨“搴撴枃浠?#8221;錛屽湪閲岄潰娣誨姞錛欳:\Qt4.7.0\lib錛?
浜屻佸紑濮嬬紪紼?
1. 閫夋嫨鑿滃崟涓婄殑“QT”閫夐」- >“Launch Designer” ,鍚姩designer : 鏀懼叆涓涓?#8220;label”,鍐呭鍐欎負錛歨elloQT銆傜劧鍚庝繚瀛樹負Hello.ui錛屽啀灝嗗畠娣誨姞鍒版簮鏂囦歡涓?/font>
鍙沖嚮“Hello.ui”->“灞炴?#8221;->“鑷畾涔夌敓鎴愭楠?#8221;錛?/font>
鍛戒護琛岋細uic.exe Hello.ui -o HelloUi.h
杈撳嚭錛欻elloUi.h
闄勫姞渚濊禆欏癸細uic.exe; Hello.ui
鐒跺悗錛岀偣鍑?#8220;紜畾”銆傝繖鏃跺啀鍙沖嚮“Hello.ui”錛岄夋嫨“緙栬瘧”錛屽垯浼氱敓鎴怘elloUi.h銆傚皢瀹冩坊鍔犲埌宸ョ▼涓?/font>
2. 鍦℉ello.cpp涓紪鍐欎唬鐮侊細
3. 閫夋嫨“欏圭洰”錛?#8220;Hello灞炴?#8221;錛?#8220;閰嶇疆灞炴?#8221;錛?/font>
(1) “甯歌”錛氶夋嫨“瀛楃闆?#8221;涓?#8220;浣跨敤澶氬瓧鑺傚瓧絎﹂泦”錛?/font>
(2) “璋冭瘯”錛氬~鍐?#8220;鐜”鍊間負錛歅ATH=C:\Qt4.7.0\bin錛?/font>
濉啓“鍚堝茍鐜”鍊間負錛氭槸錛?/font>
(3) “閾炬帴鍣?#8221;錛氳繘鍏?#8220;甯歌”閫夐」錛屽~鍐?#8220;闄勫姞搴撶洰褰?#8221;涓猴細C:\Qt4.7.0\lib;
榪涘叆“杈撳叆”閫夐」錛屽~鍐?#8220;闄勫姞渚濊禆欏?#8221;涓猴細qtcore4.lib qtgui4.lib
錛堟敞鎰忥紝榪欎袱涓簱涔嬮棿涓虹┖鏍鹼紝涓嶈兘鍐欓楀彿錛?/font>
淇″彿signals鐨勫0鏄庢槸澶存枃浠朵腑榪涜鐨勶紙妲界殑澹版槑涔熷湪澶存枃浠朵腑澹版槑錛屽悓鏃惰鍦ㄧ被澹版槑鐨勫紑濮嬪鍔犱笂Q_OBJECT璇彞錛岃繖灝嗗憡璇夌紪璇戝櫒鍦ㄧ紪璇戜箣鍓嶅繀欏葷敤moc宸ュ叿榪涜鎵╁睍錛夛紝騫朵笖moc 宸ュ叿浼氭敞鎰忎笉瑕佸皢淇″彿瀹氫箟鍦ㄥ疄鐜版枃浠朵腑錛屼嬌鐢╯ignals鍏抽敭瀛楁爣紺轟俊鍙峰0鏄庡尯錛岄殢鍚庡彲澹版槑鑷繁鐨勪俊鍙楓?/font>
淇″彿signals娌℃湁public\private\protected絳夊睘鎬э紝榪欑偣涓嶅悓浜巗lots銆?/font>
淇″彿signals鐨勮繑鍥炲間負void
妲絪lots鏈塸ublic slots銆乸rivate slots銆乸rotected slots (鏂規(guī)硶)
淇″彿signals/浜嬩歡->錛堥┍鍔級妲絪lots/鏂規(guī)硶
QT鐨勫厓瀵硅薄緋葷粺涓篞T鎻愪緵浜嗗璞¢棿閫氫俊鐨勪俊鍙蜂笌妲芥満鍒躲佸疄鏃剁被鍨嬩俊鎭佸姩鎬佸睘鎬х郴緇熺瓑鏂歸潰鐨勫姛鑳姐?/font>
鍏冨璞$郴緇熷湪QT涓富瑕佹湁浠ヤ笅涓変釜閮ㄥ垎鏋勬垚錛歈Object綾匯丵_OBJECT瀹忋佸厓瀵硅薄緙栬瘧鍣╩oc
3.vs涓璔T鏄劇ず涓枃錛?/font>
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
QFont font("Times",12,QFont::Normal,FALSE);
app.setFont(font);
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
//QFont font("Times",12,QFont::Normal,FALSE);
//a.setFont(font);
4.QAction綾?/font>鐨勭敤娉?/font>
1銆丵Action::QAction ( const QString & text, QObject * parent )
QAction綾葷殑鏋勯犲嚱鏁頒箣涓錛屽埄鐢╰ext錛宲arent鍒涘緩QAction瀵硅薄銆俀Action瀵硅薄涓鑸負鑿滃崟涓殑鑿滃崟欏癸紝姣斿 "鏂囦歡"鑿滃崟涓?鏂板緩"閫夐」灝辨槸涓涓猀Action瀵硅薄錛?/font>
涓婅堪鏋勯犲嚱鏁頒腑text鎴愬憳鍙橀噺 鍗充負鑿滃崟欏規(guī)墍琛ㄧず鐨勫唴瀹?/font>
鐢ㄦ硶錛歈Action *newAction = new QAction(tr("&New"),this);
2銆乿oid QAction::setIcon ( const QIcon & icon )
璇ュ嚱鏁板彲璁劇疆鑿滃崟欏瑰悕縐板墠鐨勫浘鏍?/font>
鐢ㄦ硶錛歯ewAction->setIcon(QIcon(":/images/new.png"));
3銆乿oid QAction::setShortcut ( const QKeySequence & shortcut );
璁劇疆QAction瀵硅薄鎵ц鐨勫揩鎹烽敭
鐢ㄦ硶錛歯ewAction->setShortcut(tr("Ctrl+N"));
4銆乿oid QAction::setStatusTip ( const QString & statusTip );
璁劇疆褰撻紶鏍囩Щ鍔ㄥ埌“鍔ㄤ綔”涓婃椂錛岀姸鎬佹爮鏄劇ず鐨勬彁紺鴻銆?/font>
5銆乿oid QAction::setVisible ( bool );
璁劇疆“鍔ㄤ綔”鏄劇ず涓庡惁錛屽綋褰㈠弬涓簍rue鏄紝“鍔ㄤ綔”琛ㄧず銆?/font>
6銆乿oid QAction::triggered ( bool checked = false ) [signal]
姝ゅ嚱鏁頒負淇″彿錛屽綋鐢ㄦ埛瑙﹀彂姝?#8220;鍔ㄤ綔”鏃訛紝姝や俊鍙峰彂灝勩備緥濡傜敤鎴風偣鍑諱簡鑿滃崟涓殑鑿滃崟欏圭瓑銆?/font>
姝ゅ嚱鏁頒竴鑸敤娉曚負錛氬湪QObject::connect錛堬級鍑芥暟涓綔涓轟俊鍙峰弬鏁幫紝鐢ㄤ簬瑙﹀彂“鍔ㄤ綔”鎵瀵瑰簲鎵ц鐨勬Ы鍑芥暟——瀹炵幇“鍔ㄤ綔”鐨勫姛鑳藉嚱鏁幫紝渚嬪錛?#8220;鏂板緩”鎸夐挳琚敤鎴鋒寜涓嬶紝
鎵闇瑕佺殑鍔熻兘鍙兘 鏄柊寤轟竴涓枃妗o紝閭d箞鏂板緩涓涓枃妗g殑鍔ㄤ綔灝卞湪榪欎釜妲藉嚱鏁頒腑瀹炵幇銆傝嚦浜庢淇″彿鍑芥暟涓殑褰㈠弬鏆傛椂鍙互蹇界暐銆備互鍚庝細鍦ㄤ粙緇峇Object綾諱腑鐨勯潤鎬佹柟娉昪onnect()鍑芥暟鏃惰緇嗚В璇淬?/font>
7銆乿oid QAction::setCheckable ( bool );
姝ゅ嚱鏁扮敤浜庤緗甉Action綾諱腑鐨勭鏈夊彉閲忥細 bool checkable 錛屾灞炴х敤浠ユ彁渚?#8220;鍔ㄤ綔”鏄惁涓哄閫夊姩浣滐紝渚嬪Qt Creator涓?#8220;鎺т歡”鑿滃崟涓殑“鍏ㄥ睆”鑿滃崟欏瑰嵆涓哄閫夊姩浣?/font>
鑿滃崟
5 QMainWindow綾?/font>鐢ㄦ硶
1銆乿oid QMainWindow::setCentralWidget ( QWidget * widget );
姝ゆ柟娉曚綔鐢ㄤ負璁劇疆浼犲叆閮ㄤ歡涓轟富紿楀彛甯冨眬鐨勪腑蹇冮鍩熼儴浠躲備紶鍏ラ儴浠跺彲涓轟換鎰忕殑閮ㄤ歡鎴朡Widget綾葷殑瀛愮被閮ㄤ歡銆傚浜?#8220;閮ㄤ歡”榪欎釜璇嶇殑鐞嗚В鍙互鐞嗚В涓烘煇鏈哄櫒涓婄殑涓涓灪涓濄佷竴涓厤浠剁瓑絳夛紝鍏跺疄閮ㄤ歡灝辨槸铻轟笣鍜屾煇閰嶄歡鐨勪竴涓娊璞℃劅蹇靛槢錛屼粬浠兘鍙仛閮ㄤ歡錛屼絾鏄嵈鏈夌潃涓嶅悓鐨勪綔鐢ㄥ拰褰㈢姸銆備互鍚庝細閬囧埌寰堝綾葷戶鎵縌Widget綾葷殑銆傜浉淇″ぇ瀹墮兘姣旂瑪鑰呰仾鏄庯紝鎴栬鎴戞槸鍦ㄨ浜涘簾璇濓紝鍛靛懙銆?/font>
涓句緥錛?/font>
鍦ㄨ嚜瀹氫箟鐨勭戶鎵夸簬QMainWindow鐨勬潵鏋勯犲嚱鏁伴噷闈細
QTableWidget *table = new QTableWidget錛?nbsp; //QTableWidget緇ф壙浜嶲Widget綾伙紱
setCentralWidget(table);
2銆乿oid QMainWindow::setWindowIcon ( const QIcon & icon );
璁劇疆紿楀彛宸︿笂瑙掑浘鏍囷紝鏀寔PNG銆丅MP銆丟IF銆丗PEG銆丳NM銆乆BM銆乆PM鏍煎紡鏂囦歡銆?/font>
涓涓嬩負鍑犵GUI搴旂敤紼嬪簭鎻愪緵璧勬簮鐨勬柟娉曪細
①灝嗗浘鐗囧瓨鍏ユ枃浠訛紝鍦ㄧ▼搴忚繍琛屾椂鍔犺澆
②灝哫PM鏂囦歡鍖呭惈鍦ㄦ簮紼嬪簭涓紝鍥犱負XPM鏂囦歡鏄湁鏁堢殑C++鏂囦歡
③浣跨敤Qt鐨勮祫婧愭満鍒?#8212;———姝ょ鏂瑰紡涓嶄粎浠呮敮鎸佸浘鐗囨牸寮忔枃浠訛紝鑰屼笖鏀寔浠諱綍鏍煎紡鐨勬枃浠?/font>
3銆丵MenuBar *QMainWindow::menuBar() const;
姝ゆ柟娉曡繑鍥炰竴涓富紿楀彛鐨勮彍鍗曟爮瀵硅薄鎸囬拡銆傚鏋滃湪璋冪敤姝ゆ柟娉曟椂錛屼富紿楀彛涓嶅瓨鍦ㄨ彍鍗曟爮錛屽垯姝ゆ柟娉曚細鍒涘緩涓涓┖鐨勮彍鍗曟爮銆傚湪Mac搴旂敤紼嬪簭涓紝濡傛兂鍦ㄥ涓富紿楀彛涔嬮棿鍏變韓涓涓彍鍗曟爮錛屽垯闇瑕佷嬌鐢≦MenuBar *menuBar = new QMenuBar(0);褰㈠紡鍒涘緩鑿滃崟鏍忥紝鍗沖垱寤轟竴涓棤鐖墮儴浠剁殑鑿滃崟鏍忓璞°?/font>
榪欓噷瑙i噴涓涓嬩粈涔堝彨鍋氱埗閮ㄤ歡錛屽垵瀛︿竴瀹氬榪欎釜姒傚康涓嶇悊瑙o紝榪欓噷鐨勭埗閮ㄤ歡涓嶆槸C++涓被鐨勭戶鎵垮叧緋伙紝鑰屾槸閮ㄤ歡涓庨儴浠剁殑鍏崇郴銆傛垜涔熸槸瀛︿範浜嗕竴孌墊椂闂存墠鎱㈡參鎮(zhèn)熷嚭榪欓噷闈㈢殑閬撶悊鐨勩傛垜鐪嬬殑鏄奀++ GUI Programming with Qt 4銆嬭嫳鏂囧師鐗堬紝鏈潵鐞嗚В璧鋒潵灝辨湁浜涢殰紕嶏紝鍐嶉亣鍒拌繖鏍鋒柊鐨勬蹇佃瘝姹囷紝鏇存槸涓嶇煡鍏舵墍浜戙備負浠涔堢湅鑻辨枃鍘熺増涔﹀憿錛屼釜浜鴻寰楀浗鍐呯炕璇戠殑涓嶆槸寰堝埌浣嶏紝鍙兘鍦ㄦ煇涓湴鏂規(guī)垨鍏抽敭鐐圭粰鎴戦犳垚璇錛岃矊浼兼壇榪滀簡銆傘傘傚嵆璇磋鐖墮儴浠舵槸涓粈涔堜笢瑗匡紝鐜板湪涓哄ぇ瀹舵墦涓瘮鏂癸紝涓寮犵數(shù)鑴戞鐢卞涓儴浠舵瀯鎴愶紝濡傛闈紝妗屽瓙鑵匡紝鎶藉眽絳夌瓑錛屾娊灞変笂闈㈡湁鎶藉眽鎶婃墜錛岄偅涔堟娊灞夊氨鏄娊灞夋妸鎵嬬殑鐖墮儴浠訛紝鐢?shù)鑴戞灏辨槸鎶藉眽鐨勭垑檭ㄤ欢銆傜浉淇¤繖鏍瘋В閲婏紝澶у涓瀹氬氨浼氱悊瑙d簡銆?/font>
4銆丵ToolBar * QMainWindow::addToolBar ( const QString & title );
姝ゅ嚱鏁頒負閲嶈澆鍑芥暟錛屽叾浣欎袱涓負宸插垱寤轟簡宸ュ叿鏍?QToolBar)瀵硅薄鏃訛紝灝嗗伐鍏鋒爮瀵硅薄娣誨姞鍒癚MainWindow瀵硅薄涓備笅闈㈠氨浼氶┈涓婂垪鍑鴻繖涓や釜綾繪柟娉曘傚湪璋冪敤姝ゆ柟娉曟椂錛屼細鍒涘緩涓涓猀ToolBar瀵硅薄錛岃繑鍥炶繖涓璞$殑鎸囬拡錛屽茍鍦ㄤ富紿楀彛欏墮儴宸ュ叿鏍忓尯鍩熶腑鏄劇ず銆?/font>
5銆乿oid QMainWindow::addToolBar ( Qt::ToolBarArea area, QToolBar * toolbar );
涓庝笂涓嚱鏁版瀯鎴愰噸杞藉叧緋伙紝姝ゅ嚱鏁扮浜屼釜褰㈠弬涓哄凡瀹氫箟濂界殑宸ュ叿鏍忓璞℃寚閽堬紝絎竴涓艦鍙傚伐鍏鋒爮琛ㄧず鐨勪綅緗紝姝ゅ艦鍙備負鏋氫婦鍨嬪彉閲忋?/font>
宸ュ叿鏍忚〃紺轟綅緗叡4縐嶏紝鍗沖乏鍙充笂涓嬶細
(1) Qt::LeftToolBarArea 0x1
(2) Qt::RightToolBarArea 0x2
(3) Qt::TopToolBarArea 0x4
(4) Qt::BottomToolBarArea 0x8
6銆乿oid QMainWindow::addToolBar ( QToolBar * toolbar );
涓庤皟鐢?addToolBar(Qt::TopToolBarArea, toolbar) 鏂規(guī)硶鏁堟灉鐩稿悓錛屽嵆璋冪敤 addToolBar(Qt::TopToolBarArea, toolbar) 鏂規(guī)硶錛屽伐鍏鋒爮鏄劇ず鍖哄煙榛樿涓轟富紿楀彛欏墮儴銆?/font>
7銆丵StatusBar *QMainWindow::statusBar() const;
褰撲富紿楀彛鐘舵佹爮涓嶅瓨鍦ㄦ椂錛屽垱寤虹姸鎬佹爮錛屽茍榪斿洖鐘舵佹爮瀵硅薄鎸囬拡銆備竴鑸湪鑷畾涔塓MainWindow瀛愮被鐨勬瀯閫犲嚱鏁版椂浣跨敤錛屽垱寤虹姸鎬佹爮瀵硅薄銆傚垱寤哄悗錛屾坊鍔燪Label瀵硅薄錛屼互鏄劇ず涓葷獥鍙g姸鎬佹垨鑿滃崟鏍忎腑鎸夐挳鐨勭姸鎬佹彁紺恒?/font>
鐩鎬俊閫氳繃3銆?銆?銆?銆?銆丵MainWindow綾繪柟娉曠殑瀛︿範錛屽ぇ瀹跺簲璇ユ帉鎻′簡鍒涘緩鑿滃崟鏍忥紝宸ュ叿鏍忓拰鐘舵佹爮鐨勬柟娉曘傞氬父鐨勪富紿楀彛涓鑸篃灝遍渶瑕佽繖浜涗笢瑗夸簡銆備絾瑕佹兂璁╄彍鍗曟爮錛屽伐鍏鋒爮浠ュ強鐘舵佹爮鑳芥湁鑷繁鐨勫姩浣滄垨琛屼負錛岃繕闇瑕佸叾浠栫被鐨勯厤鍚堜嬌鐢ㄣ傚ぇ瀹朵笉鐢ㄦワ紝QMainWindow綾葷畝鍗曚粙緇嶅畬姣曚箣鍚庯紝浼氫粙緇嶈繖浜涚浉鍏崇殑綾誨強鍏朵嬌鐢ㄦ柟娉曘?/font>
8銆乿oid QMainWindow::setWindowModified(bool);
褰撴鍑芥暟褰㈠紡鍙傛暟涓簍rue鏃訛紝鍗寵緗簡WindowModified灞炴т負true錛屾剰鎬濅負琛ㄦ槑鍏堢紪杈戠殑鏂囨。鏈夋洿鏂幫紝榪欐椂錛孮t浼氳嚜鍔ㄦ洿鏂版爣棰樻爮錛孧ac OS X 緋葷粺涓婂湪涓葷獥鍙g殑鍏抽棴鎸夐挳涓婂皢鍑虹幇涓涓彉鏇寸殑鏍峰紡錛屽叾浠栫郴緇熸垨騫沖彴涓婁細鍦ㄤ富紿楀彛鏍囬鏍忕殑鏂囦歡鍚嶅悗澶氭樉紺轟竴涓?#8220;*”銆?/font>
void MainWindow::open() { QDialog *dialog = new QDialog; dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(tr("Hello, dialog!")); dialog->show();
void MainWindow::open() { QDialog dialog(this); dialog.setWindowTitle(tr("Hello, dialog!")); dialog.exec(); }
It's actually quite simple to implement a quick alpha test. I needed to be able to cookie cut out sprites and fonts so I simply needed to reject fragments where the alpha value was zero. Here are the guts of a shader to do this:
#ifdef GL_ES precision highp float; #endif uniform sampler2D u_tex0; uniform bool u_alphatestenable; varying vec2 v_texCoord; varying vec4 v_color; void main(){ //calculate the fragment color based on the texture and the vertex colour vec4 basecolor = texture2D( u_tex0, v_texCoord ) * v_color; //if testing is enabled, check the alpha component and discard if zero if(u_alphatestenable){ if(basecolor.a == 0.0){ //throw this fragment away discard; } } gl_FragColor = basecolor; }
You need to set up a uniform variable u_alphatestenable which enables the alpha test. If you want to support different test types ( less than, greater than etc) then you will need two more uniform variables: one for the test type and one for the value to test against.
int uni_alphatest_enable = glGetUniformLocation(mProgram, "u_alphatestenable"); bool alphateston = true; glUniform1i(uni_alphatest_enabl
note that you shouldn't call glGetUniformLocation every frame, it should be cached somewhere.
It's quite simple and while you may be thinking oh that is so slow it not that bad. It's faster then the fixed function pipeline which is doing tests for alpha, lights, blend modes etc. If you get paranoid then you can create multiple shaders that support different subsets of features. All you need to be careful of is the cost of calling glSetProgram (to switch shaders) which can be expensive and cause bubbles in the vertex pipeline in the hardware.
鍦ㄨ綆楁満鍥懼艦瀛﹂鍩熸椂甯稿惉鍒癵amma correction 錛実amma correction 鎺у埗浜嗗浘鍍忔暣浣撶殑浜害錛宺eproduce colors涔熼渶瑕乬amma correction鐨勪竴浜涚悊璁虹煡璇嗭紝gamma correction涓嶄粎浠呮槸鎺у埗浜嗗浘鍍忕殑浜害錛岃屼笖榪樻帶鍒朵簡RGB鍚勪釜鍒嗛噺鐨勬瘮渚嬶紝鎴戜滑鐭ラ亾娓叉煋鍣ㄦ槸綰挎х殑錛岃屾樉紺哄櫒騫墮潪綰挎э紝鍏跺疄鐢?shù)瀛愭墦鍦ㄥ睆骞曚笂浠庤屼駭鐢熶寒鐐癸紝鐢?shù)瀛愮殑杩愬姩鍙楃數(shù)鍘嬫帶鍒跺Q岃繖涓よ呮槸鎸囨暟鍏崇郴鐨勶紝鎵浠ヤ駭鐢熺殑浜害涔熻窡鐢?shù)鍘嬫垚鎸囨暟鍏尘p伙紝鑰屽彂閫佺粰鏄劇ず鍣ㄧ殑voltages鑼冨洿鏄?~1錛?/font>
瀵逛簬鎴戜滑杈撳叆鐨勫浘鍍忥紝濡傛灉鐩存帴鏄劇ず錛岄偅涔堝氨浼氱瘒鏆楋紝鏍規(guī)嵁宸茬煡鐢?shù)鍘嬩笌鏄窘C轟寒搴︾殑鍏崇郴錛岃繘琛実amma correction 錛屽叾瀹炲氨鏄gamma鏇茬嚎鐨勪慨姝c備竴鑸敓浜у巶瀹朵笉鍔犺鏄庯紝浠栦滑鐨勪冀鐮佸煎ぇ綰︾瓑浜?.5.
浠g爜錛?/p>
gammaCorrection = 1 / gamma colour = GetPixelColour(x, y) newRed = 255 * (Red(colour) / 255) ^ gammaCorrection newGreen = 255 * (Green(colour) / 255) ^ gammaCorrection newBlue = 255 * (Blue(colour) / 255) ^ gammaCorrection PutPixelColour(x, y) = RGB(newRed, newGreen, newBlue)
鐭ラ亾monitor涓嶆槸涓涓嚎鎬х殑錛岄偅涔堟垜浠湪榪涜棰滆壊鍔犳硶鏃訛紝鎴戜滑寰楀埌鐨勯鑹插茍涓嶆槸鐪熸鐨勯鑹插肩殑鐩稿姞錛屾瘮濡俫amma factor鏄?.2
red = add (r1, r2);
red= add (0.235,0.156);
瀵逛簬涓涓嚎鎬ц澶囷紝red = 0.391,瀵逛簬鏈粡淇鐨刴ontior red=0.126;
鍥犱負鏈変竴涓箓鍑芥暟鐨勮繍綆楋細C_out = C_in2.2
鐜板湪浣跨敤gamma correction :C_corrected= C_out1.0/2.2
0.3912.2 = 0.126
0.1261.0/2.2 = 0.39
鎴戜滑鐪嬪埌浣跨敤浼界爜鏍℃浠ュ悗鎴戜滑鑳藉緱鍒版垜浠鎯崇殑棰滆壊鍊?.39.
There are two ways to do gamma correction:
In OpenGL, using GL_ARB_framebuffer_sRGB is really simple: once your FBO is bound, just enable the sRGB space with
glEnable(GL_FRAMEBUFFER_SRGB);
gamma-correction