gpt4 book ai didi

c++ - 如何在opengl中使用子窗口

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:28 26 4
gpt4 key购买 nike

我正在尝试使用子窗口通过旋转从曲线中生成对象。我能够生成所有曲线。现在我也把窗口分成两部分。我想在左侧子窗口中绘制曲线,并希望通过沿右侧的轴旋转它来生成实体。我无法在正确的子窗口中绘制任何内容。

编辑:

好的,这就是我在左侧部分绘制点的方式。这些点基本上是用户的点击。我捕获这些事件并制作一个列表,然后使用 for 循环打印它们。

// This function takes a list of points and draws the dots in the screen
void drawDot(vector<vec2> listPts)
{
glBegin(GL_POINTS);
glColor3f(1.0,1.0,1.0);

if(j==0) // J=0 means points are being added using add option, no insert after is currently being used
{
for(int i=0;i<listPts.size();i++)
{
glVertex2i(listPts[i].x,listPts[i].y);
}
}
else if(j!=0)// this else part is for making selected points look red, as for this j!=0
{
for(int i=0;i<listPts.size();i++)
{
if(i==j ) // make only the selected point red
{
glColor3f(1.0,0.0,0.0);
glVertex2i(listPts[i].x,listPts[i].y);
}
else // rest all the points are same as before i.e. white
{
glColor3f(1.0,1.0,1.0);
glVertex2i(listPts[i].x,listPts[i].y);
}
}
}

glEnd();
glFlush();
}

现在假设我有一组点。我只想在正确的子窗口中绘制相同的点,看看它是否有效。所以,我创建了一个按钮,每当我按下按钮时,我都想切换到正确的窗口并绘制一些东西。我在 VS2010 中使用调试并检查是否调用了绘图函数并且它正在被调用但屏幕上仍然没有任何内容。

这是我用来在第二个窗口中绘制的函数。

void drawDotWin2(vector<vec2> listPts)
{
glBegin(GL_POINTS);
glColor3f(1.0,1.0,1.0);

for(int i=0;i<listPts.size();i++)
{
glVertex2i(listPts[i].x,listPts[i].y);
}
glEnd();
glutWireTeapot (0.5);
glFlush();
}

当我按下按钮时。上面的函数被调用但没有任何反应。我的坐标系错了吗?不过我并没有做太多设置坐标系的事情。

最佳答案

我建议尽可能避免使用 GLUT 实用程序,尤其是当它们在应用程序实现中不是绝对必要的时候; glutCreateSubWindow 可能是其中之一。

如果您需要将窗口分成不同的部分,请了解如何使用 glViewport .

例如,如果主窗口有一个 800x600 像素的客户区,并且我想水平分割窗口,绘制例程将是:

void draw()
{
// Draw on left side
glViewport(0, 0, 400, 600);
glClear(...);
gluOrtho2D(0, 0, 400, 600);

// ... DrawCommands1

// Draw on left side
glViewport(400, 0, 400, 600);
glClear(...);
gluOrtho2D(0, 0, 400, 600);

// ... DrawCommands2
}

这样两张图就不会重叠了。在每一侧绘制的基元被定义的视口(viewport)区域裁剪,视口(viewport)区域以相对于主窗口客户区域的像素坐标定义。

投影矩阵(在上面的例子中是一个 2D 正交矩阵)是相对于视口(viewport)区域的,而不是相对于窗口区域的,事实上你不需要担心视口(viewport)位置。

另请注意,每个 GLUT 子窗口都会创建一个 OpenGL 上下文,实际上每个 GLUT 子窗口都拥有自己的状态,并且状态更改不会影响其他子窗口。相反,在我的回答中,这两个例程共享完全相同的 OpenGL 上下文。

关于c++ - 如何在opengl中使用子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468327/

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