スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GLSL入門:CPUレイトレーシング

大量のポリゴンのレイトレーシングを行うと画面が落ちてしまう。
ではGPUで計算を行わずにCPUで計算させてピクセル情報を送れば?
ということでCPUレイトレーシングを行ってみました。
まずは負荷の小さいもので挑戦。
結果はGPUよりかなり遅くなりますがレイトレーシングできました。



GPU:Intel HD graphics family
CPU: Intel core i7 2630QM 2.0GHz


FPS比較
GPU:200オーバー
CPU:20くらい(7スレッド並列)

GPUってこんなに速いんですね。
OpenMP並列によるCPU計算より10倍以上速いようです。


以下、大まかなソースコード。


int texSizeX = 640;
int texSizeY = 400;

float* colorDataR;
float* colorDataG;
float* colorDataB;

colorDataR = (float*)malloc(texSizeX*texSizeY*sizeof(float));
colorDataG = (float*)malloc(texSizeX*texSizeY*sizeof(float));
colorDataB = (float*)malloc(texSizeX*texSizeY*sizeof(float));
for (int i=0; i colorDataR[i] = 0.0f;//初期化
colorDataG[i] = 0.0f;
colorDataB[i] = 0.0f;
}//i

GLenum texTargetC = GL_TEXTURE_2D;

glGenTextures (1, &colorRTexID);//GLSLへの転送用テクスチャを作成
glBindTexture(texTargetC, colorRTexID);
glTexParameteri(texTargetC, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(texTargetC, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(texTargetC, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(texTargetC, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(texTargetC,0,GL_RGBA32F_ARB,texSizeX,texSizeY,0,GL_RGBA,GL_FLOAT,0);

// colorGTexID, colorBTexIDについても同様

// レイトレーシング計算を行う。
// 結果をcolorDataR,G,Bに格納

GLenum texFormat = GL_LUMINANCE;

glActiveTexture(GL_TEXTURE2); //番号は適当に決める
glBindTexture(texTargetC, colorRTexID);
glTexSubImage2D(texTargetC,0,0,0,texSizeX,texSizeY,texFormat,GL_FLOAT,colorDataR);

GLint tex_colorR_Loc = glGetUniformLocation(shader, "texColorR_");
glUniform1i(tex_colorR_Loc, 2);

// colorGTexID, colorBTexIDについても同様

glBegin(GL_POLYGON);//画面いっぱいの長方形を描画
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3d( 1.0f, -1.0f, -1.0f);
glVertex3d( 1.0f, 1.0f, -1.0f);
glVertex3d(-1.0f, 1.0f, -1.0f);
glEnd();
glFinish();


スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

uglab

Author:uglab
ソフト開発会社

【Twitter】
フォローお願いします

【You tube動画一覧】
チャンネル登録お願いします


最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
スポンサードリンク
    【スポンサードリンク】

リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。