gpt4 book ai didi

Qt/OpenGL - 在 3D 场景上绘制 2D "scale line"

转载 作者:行者123 更新时间:2023-12-04 08:26:37 24 4
gpt4 key购买 nike

<分区>

我有一个 QGLWidget 的子类“GLWidget”,我在其中渲染 3D 场景。我可以旋转并放大它。

我用 QTimer 调用以下函数:

void GLWidget::processCurrent()
{
draw();
printStats();
glFlush();
swapBuffers();
}

主要的 OpenGL 渲染函数“draw()”是:

void GLWidget::draw()
{
if (isDisplayFirst)
{
isDisplayFirst = false;
glViewport(0, 0, w_width, w_height);

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix

glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrixi

gluPerspective(45.0f, (float)w_width / w_height, g_nearPlane, g_farPlane);
gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glScalef(0.03f, 0.03f, 0.03f);
}

rotateScene();

glClearColor(0.0 ,0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_POINT_SPRITE);
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);

glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE);

GLuint vbo_disk = 0;

glBindBuffer(GL_ARRAY_BUFFER, vbo_disk);
glVertexPointer(4, GL_DOUBLE, 4*sizeof(double), Galaxy->pos);
glEnableClientState(GL_VERTEX_ARRAY);

glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
glDrawArrays(GL_POINTS, 0, Galaxy->getNumParticles_disk());

glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_VERTEX_ARRAY);

glDisable(GL_BLEND);
glDisable(GL_POINT_SPRITE);
}

我已经使用“printStats()”函数在此 GLWidget 上呈现 2D 文本(统计数据)。我现在想在这个 3D 场景上画一条“2D 比例线”。

我通过执行 printStats() 成功绘制了这条线:

 glDisable(GL_TEXTURE_2D);
glColor3f(1.0f, 1.0f, 1.0f);
glLineWidth(3.0f);
glBegin(GL_LINES);
glVertex2d(5, 40);
glVertex2d(20, 40);
glEnd();
glEnable(GL_TEXTURE_2D);

但我的问题是,当我进行旋转或缩放时,这条线会随着 3D 场景移动。

在能够对 3D 对象进行操作的同时锁定此 2D 线的方法是什么?

我想避免使用覆盖 paintEvent 的“overpainting”。

我也尝试使用 glPush/Pop Matrix,但 2D 和 3D 之间存在冲突。

你能给我一些建议吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com