タグ付けされた質問 「matrix」

行と列に配置された数値、記号、または式の2D配列。各行の列数は同じでなければなりません。数字、記号、または式自体は、要素またはエントリと呼ばれます。

1
架空の4Dメッシュを画面にダウンプロジェクションする
精神的な練習として、私は任意の4Dメッシュをスクリーン(2D)に投影することを想像しています。 単一の4D三角形はまだ3つのポイントのみで構成されていると思いますが、これらの3つのポイントはそれぞれ4次元の列によって定義されます。 最初に4D空間を3D空間にマップする投影行列を定義してから、OpenGLにそのデータから2D空間への独自の投影を行わせるほうが理にかなっていますか? または、4から2に直接投影することを計画するのが最善でしょうか? どうもありがとう。

3
ビューマトリックスから翻訳を取得する方法
ビューマトリックスからカメラのワールド空間の位置を取得するにはどうすればよいですか?この質問に対して私が見た唯一の回答は、翻訳が最後の行/列にあることを示唆していますが、マトリックスには[x(ドット)右、y(ドット)上、z(ドット)見た目]が含まれているため、これは機能しません。
11 3d  mathematics  matrix 

1
スクリーンスペースからワールドスペース
私のゲームの世界では、x軸が左から右、y軸が上から下、z軸が画面の外に出ている2Dゲームを作成しています。 私のゲームの世界はトップダウンですが、ゲームは少し傾いてレンダリングされます。 私は、ワールドスペースからスクリーンスペースへ、またはその逆への投影に取り組んでいます。前者は次のように動作しています: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); NegateY()XNAのため、拡張メソッドは、それがのように聞こえるまさに行い、Y軸は、トップの代わりに、上から下へ下へと走ります。上のスクリーンショットは、これがすべて機能していることを示しています。基本的に、私は3D空間に多数のポイントを持ち、それを画面空間にレンダリングします。カメラのプロパティをリアルタイムで変更して、新しい位置にアニメーション表示することができます。明らかに、私の実際のゲームはポイントではなくスプライトを使用し、カメラの位置は固定されますが、それに到達する前に、すべての計算を適切に実行しようとしています。 今、私は逆に変換しようとしています。つまり、上の画面空間のxとyの点を指定して、ワールド空間の対応する点を決定します。たとえば、緑色の台形の左下にカーソルを合わせると、ワールドスペースの読み取り値は(0、480)になります。Z座標は無関係です。または、むしろ、ワールド空間にマッピングし直すとき、z座標は常にゼロになります。基本的に、私はこのメソッドシグネチャを実装したいと思います。 public Vector2 ScreenPointToWorld(Vector2 point) 私はこれを機能させるためにいくつかのことを試みましたが、運が悪いだけです。私の最新の考えでは、Viewport.Unproject異なるz値とfar z値を使用して2回呼び出し、結果を計算Rayし、それを正規化してから、基本的に私の世界の地上レベルを表すRayとの交差を計算する必要がありPlaneます。しかし、私は最後のステップで立ち往生し、私が物事を過度に複雑にしているのかどうか確信が持てませんでした。 これを達成する方法について誰かが正しい方向に私を向けることができますか?
10 xna  c#  matrix  projection  screen 

2
どのようにして変換行列から方向を抽出できますか?
4x4の変換行列Mがあり、Mで変換したときの球の形状を確認したい(球は原点にあり、半径は1です)。 Mに(0,0,0,1)を乗算するだけで中心を見つけることができます。 ただし、Mは球を押しつぶして回転させることができるため、半径が問題になります。結果として得られる楕円体の新しい半径を見つけるにはどうすればよいですか?オリエンテーションを見つける方法はありますか? 具体的には、変換された球を囲む境界球のサイズを知る必要があります。言い換えると、| M * V-M *(0,0,0,1)|の最大値は何ですか。ここで、Vは単位ベクトル(元の球上の点)です。

