が
"構造体GLUquadric" をGoogleで検索するように見える
を探して任意の情報や手がかり...しかしを与えていません」構造体GLUquadric {"
は、私が望んでいた場所に連れて行ってくれました。私が発見し、使用してWORKS
OGLES_GLU.h
構造体は次のとおりです。
[StructLayout(LayoutKind.Sequential)]
public struct GLUquadric
{
int normals;
bool textureCoords;
int orientation;
int drawStyle;
}
だから今、私は使用することができます。
[DllImport("glu32.dll")]
static extern void gluSphere(ref GLUquadric qobj, double radius, int slices, int stacks);
public static void Sphere(ref GLUquadric qobject, double Radius, int Slices, int Stacks)
{
gluSphere(ref qobject, Radius, Slices, Stacks);
}
OpenGLを今球体を描く。
注:インポートされたOpenGLの機能で球を描画するときに、他のあなたのプログラムでメモリの問題を持って、ちょうど新しいGLUQuadric()
を宣言し、ref
gluSphere
のようにそれを送る、それが仕事だ行うgluDeleteQuadric();
レッツGCを呼び出すことはありません。私のプログラムの実装がこの方法です
:
[StructLayout(LayoutKind.Sequential)]
public struct GLUquadric
{
int normals;
bool textureCoords;
int orientation;
int drawStyle;
public void Init(int norm, int draw, int orient, bool textCoor)
{
normals = norm;
drawStyle = draw;
orientation = orient;
textureCoords = textCoor;
}
}
用途は以下のとおりです。
public static void DrawSphere(T Radius, Int32 Slices, Int32 Stacks,
GLU.QuadricDrawStyles Style, GLU.QuadricNormals Normal, Color color)
{
OpenGL.SetColor(color);
GLU.GLUquadric quadric = new GLU.GLUquadric();
quadric.Init((int)Normal, (int)Style, 0, false);
GLU.Sphere(ref quadric, (dynamic)Radius, Slices, Stacks);
}
実装は、完全なオブジェクト指向である私の場合には有効ではありませんdatenwolfの答えを補完する
したがって、すべてのSphereは静的なGL関数からgluQuadricDrawStyle
とgluQuadricNormals
として隔離されているので、構造体を空のままにしても何も描画されないので有効ではありません。
このアプローチの問題点は、GLUquadricの内部メモリのレイアウトがわからないことです。 *いくつかの* GLU実装の構造定義が見つかりましたが、インストールされたGLU実装が完全に異なる構造体レイアウトを使用するシステムになってしまった可能性があります。その場合、** BAD * *(大文字と小文字はすべて大胆に固定) *これをしないでください!*これを行うと、痛みの世界に入ります。 UBを呼び出すときのCコードの姿勢の説明:https://imgur.com/ZlB9kHD – datenwolf
私が言ったように、これは動作しており、プロパティは正しいものです。 このstruct参照を送信すると、P/Invokeの呼び出しを避けるプロパティを完全に制御できます。 –
システム上のGLUの実装は、見つかったものと同じ構造体レイアウトを使用するため、偶然によってのみ動作します。しかし、あなたのOSを更新したり、プログラムを配布したりすると、完全に異なる内部構造体レイアウトを使い、*すべてが破損するようなシステムになってしまうかもしれません。これは本当にあなたのために理解するのが難しいですか?ここでは、*不透明な*データ型を扱っています。あなたはそれが内部でどのように見えるかを知っているだけではありません。それは実際には何も仮定することが禁じられています。 – datenwolf