タグ付けされた質問 「software-rendering」

8
OpenGL、SFML、SDLには、ソフトウェアレンダリングと比べてどのような利点がありますか?
フレームワークなどを使用せずにCasey Muratoriがゲームエンジンを作成するHandmade Heroストリームを見始めました。昨日、私は彼が画面に画像が描かれる方法を示した部分に着きました。私が理解した限り、彼は描画したい画面のサイズと同じ大きさのメモリを割り当てました。そして、彼はビットマップを作成し、それを割り当てたバッファメモリに渡し、OS固有の関数を使用して画面に描画しました。 これは非常に簡単です。GameMakerを使用し、Love2Dに変更し、Sprite Kitで少し作業しましたが、この時々混乱するレイヤーの下で実際に何が起こっているのか常に疑問に思っていました。 それを考えると、単にバッファを割り当て、ビットマップを渡して画面に描画するだけでよいのに、なぜグラフィックライブラリ(OpenGL、SFML、SDLなど)を使用する必要があるのでしょうか。 その後、画面に明確なものを描画したい場合は、ビットマップに書き込むだけで、バッファに渡されます。私はプログラミングを始めたばかりですが、これは非常に簡単に思えます。私が間違っている場合は修正してください。

3
ソフトウェアレンダリングはどのように行われますか?
リアルタイムソフトウェアベースのラスター化を検討したいと思います。最近はすべてがGPUに向かっていることは知っていますが、ソフトウェアレンダラーを使用するのが理にかなっているゲームがいくつかあります。 例:ボクセルトロン Voxatronは、ボクセル(小さな立方体など)で作られた世界で行われるアリーナシューティングゲームです。ゲーム内のすべては、メニューやプレーヤーのインベントリなど、仮想128x128x64ボクセルディスプレイに表示されます。よく見ると、インベントリ(スコア/ライフ/弾薬)が地面のオブジェクトの一部に影を落としているのを見ることができます。 私は、ボクセルレンダリングとモデリングツールに長い間取り組んでおり、大規模な冒険アドベンチャーゲームを作成するという究極の目標を掲げています。約半年前、それは私がConfluxのアリーナ射手で行っていた仕事と融合しました。これが結果です。 これは非常にシンプルなゲームです。ほとんどの場合、Robotronは3次元の破壊可能な世界で、間抜けな生き物と一緒に設定されています。破壊性の影響がゲームプレイにどれほど大きな影響を与えるかはわかりませんが、壁の破片を吹き飛ばすのは楽しいことです。また、怖いモンスターから身を隠すための障壁を構築するために使用できる実験的な壁構築ピックアップを追加しました。 ゲームは小さなアリーナで行われます。そのうちのいくつかは、ナイトロアとスマッシュテレビの間にあるアクションセットを備えた部屋を備えています。これは、元の冒険に基づいたデザインの一部であり、テーマの環境を作成するための言い訳です。 特徴: ソフトシャドウを使用したカスタムソフトウェアレンダリング。 内蔵のサウンドおよび音楽シンセサイザー(予告編音楽の作成にも使用)。 ゲームの記録の再生と投稿。

4
今日、ハードウェアレンダリングではなくソフトウェアレンダリングを使用するのはなぜですか?
CPUやソフトウェアのレンダリングとは対照的に、私は想定していますか? 一般に、現在のレンダリングはすべて、GPUベースではなく、OpenGLまたはDirect Xを使用しているように見えますか? 誰かが私にここでいくつかの情報を教えてもらえますか、適切な答えが見つかりませんか?

