擅长:python、mysql、java
<p>你的代码有几个问题。在</p>
<ul>
<li>窗口大小与GluOrthor2D中使用的数据不同</li>
<li>您依赖于像素精确光栅化,而OpenGL不保证这一点。在</li>
</ul>
<p>您正在搜索的答案在“红皮书”(即OpenGL编程指南)中描述,特别是在<em>附录G,编程技巧</em>中。我也建议你阅读附录H,不变性。在线版本可以在以下链接找到:<a href="https://www.glprogramming.com/red/" rel="nofollow noreferrer">https://www.glprogramming.com/red/</a></p>
<p>还有</p>
<ul>
<li>不需要每次都调用一次glpoint。。。在</li>
<li><p>每个点都使用glBegin/glEnd对,这是巨大的浪费
资源。可以使用一对glBegin/glEnd绘制完整的圆:</p>
<pre><code>glBegin(GL_POINTS)
glColor3f(1.0, 0.0, 0.0)
for i in range(361):
x=float(50*cos(i*pi/180.0))+320
y=float(50*sin(i*pi/180.0))+320
glVertex2f(x,y)
glEnd()
</code></pre></li>
<li><p>你正在使用一组非常密集的GL_nu点来画圆,但这将不会产生正确的圆。如果半径较小,将对同一窗口像素进行多次光栅化。如果你增加足够的半径,它将导致一组不相连的点。在您的情况下,我会使用GL_LINE_LOOP:</p>
<pre><code>glBegin(GL_LINE_LOOP)
glColor3f(1.0, 0.0, 0.0)
for i in range(0, 360, 5):
x=float(50*cos(i*pi/180.0))+320
y=float(50*sin(i*pi/180.0))+320
glVertex2f(x,y)
glEnd()
</code></pre></li>
<li><p>最后但并非最不重要的是,这是OpenGL的古老用法。除非你有很好的理由,否则我建议你换一个新的OpenGL版本。</p></li>
</ul>