5
Vector3で演算子 '> ='を使用できないのはなぜですか?
私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_positionAとします_positionB。どちらもタイプVector3です。長方形はうまく動きます。ただし、到達_positionBしても、本来のように反対方向に移動することはありません。 コードをもう一度見てみました。オブジェクトが移動ifすると、コード内のステートメントは、rectsの位置がに等しいフレームを逃したという結論に達しました_positionB。rectsの位置がより大きいか等しい 場合は、コードを変更して方向を逆にすることにしました_positionB。私のコードは長すぎないので、以下に表示します。 using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

1
gluLookAtはどのように機能しますか?
私の理解から、 gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); 以下と同等です。 glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); しかし、ModelViewマトリックスを出力すると、への呼び出しがglTranslatef()正しく機能していないようです。コードスニペットは次のとおりです。 #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int Ry …

2
OpenGL-モデル、ビュー、ワールドマトリックスの関係を理解する
これらのマトリックスがどのように機能するか、および適切なシステムを実行するために相互に関連してそれらをセットアップする方法を理解するのに少し問題があります。 私の理解では、モデルマトリックスはオブジェクトのマトリックスであり、たとえば立方体や球体です。アプリケーション/ゲームにはこれらの多くが存在します。 ワールドマトリックスは、3Dワールドの原点を定義するマトリックスです。出発点。 そして、ビューマトリックスは、すべてがこれで変換される「カメラ」であり、実際にすべてがこのマトリックスの代わりに動いているときに、実際のカメラのような錯覚を持っていることを確認します。 ここで少し迷ってしまいました。だから私はここの誰かがこれを正しく理解するのを助けてくれることを望んでいた。 すべてのmodelMatrixは、worldMatrixとworldMatrix、次にviewMatrixで変換/乗算されますか?それとも、すべてのmodelMatrixがviewMatrixで翻訳/乗算され、次にworldMatrixで翻訳/乗算されますか? これらすべてのマトリックスはどのように関連し、複数のオブジェクトと「カメラ」を備えた世界をどのように設定しますか? 編集: すでにフィードバックをありがとうございました。私はググリングをしましたが、もう少しよく理解できたと思いますが、疑似コードのアドバイスを得ることができますか? projectionMatrix = Matrix; makePerspective(45, width, height, 0.1, 1000.0, projectionMatrix); modelMatrix = Matrix; identity(modelMatrix); translate(modelMatrix, [0.0, 0.0, -10.0]); // move back 10 on z axis viewMatrix = Matrix; identity(viewMatrix); // do some translation based on input with viewMatrix; viewMatrixをmodelMatrixで乗算または変換しますか、それとも逆にしますか?そしてそれから?私は現在、引数を描画するために2つの行列のみを必要とするような方法で、drawメソッドを持っています。 これが私の描画方法です: draw(matrix1 matrix2) …

3
ワールドマトリックスを使用する必要がありますか?
質問の画像参照: (CGチュートリアルからの画像) D3D9 APIは、世界の行列に慣れました。 ただし、ワールドマトリックスを使用する場合は、シェーダーで追加のマトリックス乗算を行う必要があります(これは、多くの頂点で同じになります)。 したがって、モデリングとビューのマトリックスを1つのマトリックスに連結するOpenGLの規則(GL_MODELVIEWMATRIX = View * World)。 何が良いのか、そしてその理由は?
8 matrix 

