絞り込み条件を変更する
検索条件を絞り込む

すべてのブログから「#ソフトウェアレンダリング」タグの検索結果

4 件中 1 - 4 件表示
カバー画像

c+WINAPIで3DCGの理屈その4

さて、前回のグーローシェーディング付きテクスチャーマッピングとフォンシェーディング付きテクスチャーマッピングはバグがあったのがなんとなく推察できたかもしれないですが、作者こと自分の理解度不足があったことが全ての原因です。という訳で今回はテクスチャーのグーローとフォンが治るまでシャドウを作ります。#include"DXLib.h"#include<math.h>#include<stdlib.h>#include<windows.h>#include<utility>using namespace std;#define CELL 1.0fconst float FOV_F = 600.0f;const int HEIGHT = 240;const int WIDTH = 320;struct VTX {    float x, y, z;    float u, v;};struct Camera{    float x, y, z;    float yaw; // 左右回転のみ    float height;};enum WallDir{    WALL_NORTH,    WALL_SOUTH,    WALL_WEST,    WALL_EAST};struct Vec3{    float x;    float y;    float z;};float ZBuf[HEIGHT][WIDTH];#define RAD (3.14159265/180.0)Camera cam;// ==================
0
カバー画像

cとWINAPIで3DCGの理屈その3

あと、残り少なくなってきた記事ですが、テクスチャーマッピングについてとりあげます。のちに、フラットテスクチャ―、グーローテクスチャーとフォンテクスチャーも取り上げます。残る問題は、古典的なところでは、白黒で凹凸を表現するバンプマッピングですね。他には、フォグや、モーションブラーも行きたいですが、そこまで技術力は沸いてこないと思います。まずは歪んだテクスチャーマッピングから解説します。int Texture[32][32];という2次元配列によってuとvという0~31までの画像を参照する座標が設定できるようになります。この解説においてテクスチャーデータに格納するために適しているのは何と言ってもbmp形式です。フォーマットが決まっているからというのもあります。これは、ラッピングによるand演算により繰り返しが出来る為に、32とか、256などの2のNの累乗が選ばれる理由です。こんな画像を自分が用意しました。とここで、UとVを0~1.0に収まるように正規化しておきます。そしたら、実際の描画処理に移るわけですが、毎回これを行います。1.座標バッファ初期化for(int y=0;y<height;y++){     Lbuf[y]=9000;     Rbuf[y]=-9000;}2.ポリゴンの3つの頂点を線形補間して、例えば、頂点がAx,Ay,Bx,By,Cx,CyとAU,AV,BU,BV,CU,CV,heightとあったら、以下のLineをLine(Ax,Ay,AU,AV,Bx,By,BU,BV,height);Line(Bx,By,BU,BV,Cx,Cy,CU,CV,heigh
0
カバー画像

続3DCGの理屈(cとWINAPIで書きます)のその2

006:OBJファイル読み込み複数の行の文字列で表現されるOBJフォーマットですが、その1つの行の先頭文字がvの場合、3次元座標を表します。先頭文字がfの場合、頂点番号を表すので全体としてそれぞれの1つ1つのポリゴン単体の情報として表します。つまり、例をあげるとv 0.005 0.25 0.125v 0.5 0.21 0.05v 0.025 0.1123 0.5v 0.05 0.113 0.125f 0,1,2,3これで全体から見て1つ当たりの四角ポリゴンの内容です。ちなみに、自分はShadeを使うこともあるので、Shadeで円を描画して、閉じた線形状に変換して中央のY軸で回転させてドーナツの形にしたら、四角ポリゴンとしてOBJ形式でエクスポートしました。なので、blenderがエクスポートするOBJ形式を読み込むためにはどういう風に対応すれば良いかは分かりません。#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define WIDTH 320 #define HEIGHT 240 int min_[HEIGHT]; int max_[HEIGHT]; #define SCREENHEIGHT HEIGHT #define SCALE 240.0f int MAXVTX=0;//最大の頂点数 int MAXPOL=0;//最大のポリゴン数 int LastLine=0; BITMAPINFO biInfo; LPDWORD
0
カバー画像

3DCGの理屈について(cとWINAPIで書きます)

3DCGというと、ポリゴンというイメージが強いですが、レイトレーシングというかなりリアルに見える3DCG技術も近年発達しています。バイオハザードのRE2とかのリメイクなんかはひょっとするとレイトレーシングを使ってたりするのではないかと思ってますが、ユーチューブでゲーム実況動画を観たらあまりにも内蔵やらなにやらがグロいゾンビの死体の一部だったので気持ち悪くなるほどでした。さて、ここでは、点、ワイヤーフレーム、フラットシェーディング、グーローシェーディング、フォンシェーディングについて書きます。しかし、最近の言語で高速に点描画が出来るプラットフォームを知らないのとc+winapiの組み合わせがやはりスクリプト言語より速い(気がする)します。なので、とりあえずcで組んでみます。実はc以降に作られた言語には色々とc言語と似通った部分があるのでcを覚えるのは役に立つのではないでしょうか?コンパイルの仕方(cをexeに変換するやり方)はVisualC++ExpressEditionでも可能です。ソースをmain.cppにして、Ctrl+F5でコンパイルできます。文字セットをユニコードではなく、マルチバイトにしておきます。001:点を打つプログラムはだんちょう、じゃなくて冗長ですが、cとしては短い方だと思います。#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define WIDTH 320 #define HEIGHT 240
0
4 件中 1 - 4