2

最近、私はqt3d(QGlViewとQGLSceneNodeを使用)を使い始めました。生成されたモデルに頂点ごとの法線を提供し、モデリングアプリにGL_FLATシェーディングモデルを使用したいと考えています。しかし、glShadeModel(GL_FLAT)を呼び出すだけでは何も起こりません。シェーディングは、スムーズモードのように見えます。

qt3d / qopenglがその関数を呼び出す場所を見つけようとしましたが、QGLBuilder以外に何も見つかりませんでした。

ネイティブのopengl関数を機能させるには、QOpenGLContextで何かをしなければならないようです(他のいくつかのopengl関数でも同じ問題があります)

または、QGLPainter / QGLSceneNodeが内部でシェーディングモデルを設定し、それをまったく使用する必要がないのでしょうか。

4

1 に答える 1

0

あなたはすでに解決策を見つけたか、あきらめたと思いますが、完全を期すために、私があなたを正しく理解していれば、これが役立つはずです:

QGLPainterを描画 (レンダリング) するときに使用される「高レベル」エフェクトを介してシェーディング プログラムを設定しますQGLSceneNode。この関数を使用して設定できる標準的な効果がいくつかあります。

void QGLPainter::setStandardEffect(QGL::StandardEffect effect);

標準効果はドキュメントで定義されています。必要なものが見つからない場合は、次の関数を使用してユーザー エフェクトを渡すことができます。

void QGLPainter::setUserEffect(QGLAbstractEffect * effect)

QGLShaderProgramEffect継承QGLAbstractEffectし、この場合探しているクラスです。

また、Qt3D は「高レベル」の OpenGL ラッパーのようなものであることに注意してください。ほとんどの場合、OpenGL コマンドを直接呼び出すことは「正しい方法」ではありません (初期化コードやその他のものを除く)。OpenGL API ではなく、何をどのようにレンダリングするかを Qt3D に指示する必要があります。

于 2012-09-12T23:19:40.457 に答える