1
2Dスケルタルアニメーションの変換
しばらくの間、2Dスケルトンアニメーションシステムを構築しようとしていましたが、仕上げにかなり近づいていると思います。現在、私は以下のデータ構造を持っています: struct Bone { Bone *parent; int child_count; Bone **children; double x, y; }; struct Vertex { double x, y; int bone_count; Bone **bones; double *weights; }; struct Mesh { int vertex_count; Vertex **vertices; Vertex **tex_coords; } Bone->xそしてBone->y骨の終点の座標です。開始点は(bone->parent->x, bone->parent->y)またはによって指定され(0, 0)ます。ゲームの各エンティティにはがありMesh、Mesh->verticesエンティティの境界領域として使用されます。Mesh->tex_coordsテクスチャ座標です。エンティティの更新関数では、の位置をBone使用しVerticesて、それにバインドされているの座標を変更します。現在私が持っているのは: void Mesh_update(Mesh *mesh) { int i, j; double sx, sy; …

1
C ++で行列をどのように表す必要がありますか?
私は自分に3D数学を教えており、その過程で自分の基本的なエンジン(一種)を構築しています。私のC ++マトリックスクラスを構造化する最良の方法は何だろうと思っていました。いくつかのオプションがあります: 個別のメンバー変数: struct Mat4 { float m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44; // methods } 多次元配列: struct Mat4 { float[4][4] m; // methods } ベクトルの配列 struct Mat4 { Vec4[4] m; // methods } それぞれに良い面と悪い面があると思います。 以下からのグラフィックスとゲーム開発のための3D数学入門、第2版の P.155: 行列は1ベースのインデックスを使用するため、最初の行と列には1の番号が付けられます。たとえば、a12(a「a12」ではなく「1つ2つ」と読む)は、最初の行、2列目の要素です。これは、0ベースの配列インデックスを使用するC ++やJavaなどのプログラミング言語とは異なることに注意してください。行列には列0または行0がありません。実際の配列データ型を使用して行列が格納されている場合、このインデックスの違いにより混乱が生じる可能性があります。このため、幾何学的な目的で使用される型の固定サイズの小さな行列を格納するクラスでは、float a11floatなどの言語のネイティブ配列サポートを使用する代わりに、各要素にのような独自の名前付きメンバー変数を与えるのが一般的ですelem[3][3]。 …

2
変換行列を指定して新しい頂点の位置を計算しますか?
4x4変換行列または単純に9つの浮動小数点(positionX、positionY、positionZ、rotationH、rotationP、rotationR、scaleX、scaleY、scaleZ)を指定して、頂点の新しい位置を取得するにはどうすればよいですか?通常、最終的なメッシュ(または「ノード」、「オブジェクト」、または「ジオメトリ」)にマトリックスを割り当てることができますが、今は手動で行う必要があります。
7 3d  matrix  vertex 

1
骨のアニメーション-行列と計算
プロジェクトの完了に関しては、最終段階にありますが、アニメーションシステムを実装する直前です。 クライアントは「ボーンアニメーション」を選択することにしました。つまり、このアニメーション化されたオブジェクトが持つすべてのフレームとすべてのボーンに対して、各変換マトリックス(matrix4x4 rotation + translation)をエクスポートする必要があります。 ゲーム内のオブジェクトは3DS Max Physiqueモディファイヤでアニメーション化されているため、頂点ごとにボーン/ウェイトデータがあります。しかし、この件について少し理解するために、ここでは説明を簡略化します。 この投稿を2つのポイントに分割します。 すべてのフレームのボーンマトリックスのエクスポート 後のアニメーションの目的でボーンの位置をエクスポートする正しい方法について扱います。この場合、このボーンの影響を受けるすべての頂点をフレームXのボーンの位置に「移動」および「回転」する必要があります。 最終的な頂点位置の計算 フレームXのボーン変換に従って新しい頂点位置を計算するために、適切な行列演算について扱います。 1.フレームごとにボーンマトリックスをエクスポートする アニメーション化されたオブジェクトをエクスポートするときに、次のことを行う必要があることを正しく理解していますか? フレーム0でBONE変換行列を取得し、この行列を反転します FRAMExでBONE変換行列を取得 1 * 2を乗算して、FRAMExでのBONEの変換オフセットを取得します [pseudocode] // Animation export // For each frame, export bone transformation offset for(int iFrame = 0; iFrame < vFrames.size(); iFrame++) { // For every bone in the object for(int iBone …

1
遠近法マトリックスが右手系座標系か左手系座標系かを知るにはどうすればよいですか?
たとえば、パースペクティブマトリックスを次のように定義するとします。 m[0] = 1.f / ( aspect * focalLength ); m[5] = 1.f / focalLength; m[10] = -zFar / (zFar - zNear); m[11] = -1; m[14] = -(zFar*zNear)/(zFar - zNear); 遠近法マトリックスが右手系座標系か左手系座標系かをどのように確認できますか?

3
スプライトのグループの回転の原点を調整するにはどうすればよいですか?
現在、スプライトをグループ化して、描画に回転変換を適用しています。 private void UpdateMatrix(ref Vector2 origin, float radians) { Vector3 matrixorigin = new Vector3(origin, 0); _rotationMatrix = Matrix.CreateTranslation(-matrixorigin) * Matrix.CreateRotationZ(radians) * Matrix.CreateTranslation(matrixorigin); } ここで、原点は私のスプライトグループの中心点です。この変換をグループ内の各スプライトに適用します。 私の問題は、原点を調整すると、スプライトグループ全体が画面上で再配置されることです。 変換で使用される回転のポイントを、スプライトグループの位置とどのように区別できますか?この変換行列を作成するより良い方法はありますか? 編集 次に、Draw()関数の関連部分を示します。 Matrix allTransforms = _rotationMatrix * camera.GetTransformation(); spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, null, null, null, allTransforms); for (int i = 0; i < _map.AllParts.Count; i++) …
7 xna  sprites  matrix 

2
ベクターゲーム(ワイヤーフレーム、エリートのような)の理論と実装?
EliteやStar Wars Atariなどのベクターゲームが根本からどのように構築されたかについて詳しく知りたいです。問題は、OpenGLやDirectXのような最新の3D APIを使用してベクターグラフィックスを実装する方法ではありません。これを行うのは非常に簡単であり、ゲームのようにゼロからベクター/マトリックスシステムを構築する必要がないためです。 これらのゲームについて私が推測するいくつかのこと: 彼らは非常に低レベルで動作し、ASMで書かれています 彼らは実際の3Dゲームであり、After Burnerのようにそれを偽っていません。Wolfenstein 3Dとは異なります。アフターバーナーはrotozoom /ラスターエフェクトを使用し、Wolfenstein 3Dはレイキャスティングと2Dスケーリングを使用しました。上に移動できないため、実際には3Dではありません。Duke Nukem 3Dが使用したビルドエンジンが気に入っても、壁以外はすべてスプライトです。Star Foxは実際の3Dモデルを使用しているので、それに近いですが、実装はSNESのSuper-FXチップを使用しており、おそらくスキャンライントリックを採用しています。Eliteはおそらく(少なくともElite NESのような一部の実装では)上記のスキャンライントリックを使用していることを知っていますが、カスタムビルドのアーケードマシンを使用していたため、SWAについてはわかりません。どちらにせよ、私はそれについてもっと知りたいです。 それらの3Dモデルは実際の3Dモデルです。それらはベクトルとして定義され、カメラの位置に従って変換されます。 エリートのソースを分解して自分でどのように行われたかを確認することをお勧めしますが、その前に、それらがどのように作成されたか、および同様の手法を示す最新のオープンソースプロジェクトがあるかどうかを知りたいと思います。 。Oolite(OpenGLとObj-Cを使用)のようなEliteのリメイクを意味するのではなく、OpenGLのようなAPIを直接使用することを避け、OpenGLのようなAPIを直接使用しないプロジェクト-必ずしも低レベルのプロジェクトではなく、SDL(OGLなし)のような2Dライブラリを使用する少なくとも今のところは十分です。 MESA3Dのソースコードには、EliteやSWAなどのゲームが実装したルーチンの多くが含まれていることを知っています。ゲームのコンテキストでそれらを確認したいだけです。EliteとSWAが基本的に行ったのは、ラスタライズを実装し、モデルとローダーのフォーマットを作成したことです(少なくともSWAには、ツールを使用してモデラーから構築されたモデルがあると確信していますが、TIEファイターをハードコーディングすることは不可能ではありません)正確に行うのは難しいことです)、そして他の多くのことに気付かないかもしれません。しかし、それに入るのは本当に時間がかかり、そこにあるものの多くは気にしません。Eliteのようなゲームは、コンピューターとコンソールが当時持っていたROMとRAMが低いため、非常に軽量であったことを覚えておいてください。 私は3Dグラフィックスに不慣れです。すべての私の仮定は、3Dジオメトリと学校レベルの数学についての私の限られた知識に基づいています。しかし、私はこれらのゲームがどのように機能するかについて、詳細について知りたいと思っています。存在すれば、エリートや同様のゲームの開発についての本を購入します。いくつかの一般的な提案で十分です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.