では動作しませんGL_LINE_STIPPLEが、私はこれらの日OpenGLを学んでいます、と私は本(OpenGLのSuperBible)上のサンプルコードをコンパイルしようとしたUbuntuの
コードは、これを好き:最初GL_LINE_STIPPLE
を開くためにglEnable(GL_LINE_STIPPLE)
を使用し、その後glLineStipple(2, (GLushort)0x00ff)
、最後に私はいくつかの線を描画しますが、実行すると、ちょうど正常な線が表示されました。 (Ubuntuで)
しかし、私はWindowsで同じコードをコンパイルしました!
なぜですか? WindowsとLinuxの間に異なる詳細はありますか?
#include <QtGui>
#include "GLWidget.h"
GLWidget::GLWidget(QWidget *parent)
: QGLWidget(parent)
{
setFormat(QGLFormat(QGL::DoubleBuffer));
}
GLWidget::~GLWidget()
{
}
void GLWidget::initializeGL()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_LINE_STIPPLE);
}
void GLWidget::resizeGL(int w, int h)
{
if(h == 0)
h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-100, 100, -100, 100, -1, +1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
drawLine();
}
void GLWidget::drawLine()
{
GLint factor = 1;
GLushort pattern = 0x00ff;
glColor3f(1.0f, 1.0f, 1.0f);
for(GLfloat i = -90.0f; i < 90.0f; i += 20.0f)
{
glLineStipple(factor, pattern);
glLineWidth(5.0);
glBegin(GL_LINES);
glVertex2f(-80.0f, i);
glVertex2f(+80.0f, i);
glEnd();
factor++;
}
}
あなたのアイデアに答えてくれてありがとう、私は最新のドライバをインストールしようとしていましたが、プログラムは完璧に動作していますので、問題は解決されました! – Kenfly
しかし、他のいくつかの問題が出てくる、私のノートブックは、私はウィンドウのフォームをドラッグすると、ウィンドウが頻繁に、私はこの問題を解決するために長い時間がかかったが、失敗すると、例えばatiドライバをインストールした後、あまり流動的に実行されません。 – Kenfly
@ user1149333:あなたが経験するちらつきはあなたのプログラムの問題ではありませんが、ドライバが内部的にウィンドウのサイズをどのように管理しているかのアーティファクトです。あなたはそれについて何もできません。ウィンドウの内容はサイズ変更後で、再描画の前には定義されていないため、バグではありません。私はマシンで全く同じことが起こることを確認することができます。メサドライバについて:OpenGL-1.2のラインスティプルをサポートしていないのは間違いです。 – datenwolf