我正在尝试用C++/OpenGl绘制简单的圆
我的代码是:
#include <GL/glut.h>
#include <math.h>
void Draw() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_QUADS);
glColor3f (0.0, 0.0, 0.0);
glVertex3f (0.1, 0.1, 0.0);
glVertex3f (0.9, 0.1, 0.0);
glVertex3f (0.9, 0.9, 0.0);
glVertex3f (0.1, 0.9, 0.0);
glEnd();
glFlush();
}
void DrawCircle(float cx, float cy, float r, int num_segments)
{
glBegin(GL_LINE_LOOP);
for(int ii = 0; ii < num_segments; ii++)
{
float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle
float x = r * cosf(theta);//calculate the x component
float y = r * sinf(theta);//calculate the y component
glVertex2f(x + cx, y + cy);//output vertex
}
glEnd();
}
void Initialize() {
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
int main(int iArgc, char** cppArgv) {
glutInit(&iArgc, cppArgv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(950, 500);
glutInitWindowPosition(200, 200);
glutCreateWindow("Universum");
Initialize();
glutDisplayFunc(Draw);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
DrawCircle(0.5, 0.5, 0.2, 5);
glutMainLoop();
return 0;
}
我是OpenGL的初学者,现在我开始学习,有人能解释我为什么我没有得到圆(我只看到黑盒子)。
8条答案
按热度按时间46qrfjad1#
看起来就像在画完圆后,立即进入主glut循环,在那里设置了
Draw()
函数,使其在每次循环中都进行绘制。所以它很可能画了个圆,然后立即擦除它,然后画了个正方形。您可能应该将DrawCircle()
设置为glutDisplayFunc()
,或者从Draw()
调用DrawCircle()
。snz8szmq2#
我就是这么做的我希望这能帮上忙。这里有两种类型的圆。充满和未充满。
x6492ojm3#
还有另一种方法来画一个圆-画它在片段着色器。创建四边形:
绑定VBO:
并绘制:
顶点着色器
片段着色器
不要忘记启用alpha混合:
更新:Read more
yyyllmsg4#
x1c 0d1x我们将从这个图像中找到X和Y的值。我们知道,sinθ=垂直/垂直,cosθ=基础/垂直,从图像中我们可以说X=基础,Y=垂直。现在我们可以写X= xusexcos θ和Y= xusexsin θ。
现在看看这段代码
gwbalxhn5#
pb3s4cty6#
这里是一个代码来绘制一个填充椭圆,你可以使用相同的方法,但取代德xcenter和y中心半径
esbemjvw7#
我用下面的代码做了这个,
332nm8kg8#