2011-02-05 6 views
0

私は最適化しようとしているという問題があります。私はOpenGL関数を再現していますが、現在の問題はn点のシェイプをラスタライズし、そのポイントに基づいて色をブレンドすることです。色を手動でブレンドする

ラスタが私の実装は非常に遅く、私はそれを少し(だけでなく、多くのことを)最適化したい長さScreen.Width * Screen.Height * 3

のバイトの1つの薄暗い配列に格納されます。私はシェイプの各ピクセルを訪れ、各点から距離を取る(Sqrt(x^2 + y^2)を使って、物事は遅く見える)、その距離とvertの色を使ってその色を決定する特定のピクセル。

私はこれを行うより速い方法があることを知っています。どんな助けも素晴らしいだろう! ああ、私はC#btwで働いています。

+0

私はあなたの問題を発見したと思います:あなたは「OpenGL関数を再現しています」。グラフィックスの操作は難しく、遅くなることが保証されています。あなたよりも賢い人(そして私)は、すでにそれらのルーチンを最適化する最良の方法を考え出しています。なぜあなたはそれを再発明することを強く主張しますか? C#からOpenGLライブラリを呼び出します。シンプル。 –

+0

ご意見ありがとうございます。私はそれが以前に解決されたことを知っていますが、それについて学ぶことはまだ楽しいです!私はそれを働かせました(あなたが5-10 FPSを働かせていれば)、重心座標について学びました!私はすべてそれがComputer Graphicsへの成功したベンチャーであったと思います。 –

答えて

3

OpenGL、Directx、さらにはGDI +を使用しない理由があるとしましょう。

ラスタライズしようとしているグラフィカルプリミティブが本当にわかりません。私はそれがnポイントのポリゴンであると仮定します。このような形の内部に色を補間することは、これを行うための異なるアプローチがあるため、完全に自明ではありません。それで問題は、あなたは何を望みますか?

凸凹(または自己交差)ポリゴンの違いを考えてください。結果がどのように見えるべきかは、実際にはっきりしていません。グラフィックスハードウェアが三角形以外のことを心配するのはそのためです。私はあなたが(ほとんど)同じことをお勧めします。

三角形内の色を補間するのはかなり簡単で曖昧ではありません。 googleの流行語はバイリジェント座標です。

したがって、残りの問題は、ポリゴンを三角形分割する方法です。

  • は、凸多角形のためには、単純なかつて私はあなたが現在、すべてのポイントのために使用していると仮定したのと同様の補間を使用して中間点の色を補間することができます。その中間点からあなたの形状の点まで三角形を広げ、それらの内部を補間します。 正しい色を得るためには中間点が必要です。クワッドを考えてみましょう:右上と左下のコーナーは赤で、他の2つのコーナーは青で表示されます。さて、クワッドを2つの三角形に分割する2つの可能性があり、どちらを使用するかに応じて、一定の色(赤色または青色)の対角線があります。しかし、補間された色(暗いマゼンタのようなもの)で中間点を挿入すると、すべてがうまく見えます(双線形補間を使用していたようです)。

  • 自己交差するポリゴンの場合は、誰もが望むよりも悪いです。最初に手動で交点を決定し、非自己交差ポリゴンでポリゴンを分割し、次に各ポリゴンを処理します(今のように、自己インターセットによって導入された新しい点の混合色を計算します)。

  • 凹型ポリゴンの場合は、ポリゴンを凸状に分割し、上記のように処理する必要があります。 これは色補間の結果を変更します!そのため、ポリゴン内部の色(カットされた部分の端にある)が正しいことを確認する必要があります。したがって、凸多角形の中間点の考え方と同様に、補間された色を保持するポリゴンの内部に新しい点を導入する必要があります。これを行う最良の方法は、多角形を形成する点ののボロノイセルを計算することです。これらのセルのコーナーポイントは、良好な補間ポイントでなければなりません。

私はあなたの問題をどのように処理するかについて幾分明らかにできたと思います。 これらのことすべてを行うことは可能ですが、それは実際に努力する価値がありますか? "Cody Grey"のように言った:なぜ複雑なものを再発明するのか?

+0

返信いただきありがとうございます!私は、私が今作業している主な図形は三角形と四角形ですが、一般化されたポリゴンの解決策を望んでいたと言わなければなりませんでした。今では "なぜ"、私が取り組んでいる2つの事柄:OpenGLとWindows Mobileと.netCFの研究ですが、これをモバイルで実装することは、実際には何よりも学習になります。私は本当にグラフィックスに興味があり、この研究は非常に困難でした。私はXiaolin Wuのラインアルゴリズムを使って作業を終えました。ありがとうございました! –

関連する問題