0

ムービー クリップがどのように機能するかをおそらく理解する前に Actionscript を使用したことがある場合は、設定できる幅、高さ、x、y の値があり、それらを変更するのは非常に簡単です。

しかし今、libgdx (Java) と LibCinder (C++) を使用してみましたが、多くのことがあり、レンダリングは OpenGL 経由で行われ、シェーダーなどが必要です」、テクスチャで作成した 3D メッシュをインポートすることができましたが、メッシュの位置/サイズの変更に関しては、少し奇妙です..

私が使用しようとした両方のライブラリでは、メッシュのサイズや位置を変更する実際の方法はありません.. (最初は、mesh.width/height、mesh.scale、mesh.x のようなものを期待していました) /y/z)

私の質問は、これらの値を設定する実際のアプローチは何ですか?

4

2 に答える 2

3

あなたがする必要があるのは と呼ばれ3d transformationsます。

通常、OpenGL または Direct3D で行う方法は、メッシュの頂点に変換行列を掛けることです。

ほとんどの場合、メッシュはモデリング プログラムからエクスポートされ、オブジェクト スペースにあります。これらのメッシュをワールドの周りに配置するには、それらをワールド マトリックスで乗算してワールド空間に取り込む必要があります。このワールド マトリックスは、平行移動、回転、スケーリングをすべて 1 つのマトリックスに制限できます。DirecXMath ライブラリは、これらの行列を簡単に作成する方法を提供し、OpenGL 用の無料のライブラリもあります。

ワールド マトリックスを作成したら、それを頂点シェーダーに渡し、受信した各頂点をマトリックスで乗算して、ワールド空間の頂点を取得します。

基本的な頂点シェーダーは、HLSL では次のようになります。

cbuffer cbPerObject : register(b0)
{
    float4x4 world;
    float4x4 viewProj;
};

struct VS_INPUT
{
    float3 position:SV_POSITION;
};

struct VS_OUTPUT
{
    float4 position:SV_POSITION;
};

VS_OUTPUT main( VS_INPUT vsin )
{
    VS_OUTPUT output;

    float3 position = mul( float4(vsin.position,1.0), world).xyz;
    output.position = mul(float4(position,1.0), viewProj);

    return output;
}

したがって、各メッシュ インスタンスに異なるワールド マトリックスを指定すると、それらはすべて異なる場所に、異なるスケールと回転で配置できます。

これviewProjは、カメラとビュー方向、位置/回転、FOV、ニア/ファー プレーンなどの投影設定から計算される、ビューと投影のマトリックスを組み合わせたものです。

于 2013-03-28T13:45:17.437 に答える
1

Model Matrix と View Matrix を読み込みます。オブジェクトの座標を使用してこれらを生成し、生成されたマトリックスをシェーダーに渡します。シェーダーはメッシュを移動します。

http://www.songho.ca/opengl/gl_transform.html

于 2013-03-28T13:44:49.123 に答える