OpenGL學習筆記(三)---FreeImage顏色顯示錯亂的解決方法
一、簡介
看Nehe的教程學習OpenGL看到載入圖片時用到了FreeImage,跟著寫了下,發現圖片顏色是錯亂的。
如圖:
除錯的時候發現自己的少了一段程式碼:
其中BIG_ENDIAN是“大端模式”表示資料的讀取方式從高地址到低地址;if ((imageType == FIT_BITMAP) && (FreeImage_GetBPP(pBitmap) == 24)) { textureFormat = GL_RGBA; datatype = GL_UNSIGNED_BYTE; components = GL_RGBA; texturedata = (unsigned char*)malloc(nWidth*nHeight*4); int red, green, blue, alpha; #ifdef BIG_ENDIAN//! RGBA; red = 0; green = 1; blue = 2; alpha = 3; #else//! BGRA; red = 2; green = 1; blue = 0; alpha = 3; #endif int offset = 0; int offset_img = 0; for (unsigned int y = 0; y < nHeight; y++) { for (unsigned int x = 0; x < nWidth; x++) { texturedata[offset+red] = ((unsigned char*)bits)[offset_img+0]; texturedata[offset+green] = ((unsigned char*)bits)[offset_img+1]; texturedata[offset+blue] = ((unsigned char*)bits)[offset_img+2]; texturedata[offset+alpha] = 0; offset += 4; offset_img += 3; } offset_img = y*nPitch; } }
原來BMP格式圖片是按blue,green,red順序儲存的,而不是OpenGL常見的R,G,B順序。
二、解決方法
1.讀取資料的時候把資料按需要的方式讀取,像NeHe處理程式碼類似.
2.不想那麼麻煩可以,可以直接用OpenGL定義的轉換方式轉換,只需改一個引數:
(修改紅色字型部分,第7個引數): glTexImage2D(GL_TEXTURE_2D, level, internal_format, width, height,border, GL_BGR_EXT, GL_UNSIGNED_BYTE, bits);//GL_RGB轉GL_BGR_EXT
效果如圖:
相關推薦
OpenGL學習筆記(三)---FreeImage顏色顯示錯亂的解決方法
一、簡介 看Nehe的教程學習OpenGL看到載入圖片時用到了FreeImage,跟著寫了下,發現圖片顏色是錯亂的。 如圖: 除錯的時候發現自己的少了一段程式碼: if ((imageType == FIT_BITMAP) && (Free
SpringCloud學習筆記三---Eureka資訊顯示問題, 自我保護機制及叢集搭建
一 Eureka整合到專案中出現的一些細節顯示問題 問題1. 註冊的服務中包含主機名稱 解決方法: 修改microservicecloud-provider-dept-8001 yml檔案中的配置, instance: instance-id
OpenGL學習筆記(三)
OpenGL繪製 清除視窗 在計算機中,儲存圖片的記憶體通常被計算機所繪製的前一幅影象所填充,因此在繪製新場景之前,一般需要把它清除為某種背景顏色。 void glClearColor(GLclampf red,GLclampf green,GLclampf bl
jvm學習筆記(三)類檔案結構、java方法數65535上限的原因
瞭解class類檔案結構,對於學習smali也是有必要的!一、class類檔案的結構(8位位元組,一個位元組佔8位,以位元組為基礎單位的二進位制流)儲存結構:class檔案是一組以位元組(8位)為基礎單位的二進位制流,各資料嚴格按照順序緊湊排列在class檔案中,中間沒有任何
opengl學習筆記(三)——玩弄模型(使用者互動)
經過前面兩節的功夫,我們算是搞到了一個還算可以的模型,但我們想要把模型翻來翻去,移動一下還是不行的。並且,根據使用者(老師)需求,我們要讓模型能以線框,點的方式繪製。也就有了這最後一講。 首先,我們通過滑鼠左鍵來旋轉物體。這就需要在滑鼠回撥函式裡下功夫了 if (state == GLUT_DO
OpenGL學習筆記(五)---三維地圖
1.簡介 由於自己對WIN API不熟悉,所以把Nehe例程改成了“純”C++實現,當然,windows下程式設計還是用到了<windows.h>裡定義的一些巨集、結構體..... NeHe教程10是用一張.bmp點陣圖實現了一個
OpenGL學習筆記(三)OpenGL繪製方式
(1)OpenGL圖元 點:void glPointSize() 線、條帶、迴圈線:void glLineWidth() 三角形、條帶、扇面: 將多邊形渲染為點集、輪廓或者實體: P68 正反面採用不同的方式繪製: glPolygonMode(GL
用glew,glfw,FreeImage實現opengl學習筆記6座標變換
這個程式碼參考教程點選開啟連結 這個教程很詳細,程式碼是實現座標的轉換,教程帶原始碼,我仿照原始碼在自己本地的實現,這裡給大家參考使用載入圖片是用的FreeImage是一個開源的載入圖片的,網上的資料也挺多的。這個程式的原始碼在這點選開啟連結 點選裡面的shader3
Android OpenGL ES學習筆記之新增顏色
一、分類 新增顏色的種類有兩種 - Flat coloring 單色 - Smooth coloring 平滑著色 單色 顧命思義就是一種單一的顏色,呼叫 glColor4f(float red,
OpenGL學習筆記——顏色
每個畫素的顏色資訊儲存方式: RGBA模式:有些圖形硬體可以使用抖動來增加可以顯示的顏色數量(抖動在預設情況下是開啟的)。 顏色索引:可用顏色數量受限於顏色對映表的大小以及可用的位平面的數量。 在程式執行早期,設定顏色顯示模式,當顏色顯示模式初始化之後就
Linux學習筆記(三):系統執行級與執行級的切換
查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要
【Unity 3D】學習筆記三十:遊戲元素——遊戲地形
nbsp 3d遊戲 strong 直觀 分辨率 == 摩擦力 fill 世界 遊戲地形 在遊戲的世界中,必然會有非常多豐富多彩的遊戲元素融合當中。它們種類繁多。作用也不大同樣。一般對於遊戲元素可分為兩種:經經常使用。不經經常使用。經常使用的元素是遊戲中比較重要的元素。一
MYSQL學習筆記三:日期和時間函數
div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM
Hadoop權威指南學習筆記三
支持 第三方 handle line src factory 模式 多個 重要 HDFS簡單介紹 聲明:本文是本人基於Hadoop權威指南學習的一些個人理解和筆記,僅供學習參考。有什麽不到之處還望指出,一起學習一起進步。 轉載請註明:http://blog.cs
NLTK學習筆記(三):NLTK的一些工具
ast 關註 code 值範圍 通過 自動 ive 叠代器 emma 主要總結一下簡單的工具:條件頻率分布、正則表達式、詞幹提取器和歸並器。 條件分布頻率 《自然語言學習》很多地方都用到了條件分布頻率,nltk提供了兩種常用的接口:FreqDist 和 Condit
Tomcat學習筆記(三)
containe 請求 container connect 技術 http 簡單 img 容器 Tomcat連接器 tomcat連接器是tomcat的一個核心組件,在tomcat4中的實現原理如下 1.實現Connector接口 2.創建Reques
mybatis學習筆記(三)-- 優化數據庫連接配置
bsp pro 新建 數據 配置信息 onf ron XML oca 原來直接把數據庫連接配置信息寫在conf.xml配置中,如下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configura
Odoo10學習筆記三:模型(結構化的應用數據)、視圖(用戶界面設計)
其他 描述 用戶界面 列表 支持 字段 界面設計 允許 學習 一:模型 1:創建模型 模型屬性:模型類可以使用一些屬性來控制它們的一些行為: _name :創建odoo模型的內部標識符,必含項。 _description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。
tensorflow學習筆記(三):實現自編碼器
sea start ear var logs cos soft 編碼 red 黃文堅的tensorflow實戰一書中的第四章,講述了tensorflow實現多層感知機。Hiton早年提出過自編碼器的非監督學習算法,書中的代碼給出了一個隱藏層的神經網絡,本人擴展到了多層,改進
CSS學習筆記三:自定義單選框,復選框,開關
sla checked 移動 transform 第一個 16px 位移 block back 一點一點學習CCS,這次學習了如何自定義單選框,復選框以及開關。 一、單選框 1、先寫好body裏面的樣式,先寫幾個框 1 <body> 2 <d