opengl编程学习笔记(三)(2D绘图)
在opengl中可以绘制二维图像,分为两种,BITMAP和image 1.bitmap和image的区别有: bitmap中对图像的每个像素只存储一位(0或1),用来表示用当前颜色绘制还是不绘制,而image是图像的每个像素存储可能很多位,存储它的各个通道的颜色信息; bitmap是绘制在
在opengl中可以绘制二维图像,分为两种,BITMAP和image
1.bitmap和image的区别有:
bitmap中对图像的每个像素只存储一位(0或1),用来表示用当前颜色绘制还是不绘制,而image是图像的每个像素存储可能很多位,存储它的各个通道的颜色信息;
bitmap是绘制在三位空间中的一群点,其中每个点都受各变换矩阵的影响,等同于一群Gl_begin(GL_POINTS)操作联合在一起 ,而image是直接绘制在帧缓存上,在绘制原点所投影到的屏幕坐标处开始绘制,就是直接在二维屏幕上绘制,就像普通的二维绘制一样,他只有那个绘制的原点受变换矩阵的影响,比如当原点的位置被裁剪掉之后,整张图片也将消失。
bitmap是绘制在三位场景的一些点,也就是每个点都会有法向等信息,回收光照等影响,拉近看还会发现点间的距离,image是直接写入帧缓存的,绘制的颜色就是最终看到的颜色, 像素点间不会有距离
2.bitmap的绘制步骤
glColor3f制定当前绘制的点的颜色
glRasterPos2f定义当前的绘制原点(OPENGL绘制的原点是在左下角的,即定义之后,都是从这点开始按照从左至右,从下至上绘制的)
只有当调用了 glRasterPos2f之后,他前面的glColor3f才会起作用,所以要先设置颜色,再定义原点
void glBitmap( GLsizei width, 绘制宽度的点数
GLsizei height, 绘制高度 的点数
GLfloat xorig, 在以原点的二维坐标系中的X坐标
GLfloat yorig, 在以原点的二维坐标系中的Y坐标
GLfloat xmove,绘制后原点的横向位移
GLfloat ymove,绘制后原点的纵向位移
const GLubyte * bitmap 存储的数据);
绘制存储在内存中的数据
其中bitmap中存储的数据按照从左下角起8位对其(一个GLUBYTE),例如下图的数据就应该因该存储为
0xc0, 0x00, 0xc0, 0x00, 0xc0,0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0xc0, 0xff, 0xc0。如果width不是八的倍数,比如是30个点,那么这一行仍然要占8的倍数位,应占用4个字节,最后面的两位将被自动舍弃。
bitmap更适合绘制颜色较单一,且需要能进行三维观察的图
他也可以绘制彩色图,只是要每个点绘制前改变当前绘制颜色,如图
2.image的绘制步骤
2.1glPixelStorei()设置数据的存储和解读方式,这里可以进行的常用设置有
GL_PACK_SWAP_BYTES改变一个像素各个成分(不是颜色通道的顺序)的顺序,比如原先的存储顺序为(颜色、深度、索引),颠倒后为(索引、深度、颜色),而一个颜色的通常都存储为RGB。这个设置通常不用改变
剪裁图像:比如我们只要绘制在内存中图像数据中的一个矩形区域,原图为640*480,我们需要绘制从(10,10) 开始长100,宽100的区域到屏幕。我们需要先用glPixelStorei(GL_UNPACK_ROW_LENGTH,640)设置图像的原宽为640,再用glPixelStorei(GL_UNPACK_SKIP_ROWS,10)设置我们跳过了10行,然后用glPixelStorei(GL_UNPACK_SKIP_PIXELS,10)设置我们又把起点跳过了10个像素(列),最后调用glDrawPixels(100,100...)来绘图。
2.2glPixelTransferf设置像素的传递和映射,用这个操作,可以在存储或读取时将特定的颜色映射到一种颜色,或者将特定颜色的值扩大缩小等
2.3glPixelZoom(x,y)设置几何变换,这将设置最后图像的一个像素在X/Y方向上被放大的倍数,都是2则放大四倍,如果为负数在读取时进行镜像
2.4调用glDrawPixels绘制存储在内存中的图像到帧缓存上
或调用glReadPixels读取帧缓存上的数据到内存中(可以做截图用)
或调用glCopyPixels拷贝帧缓存的一处数据到帧缓存的另一处(觉得很适合做赛车游戏的后视镜 ^^)

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











正規表現を使用して PHP 配列から重複値を削除する方法: 正規表現 /(.*)(.+)/i を使用して、重複値を照合して置換します。配列要素を反復処理し、preg_match を使用して一致をチェックします。一致する場合は値をスキップし、一致しない場合は重複値のない新しい配列に追加します。

1. プログラミングは、Web サイト、モバイル アプリケーション、ゲーム、データ分析ツールなど、さまざまなソフトウェアやアプリケーションの開発に使用できます。その応用分野は非常に幅広く、科学研究、医療、金融、教育、エンターテイメントなど、ほぼすべての業界をカバーしています。 2. プログラミングを学ぶことは、問題解決スキルと論理的思考スキルを向上させるのに役立ちます。プログラミング中、問題を分析して理解し、解決策を見つけてコードに変換する必要があります。この考え方は、分析能力と抽象能力を養い、実際的な問題を解決する能力を向上させることができます。

Golang を使用してブラウザベースのアプリケーションを構築する Golang は JavaScript と組み合わせて、動的なフロントエンド エクスペリエンスを構築します。 Golang をインストールする: https://golang.org/doc/install にアクセスします。 Golang プロジェクトをセットアップします。 main.go というファイルを作成します。 GorillaWebToolkit の使用: HTTP リクエストを処理するための GorillaWebToolkit コードを追加します。 HTML テンプレートの作成: template サブディレクトリに、メイン テンプレートであるindex.html を作成します。

Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

C++ プログラミング パズルは、フィボナッチ数列、階乗、ハミング距離、配列の最大値と最小値などのアルゴリズムとデータ構造の概念をカバーします。これらのパズルを解くことで、C++ の知識を強化し、アルゴリズムの理解とプログラミング スキルを向上させることができます。

C は初心者がプログラミングを学ぶのに理想的な言語であり、効率性、汎用性、移植性などの利点があります。 C 言語の学習には次のことが必要です。 C コンパイラ (MinGW や Cygwin など) をインストールする 変数、データ型、条件文、ループ文を理解する main 関数と printf() 関数を含む最初のプログラムを作成する 実際のケースによる練習 (平均値の計算など) C言語の知識

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

Go のエラー処理には、ラップ エラーとアンラップ エラーが含まれます。エラーをラップすると、あるエラー タイプを別のエラー タイプでラップできるようになり、エラーのより豊富なコンテキストが提供されます。エラーを展開し、ネストされたエラー チェーンをたどって、デバッグを容易にするために最下位レベルのエラーを見つけます。これら 2 つのテクノロジを組み合わせることで、エラー状態を効果的に処理でき、より豊富なエラー コンテキストと優れたデバッグ機能が提供されます。