2
4D同種空間でクリッピングするときにGPUが実際に行うことの詳細は?
小さなソフトウェアレンダラーを実装して、プログラム可能なレンダリングパイプラインを学習しています。私はそれを「ハードウェア」スタイルで実装しようとしています。しかし、私はGPUパイプラインに慣れておらず、均一クリッピングの問題がいくつかありました。 同種のクリッピングスペースには、各頂点でさまざまなw変数が含まれます。各頂点オブジェクトの同種座標(射影行列とwによる同種除算の間)は、独自のクリッピング空間にありますか?もしそうなら、どのようにラインと三角形をFrustumよりも近く、またはカメラの後ろに伸ばすかをクリップする方法(つまり、w <= frustum_znear)? 更新:このスレッドは、同種空間でのクリッピングは4D同種空間での交差問題に直接つながると述べています。つまり、交点はp_vec4 = t * point1_vec4 + (1 - t) * point2_vec4です。言う私はP0(-70, -70, 118, 120)とP1(-32, -99, -13, -11)して4D均質な空間で、交点plane w = -z(NDCにおけるZ = -1である)である(-35, -96, -1, 0.9) t = 0.99NDC空間においてcorrresponding頂点オブジェクトを取得する方法、? そして、正しい交点を取得したら、頂点シェーダーによって生成された頂点オブジェクト間の補間を行って、新しい頂点オブジェクトを取得する必要がありますか?

1
スキャンラインを使用したZバッファーの深度補間
私は独自のソフトウェア3dラスタライザを作成する必要があります。これまでのところ、三角形で作られた3dモデルを2d空間に投影できます。 ポイントを回転、移動、投影して、各三角形の2D空間表現を取得します。次に、3つの三角形のポイントを取り、スキャンラインアルゴリズムを実装して(線形補間を使用)、三角形のエッジ(左と右)に沿ってすべてのポイント[x] [y]を見つけて、三角形を水平にスキャンできるようにします。行ごとに、ピクセルで塗りつぶします。 これは機能します。ただし、zバッファリングも実装する必要があります。これは、三角形の3つの頂点の回転および変換されたz座標がわかっているため、スキャンラインアルゴリズムで見つけた他のすべての点のz座標を補間する必要があることを意味します。 概念は十分にはっきりしているように見えます。私はまずこれらの計算でZaとZbを見つけます。 var Z_Slope = (bottom_point_z - top_point_z) / (bottom_point_y - top_point_y); var Za = top_point_z + ((current_point_y - top_point_y) * Z_Slope); 次に、各Zpに対して水平方向に同じ補間を行います。 var Z_Slope = (right_z - left_z) / (right_x - left_x); var Zp = left_z + ((current_point_x - left_x) * Z_Slope); そして、現在のzがそのインデックスで以前のzよりもビューアに近い場合は、カラーをカラーバッファに書き込み、新しいzをzバッファに書き込みます。(私の座標系はx:左->右、y:上->下、z:あなたの顔->コンピュータ画面です;) 問題は、それが問題になることです。プロジェクトがここにあり、「Z-Buffered」ラジオボタンを選択すると、結果が表示されます(「Z-Buffered」モードでは、ペインターのアルゴリズム(ワイヤフレームを描画する場合のみ)を使用していることに注意してください)デバッグ用) PS:補間する前にzを逆数(つまり)に変換する必要があることをここで読みましたz = …

2
純粋なOpenGLソフトウェアレンダリング
機械学習アルゴリズムをトレーニングするには、ハードウェアレンダリングサポートなし(グラフィックカードなし)で一部のジオメトリをOpenGLでレンダリングする必要があります。したがって、純粋なソフトウェアでのレンダリングを考えていましたが、すでにMesaを見てきました。純粋なソフトウェアでレンダリングできるようですが、今のところOpenGL 2.xしか入手できませんが、OpenGL 3.3が必要です。 それが可能かどうか誰か知っていますか?もしそうなら、どうやって?私たちはいつもつまずきに遭っているようです。 (背景、それを行う理由:学習アルゴリズムをトレーニングするために、ハードウェアでのレンダリングを許可しないPCクラスター上でソフトウェアの多くの実行を実行する必要があります。) 任意のヒント、アイデア、およびポインターが高く評価されます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.