Wiki内検索
最近更新したページ
2011-08-24
2010-05-18
2010-05-03
2010-02-18
2010-02-10
2010-02-09
2010-02-08
2010-02-07
2010-02-02
2009-12-24
2009-12-05
2009-07-05
2009-07-03
最新コメント
MenuBar1 by stunning seo guys
MenuBar1 by stunning seo guys
MenuBar1 by stunning seo guys
MenuBar1 by awesome things!
MenuBar1 by awesome things!
MenuBar1 by awesome things!
MenuBar1 by check it out
MenuBar1 by awesome things!
MenuBar1 by check it out
MenuBar1 by stunning seo guys
Menu
Programming Tips
タグ
3dcg(18) anime(1) bash(1) bcb(4) boost(3) bullet(1) c++(44) component(1) c言語(1) debian(2) delphi(6) doc(1) emacs(16) etc(3) execute(1) gdb(1) glut(7) ibds(1) index(2) info(1) java(1) link(5) linux(22) lisp(1) math3d(10) matrix(1) newton(1) nvidia(1) opengl(24) povray(1) preprocessor(1) raytracing(4) sample(4) stl(2) think(1) vc(1) vmware(1) win32(1) windows(1) wm(1) xyzzy(4) ぃぬx(1)
タグ検索で3dcg18件見つかりました。
Normal3DCG
*法線 法線を出すには、 1.三角形の3つの頂点から、その三角形の2つの辺をベクトルとして出す。 2.その2つの辺を外積して、1つの方向ベクトルを出す。 3.そのままでは計算に使えないので、各要素の合計が1になるベクトルに 変換する(正規化)。 という手順になります。 法線の計算では、ゼロによる除算に気を付けてください。(他の場合でもそうですが) 軸に水平なポリゴンの面などの場合、まれにゼロで割るケースが 発生しますので、防止用のコードを書いておきましょう。 面を構成するa,b,c3つの点は時計回
https://seesaawiki.jp/w/eruvasu/d/Normal3DCG... - 2008年03月07日更新
dot3DCG
*内積の計算 内積は2つのベクトルのX,Y,Z 同士を、それぞれ掛けてから合計した小数です。 ''&color(#1E90FF){内積 = a.x * b.x + a.y * b.y + a.z * b.z;}'' また、 |A||B|cos角度 でも表します。 ***C++ float dot(TVector &a, TVector &b) { return a.v[0] * b.v[0] + a.v[1] * b.v[1] + a.v[2] * b.v[2]; }; ***J
https://seesaawiki.jp/w/eruvasu/d/dot3DCG... - 2008年02月23日更新
Plate
*平面方程式 平面方程式は平面上の中のある一点と法線の内積で表せます ''&color(#1E90FF){d = 内積( 点, 法線 );}'' d = dot(p, n); ***C++ 平面方程式用のクラス class TPlane { public: TVector n; float d; }; TPlane makePlane(TVector &a, TVector &b, TVector &c)//3つの点は時計回り { TPlane ret; ret.n = normal(a,
https://seesaawiki.jp/w/eruvasu/d/Plate... - 2008年02月18日更新
distancePlaneToPoint
*無限平面と点の距離 3D空間上のある無限平面とある点Qの距離を出すには、 ''&color(#1E90FF){距離 = 内積( 平面の法線、Q点座標 ) − 平面方程式のd;}'' (注:平面の法線は正規化されてる必要がある) どうしてこのようになるかと言うと まず、点Qの平面上の最接近点Rがあると考えます。 また平面上のどこかに点Pがあり、法線Nとdはわかっているとします。 このRは 点Qから、法線Nと面からQまでの距離tを掛けたベクトルを引くことによって得られます。 (方向としてのN
https://seesaawiki.jp/w/eruvasu/d/distancePlaneToP... - 2008年02月18日更新
normalize
*単位ベクトル化(正規化) ベクトルをX,Y,Zの各成分が合計1となるように、それぞれの割合を 設定したものを単位ベクトルと呼びます。 各成分がそれぞれの割合を示しているので、この状態のものは ベクトルの計算に使いやすいのです。 ベクトルvの単位ベクトルを求めるには ''&color(#1E90FF){単位ベクトル = v * ( 1 / ベクトルvの大きさ );}'' ***C++ TVector normalize(TVector &a) { float mag = magnitude(
https://seesaawiki.jp/w/eruvasu/d/normalize... - 2008年02月18日更新
VectorLength
*ベクトルの長さ ベクトルの長さ(大きさ)を一つのスカラー(小数)で表します。 X,Y,Zのそれぞれの成分の2乗を合計してから、平方根を出します。 正規化などで利用できます。 ''&color(#1E90FF){長さ = sqrt( x * x + y * y + z * z );}'' ***C++ float magnitude(TVector &a) { return sqrt(a.v[0] * a.v[0] + a.v[1] * a.v[1] + a.v[2] * a.v[2]); };
https://seesaawiki.jp/w/eruvasu/d/VectorLength... - 2008年02月18日更新
cross3dcg
*外積の計算 外積は、2つのベクトルを ''x = y * z - z * y;'' ''y = z * x - x * z;'' ''z = x * y - y * x;'' 順で計算します。 ***C++ TVector cross(TVector &a, TVector &b) { TVector ret; ret.v[0] = a.v[1] * b.v[2] - a.v[2] * b.v[1]; ret.v[1] = a.v[2] * b.v[0] - a.v[0] * b.v[2];
https://seesaawiki.jp/w/eruvasu/d/cross3dcg... - 2008年02月18日更新
ScreenToWorld
function ScreenToWorld(ScreenX, ScreenY, ScreenZ : Single) : TVector3f; var Viewport : TViewPortArray; MVMat : T16dArray; PJMat : T16dArray; WinX : Double; WinY : Double; WinZ : Double; ObjX : Double; ObjY : Double; ObjZ : Do
https://seesaawiki.jp/w/eruvasu/d/ScreenToWorld... - 2008年01月20日更新
AmbientLight3DCG
*環境光を入れる 環境光を入れ、三角形のクラス(Tri)を描くようにしました。 環境光の計算は、 color.x * lw   とdiffuseの値を出してから、ambを足して amb.x + color.x * lw 255を掛けます。 (amb.x + color.x * lw) * 255 Vertex amb = new Vertex(0.2f, 0.2f, 0.2f); void drawTriangle(Tri tri, int[] pix, Vertex lightDir,
https://seesaawiki.jp/w/eruvasu/d/AmbientLight3DCG... - 2008年01月07日更新
DiffuseLight3DCG
*照明下での面の色(diffuse)を決める ライトがある時の面の色は、面の設定色 * (面の法線とライトの向きの内積) で計算します。 まず、面の法線を出します。destに法線が入ります。 Vertex dest = new Vertex(); m3.normal(dest, v1, v2, v3); ライトの向きとの内積を出します。 float lw = m3.dot(dest,lightDir); もともとの設定色にlwと255を掛けると、色が決まります。 int r = (int)(color
https://seesaawiki.jp/w/eruvasu/d/DiffuseLight3DCG... - 2008年01月07日更新
Matrix3DCG
*行列計算クラス 行列によるアフィン変換は、行列の掛け算が 基本にあります。横掛ける縦の順で掛けて行きます。 public class Matrix { float a0, a1, a2, a3; float b0, b1, b2, b3; float c0, c1, c2, c3; float d0, d1, d2, d3; Matrix t = null; Matrix() { loadIdentity(); } void tmpInit() { if (t == null)
https://seesaawiki.jp/w/eruvasu/d/Matrix3DCG... - 2008年01月07日更新
Triangle_3DCG
*三角形の描き方 三角形を二次元配列上に描くには、三角形の縦を基準にして考えたとき、 ある高さ(Y値)の時は、横幅(X値)はどこからどこまでが分かれば その横幅を線として描いて、三角形にできます。 まず、高さの下から上までをループを作ります。(low_yを三角形の一番下、top_yを 一番上とします。) for (int i = low_y; i v1y) low_y = v1y; if (low_y > v2y) low_y = v2y; if (low_y > v3y) low_y
https://seesaawiki.jp/w/eruvasu/d/Triangle%5f3DCG... - 2008年01月07日更新
BrezLine
*直線の書き方2 大きな数を掛けて、整数で足し算をしていきます。 割合は縦を基準に計算します。 int[] tateArr; void calcLineTate(int p1x, int p1y, int p2x, int p2y) { int x16_x1 = p1x > 16] = tmp_x >> 16; } } void drawLineTate(Vertex p1, Vertex p2, int[] pix) { tateArr = new int[hei]
https://seesaawiki.jp/w/eruvasu/d/BrezLine... - 2008年01月07日更新
LINE_3DCG
*直線の書き方 2次元配列上に、直線を直接描く方法について説明します。 基本的には、長い辺で短い辺を割り、短い辺の割合をだします。 その割合を長い辺がカウントされる度に足していき、 1を超えると短い辺が一つ増える、というアルゴリズムです。 以下にJavaでコードを書いて見ます。 無論、いろいろな書き方があり、次の書き方はその一つでしかありません。 また、最適化もされていません。 void drawLine(Vertex p1, Vertex p2) { if (p1.y tate_no_nagas
https://seesaawiki.jp/w/eruvasu/d/LINE%5f3DCG... - 2008年01月07日更新
MatrixBasic1
**行列計算クラス C++ 行列によるアフィン変換は、行列の掛け算が 基本にあります。横掛ける縦の順で掛けて行きます。 class TMatrix { float a0, a1, a2, a3; float b0, b1, b2, b3; float c0, c1, c2, c3; float d0, d1, d2, d3; public: TMatrix() { loadIdentity(); } void loadIdentity() { a0 = a1
https://seesaawiki.jp/w/eruvasu/d/MatrixBasic1... - 2007年12月26日更新
DrawTriangle
**三角形の描き方  三角形を二次元配列上に描くには、三角形の縦を基準にして考えたとき、 ある高さ(Y値)の時は、横幅(X値)はどこからどこまでが分かれば その横幅を線として描いて、三角形にできます。  まず、高さの下から上までをループを作ります。(low_yを三角形の一番下、top_yを 一番上とします。) for (int i = low_y; i v1y) low_y = v1y; if (low_y > v2y) low_y = v2y; if (low_y > v3y) lo
https://seesaawiki.jp/w/eruvasu/d/DrawTriangle... - 2007年12月24日更新
DrawLine2
**直線の書き方2 大きな数を掛けて、整数で足し算をしていきます。 割合は縦を基準に計算します。 int[] tateArr; void calcLineTate(int p1x, int p1y, int p2x, int p2y) { int x16_x1 = p1x > 16] = tmp_x >> 16; } } void drawLineTate(Vertex p1, Vertex p2, int[] pix) { tateArr = new int[hei
https://seesaawiki.jp/w/eruvasu/d/DrawLine2... - 2007年12月24日更新
DrawLine
*直線の書き方  2次元配列上に、直線を直接描く方法について説明します。 基本的には、長い辺で短い辺を割り、短い辺の割合をだします。 その割合を長い辺がカウントされる度に足していき、 1を超えると短い辺が一つ増える、というアルゴリズムです。 以下にJavaでコードを書いて見ます。 無論、いろいろな書き方があり、次の書き方はその一つでしかありません。 また、最適化もされていません。 void drawLine(Vertex p1, Vertex p2) { if (p1.y tate_no_nag
https://seesaawiki.jp/w/eruvasu/d/DrawLine... - 2007年12月24日更新



スマートフォン版で見る